├── .github ├── FUNDING.yml └── workflows │ ├── lint.yml │ └── problem_matchers │ └── luacheck.json ├── .gitignore ├── .gitmodules ├── .luacheckrc ├── Fonts ├── ARIALN.ttf ├── FRIZQT__.ttf ├── MORPHEUS.ttf └── SKURRI.ttf ├── Interface ├── AddOns │ ├── !Beautycase │ │ ├── !Beautycase.toc │ │ ├── core.lua │ │ └── media │ │ │ ├── textureNormal.tga │ │ │ ├── textureNormalGloss.tga │ │ │ ├── textureNormalWhite.tga │ │ │ └── textureShadow.tga │ ├── !Colorz │ │ ├── !Colorz.lua │ │ └── !Colorz.toc │ ├── evl_RaidStatus │ │ ├── README.textile │ │ ├── evl_RaidStatus.lua │ │ ├── evl_RaidStatus.toc │ │ └── watches.lua │ ├── nBuff │ │ ├── config.lua │ │ ├── core.lua │ │ ├── media │ │ │ ├── fontAtari.ttf │ │ │ ├── textureDebuff.tga │ │ │ ├── textureOverlay.tga │ │ │ └── textureShadow.tga │ │ └── nBuff.toc │ ├── nChat │ │ ├── config.lua │ │ ├── copy.lua │ │ ├── core.lua │ │ ├── hyperlink.lua │ │ ├── invite.lua │ │ ├── media │ │ │ ├── textureCopyHighlight.tga │ │ │ └── textureCopyNormal.tga │ │ ├── nChat.toc │ │ ├── urlcopy.lua │ │ └── whisper.lua │ ├── nCore │ │ ├── core.lua │ │ ├── functions.lua │ │ ├── localization.lua │ │ ├── media │ │ │ ├── textureHighlight.blp │ │ │ ├── textureNormal.blp │ │ │ └── texturePushed.blp │ │ ├── modules │ │ │ ├── altbuy.lua │ │ │ ├── archaeology.lua │ │ │ ├── autogreed.lua │ │ │ ├── autoquest.lua │ │ │ ├── coords.lua │ │ │ ├── coords.xml │ │ │ ├── dressroom.lua │ │ │ ├── durability.lua │ │ │ ├── errors.lua │ │ │ ├── fonts.lua │ │ │ ├── library.lua │ │ │ ├── movetalkinghead.lua │ │ │ ├── objectivetracker.lua │ │ │ ├── orderhall.lua │ │ │ ├── orderhall.xml │ │ │ ├── questtracker.lua │ │ │ ├── skins.lua │ │ │ ├── spellid.lua │ │ │ ├── vignette.lua │ │ │ └── warning.lua │ │ ├── nCore.toc │ │ ├── nCore.xml │ │ └── options.lua │ ├── nMainbar │ │ ├── Bindings.xml │ │ ├── Libs │ │ │ ├── CallbackHandler-1.0 │ │ │ │ ├── CallbackHandler-1.0.lua │ │ │ │ └── CallbackHandler-1.0.xml │ │ │ ├── LibActionButton-1.0-ElvUI │ │ │ │ ├── LibActionButton-1.0.lua │ │ │ │ ├── LibActionButton-1.0.xml │ │ │ │ └── LibButtonGlow-1.0 │ │ │ │ │ └── LibButtonGlow-1.0.lua │ │ │ └── LibStub │ │ │ │ └── LibStub.lua │ │ ├── config.lua │ │ ├── media │ │ │ ├── UI-ActionButton-Glow.blp │ │ │ ├── font.ttf │ │ │ ├── picomenu │ │ │ │ ├── picomenuAchievement.blp │ │ │ │ ├── picomenuHighlight.tga │ │ │ │ ├── picomenuNormal.tga │ │ │ │ └── picomenuTalents.blp │ │ │ ├── textureBackground.tga │ │ │ ├── textureChecked.tga │ │ │ ├── textureHighlight.tga │ │ │ ├── textureNormal.tga │ │ │ ├── texturePushed.tga │ │ │ └── textureShadow.tga │ │ ├── modules │ │ │ ├── ActionButtonSkin.lua │ │ │ ├── Bags.lua │ │ │ ├── FakeBottomRightBar.lua │ │ │ ├── MoveableExtraBars.lua │ │ │ ├── WatchBarCode.lua │ │ │ ├── core.lua │ │ │ ├── mouseover.lua │ │ │ ├── picomenu.lua │ │ │ └── slash.lua │ │ ├── nMainbar.toc │ │ └── nMainbar.xml │ ├── nMinimap │ │ ├── calendar.lua │ │ ├── capture.lua │ │ ├── clock.lua │ │ ├── config.lua │ │ ├── core.lua │ │ ├── difficulty.lua │ │ ├── difficulty.xml │ │ ├── media │ │ │ └── texturePerformance.tga │ │ ├── nMinimap.toc │ │ ├── tab.lua │ │ └── tab.xml │ ├── nPower │ │ ├── config.lua │ │ ├── core.lua │ │ ├── media │ │ │ ├── statusbarTexture.tga │ │ │ ├── textureArrowAbove.tga │ │ │ ├── textureArrowBelow.tga │ │ │ └── textureGlow.tga │ │ ├── nPower.toc │ │ ├── nPower.xml │ │ └── utils.lua │ ├── nTooltip │ │ ├── config.lua │ │ ├── core.lua │ │ ├── health.lua │ │ ├── media │ │ │ ├── UI-PVP-Alliance.blp │ │ │ ├── UI-PVP-FFA.blp │ │ │ └── UI-PVP-Horde.blp │ │ └── nTooltip.toc │ ├── oUF_Neav │ │ ├── arena.lua │ │ ├── boss.lua │ │ ├── castbar.lua │ │ ├── config.lua │ │ ├── core.lua │ │ ├── func │ │ │ ├── aura.lua │ │ │ ├── castbar.lua │ │ │ ├── func.lua │ │ │ └── tags.lua │ │ ├── kill.lua │ │ ├── media │ │ │ ├── AdditionalPowerTexture.blp │ │ │ ├── arenaFrameTexture.blp │ │ │ ├── borderBackground.tga │ │ │ ├── borderIcon.tga │ │ │ ├── borderIndicator.tga │ │ │ ├── borderTarget.tga │ │ │ ├── borderTexture.tga │ │ │ ├── customFrameTexture.blp │ │ │ ├── customTargetTargetTexture.blp │ │ │ ├── customTargetTargetTexture_2.blp │ │ │ ├── customTargetTargetTexture_2_bak.blp │ │ │ ├── fontNumber.ttf │ │ │ ├── fontSmall.ttf │ │ │ ├── fontThick.ttf │ │ │ ├── fontVisitor.ttf │ │ │ ├── nameBackground.tga │ │ │ ├── portraitBackground.tga │ │ │ ├── statusbarTexture.tga │ │ │ └── textureGlow.tga │ │ ├── modules │ │ │ ├── oUF_ArenaElements │ │ │ │ ├── CCIcon.lua │ │ │ │ ├── PVPSpecIcon.lua │ │ │ │ └── Trinkets.lua │ │ │ ├── oUF_LootSpecIndicator │ │ │ │ └── lootspecindicator.lua │ │ │ ├── oUF_Smooth │ │ │ │ └── oUF_Smooth.lua │ │ │ ├── offline.lua │ │ │ ├── petBattleIcon.lua │ │ │ ├── portraittimers.lua │ │ │ └── smartthreat.lua │ │ ├── oUF_Neav.toc │ │ └── oUF_Neav.xml │ └── oUF_NeavRaid │ │ ├── config.lua │ │ ├── core.lua │ │ ├── functions.lua │ │ ├── localization.lua │ │ ├── media │ │ ├── borderIcon.tga │ │ ├── borderIndicator.tga │ │ ├── borderTarget.tga │ │ ├── fontSmall.ttf │ │ ├── fontThick.ttf │ │ ├── fontVisitor.ttf │ │ ├── statusbarTexture.tga │ │ └── textureGlow.tga │ │ ├── modules │ │ ├── CallbackHandler-1.0 │ │ │ └── CallbackHandler-1.0.lua │ │ ├── LibSharedMedia-3.0 │ │ │ ├── CHANGES.txt │ │ │ ├── LibSharedMedia-3.0.lua │ │ │ └── LibSharedMedia-3.0.toc │ │ ├── LibStub │ │ │ └── LibStub.lua │ │ ├── oUF_AuraWatch │ │ │ └── oUF_AuraWatch.lua │ │ └── oUF_Freebgrid │ │ │ ├── oUF_Freebgrid_Auras.lua │ │ │ ├── oUF_Freebgrid_AurasList.lua │ │ │ └── oUF_Freebgrid_AurasPriority.lua │ │ ├── oUF_NeavRaid.toc │ │ ├── oUF_NeavRaid.xml │ │ ├── raidmanager.lua │ │ └── tags.lua ├── DialogFrame │ ├── UI-DialogBox-Border-White.tga │ ├── UI-DialogBox-Border.blp │ ├── UI-DialogBox-Border_OLD.blp │ ├── UI-DialogBox-Corner.blp │ ├── UI-DialogBox-Gold-Border.blp │ ├── UI-DialogBox-Gold-Corner.blp │ ├── UI-DialogBox-Gold-Header.blp │ └── UI-DialogBox-Header.blp ├── PaperDollInfoFrame │ └── UI-Character-Skills-Bar.blp ├── TargetingFrame │ ├── UI-RaidTargetingIcons.blp │ ├── UI-StatusBar.blp │ ├── UI-TargetingFrame-BarFill.blp │ └── UI-TargetingFrame-LevelBackground.blp └── Tooltips │ ├── Nameplate-Border.blp │ ├── Nameplate-Glow.blp │ └── UI-Tooltip-Border.blp ├── LICENSE ├── Makefile └── README.md /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: lithammer 2 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: Lint 2 | 3 | on: 4 | pull_request: 5 | branches: [master] 6 | 7 | jobs: 8 | luacheck: 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - uses: actions/checkout@v2 13 | with: 14 | fetch-depth: 0 15 | 16 | - name: install luarocks 17 | run: sudo apt install --no-install-recommends luarocks 18 | 19 | - name: install luacheck 20 | run: sudo luarocks install luacheck 21 | 22 | - name: register problem matcher 23 | run: echo "::add-matcher::.github/workflows/problem_matchers/luacheck.json" 24 | 25 | - name: run luacheck 26 | run: luacheck --formatter=plain Interface/AddOns 27 | -------------------------------------------------------------------------------- /.github/workflows/problem_matchers/luacheck.json: -------------------------------------------------------------------------------- 1 | { 2 | "problemMatcher": [ 3 | { 4 | "owner": "luacheck", 5 | "pattern": [ 6 | { 7 | "regexp": "^(.*):(\\d+):(\\d+): (.*)$", 8 | "file": 1, 9 | "line": 2, 10 | "column": 3, 11 | "message": 4 12 | } 13 | ] 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /Cache 2 | /Data 3 | /Errors 4 | /Interface/AddOns/Blizzard_* 5 | /Logs 6 | /Screenshots 7 | /Utils 8 | /WTF 9 | 10 | /.build.info 11 | /.flavor.info 12 | /.patch.result 13 | 14 | *.app 15 | *.exe 16 | *.db 17 | *.dll 18 | *.mfil 19 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "Interface/AddOns/oUF"] 2 | path = Interface/AddOns/oUF 3 | url = git@github.com:oUF-wow/oUF.git 4 | [submodule "Interface/AddOns/nPlates"] 5 | path = Interface/AddOns/nPlates 6 | url = git@github.com:Grimsbain/nPlates.git 7 | [submodule "Interface/AddOns/oUF_Neav/modules/oUF_MovableFrames"] 8 | path = Interface/AddOns/oUF_Neav/modules/oUF_MovableFrames 9 | url = git@github.com:oUF-wow/oUF_MovableFrames.git 10 | -------------------------------------------------------------------------------- /Fonts/ARIALN.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithammer/NeavUI/bc6b61557ee7d0ffeadf0e8c75bc623f4cc6f91f/Fonts/ARIALN.ttf -------------------------------------------------------------------------------- /Fonts/FRIZQT__.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithammer/NeavUI/bc6b61557ee7d0ffeadf0e8c75bc623f4cc6f91f/Fonts/FRIZQT__.ttf -------------------------------------------------------------------------------- /Fonts/MORPHEUS.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithammer/NeavUI/bc6b61557ee7d0ffeadf0e8c75bc623f4cc6f91f/Fonts/MORPHEUS.ttf -------------------------------------------------------------------------------- /Fonts/SKURRI.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithammer/NeavUI/bc6b61557ee7d0ffeadf0e8c75bc623f4cc6f91f/Fonts/SKURRI.ttf -------------------------------------------------------------------------------- /Interface/AddOns/!Beautycase/!Beautycase.toc: -------------------------------------------------------------------------------- 1 | ## Interface: 90002 2 | ## Title: !Beautycase 3 | 4 | core.lua 5 | -------------------------------------------------------------------------------- /Interface/AddOns/!Beautycase/media/textureNormal.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithammer/NeavUI/bc6b61557ee7d0ffeadf0e8c75bc623f4cc6f91f/Interface/AddOns/!Beautycase/media/textureNormal.tga -------------------------------------------------------------------------------- /Interface/AddOns/!Beautycase/media/textureNormalGloss.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithammer/NeavUI/bc6b61557ee7d0ffeadf0e8c75bc623f4cc6f91f/Interface/AddOns/!Beautycase/media/textureNormalGloss.tga -------------------------------------------------------------------------------- /Interface/AddOns/!Beautycase/media/textureNormalWhite.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithammer/NeavUI/bc6b61557ee7d0ffeadf0e8c75bc623f4cc6f91f/Interface/AddOns/!Beautycase/media/textureNormalWhite.tga -------------------------------------------------------------------------------- /Interface/AddOns/!Beautycase/media/textureShadow.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithammer/NeavUI/bc6b61557ee7d0ffeadf0e8c75bc623f4cc6f91f/Interface/AddOns/!Beautycase/media/textureShadow.tga -------------------------------------------------------------------------------- /Interface/AddOns/!Colorz/!Colorz.lua: -------------------------------------------------------------------------------- 1 | 2 | -- Sets manabar color for default unit frames. 3 | 4 | local function CustomManaColor(manaBar) 5 | local powerType = UnitPowerType(manaBar.unit) 6 | 7 | if powerType == 0 then 8 | manaBar:SetStatusBarColor(0.0, 0.55, 1.0) 9 | end 10 | end 11 | hooksecurefunc("UnitFrameManaBar_UpdateType", CustomManaColor) 12 | 13 | -- Set faction colors for Repuation Frame and tracking bar. 14 | 15 | local TOOLTIP_FACTION_COLORS = { 16 | [1] = {r = 1, g = 0, b = 0}, 17 | [2] = {r = 1, g = 0, b = 0}, 18 | [3] = {r = 1, g = 1, b = 0}, 19 | [4] = {r = 1, g = 1, b = 0}, 20 | [5] = {r = 0, g = 1, b = 0}, 21 | [6] = {r = 0, g = 1, b = 0}, 22 | [7] = {r = 0, g = 1, b = 0}, 23 | [8] = {r = 0, g = 1, b = 0}, 24 | } 25 | 26 | local CUSTOM_FACTION_BAR_COLORS = { 27 | [1] = {r = 0.63, g = 0, b = 0}, 28 | [2] = {r = 0.63, g = 0, b = 0}, 29 | [3] = {r = 0.63, g = 0, b = 0}, 30 | [4] = {r = 0.82, g = 0.67, b = 0}, 31 | [5] = {r = 0.32, g = 0.67, b = 0}, 32 | [6] = {r = 0.32, g = 0.67, b = 0}, 33 | [7] = {r = 0.32, g = 0.67, b = 0}, 34 | [8] = {r = 0, g = 0.75, b = 0.44}, 35 | } 36 | 37 | hooksecurefunc("ReputationFrame_Update", function(showLFGPulse) 38 | local numFactions = GetNumFactions() 39 | local factionOffset = FauxScrollFrame_GetOffset(ReputationListScrollFrame) 40 | 41 | for i=1, NUM_FACTIONS_DISPLAYED, 1 do 42 | local factionIndex = factionOffset + i 43 | local factionBar = _G["ReputationBar"..i.."ReputationBar"] 44 | 45 | if factionIndex <= numFactions then 46 | local _, _, standingID, _, _, _, _, _, _, _, _, _, _, factionID = GetFactionInfo(factionIndex) 47 | 48 | local colorIndex = standingID 49 | 50 | local friendID = GetFriendshipReputation(factionID) 51 | 52 | if friendID ~= nil then 53 | colorIndex = 5 -- always color friendships green 54 | end 55 | 56 | local color = CUSTOM_FACTION_BAR_COLORS[colorIndex] 57 | factionBar:SetStatusBarColor(color.r, color.g, color.b) 58 | end 59 | end 60 | end) 61 | 62 | hooksecurefunc(ReputationBarMixin, "Update", function(self) 63 | local _, reaction, _, _, _, factionID = GetWatchedFactionInfo() 64 | local colorIndex = reaction 65 | local friendshipID = GetFriendshipReputation(factionID) 66 | 67 | if friendshipID then 68 | colorIndex = 5 -- always color friendships green 69 | end 70 | 71 | local color = CUSTOM_FACTION_BAR_COLORS[colorIndex] 72 | self:SetBarColor(color.r, color.g, color.b, 1) 73 | end) 74 | 75 | -- Override the default GameTooltip_UnitColor function. 76 | 77 | function GameTooltip_UnitColor(unit) -- luacheck: ignore 78 | local r, g, b 79 | 80 | if UnitIsDead(unit) or UnitIsGhost(unit) or UnitIsTapDenied(unit) then 81 | r = 0.5 82 | g = 0.5 83 | b = 0.5 84 | elseif UnitIsPlayer(unit) then 85 | local _, class = UnitClass(unit) 86 | if class then 87 | r = RAID_CLASS_COLORS[class].r 88 | g = RAID_CLASS_COLORS[class].g 89 | b = RAID_CLASS_COLORS[class].b 90 | else 91 | if UnitIsFriend(unit, "player") then 92 | r = 0.60 93 | g = 0.60 94 | b = 0.60 95 | else 96 | r = 1 97 | g = 0 98 | b = 0 99 | end 100 | end 101 | elseif UnitPlayerControlled(unit) then 102 | if UnitCanAttack(unit, "player") then 103 | if not UnitCanAttack("player", unit) then 104 | r = 157/255 105 | g = 197/255 106 | b = 255/255 107 | else 108 | r = 1 109 | g = 0 110 | b = 0 111 | end 112 | elseif UnitCanAttack("player", unit) then 113 | r = 1 114 | g = 1 115 | b = 0 116 | elseif UnitIsPVP(unit) then 117 | r = 0 118 | g = 1 119 | b = 0 120 | else 121 | r = 157/255 122 | g = 197/255 123 | b = 255/255 124 | end 125 | else 126 | local reaction = UnitReaction(unit, "player") 127 | 128 | if reaction then 129 | r = TOOLTIP_FACTION_COLORS[reaction].r 130 | g = TOOLTIP_FACTION_COLORS[reaction].g 131 | b = TOOLTIP_FACTION_COLORS[reaction].b 132 | else 133 | r = 157/255 134 | g = 197/255 135 | b = 255/255 136 | end 137 | end 138 | 139 | return r, g, b 140 | end 141 | 142 | -- Override the name background on default unit frames. 143 | 144 | hooksecurefunc("TargetFrame_CheckFaction", function(self) 145 | if UnitPlayerControlled(self.unit) then 146 | self.nameBackground:SetVertexColor(GameTooltip_UnitColor(self.unit)) 147 | end 148 | end) 149 | -------------------------------------------------------------------------------- /Interface/AddOns/!Colorz/!Colorz.toc: -------------------------------------------------------------------------------- 1 | ## Interface: 90002 2 | ## Title: !Colorz 3 | ## Notes: Custom colors 4 | 5 | !Colorz.lua 6 | -------------------------------------------------------------------------------- /Interface/AddOns/evl_RaidStatus/README.textile: -------------------------------------------------------------------------------- 1 | Modular text-based raid status monitor. 2 | 3 | !http://i10.tinypic.com/6fajod2.jpg! 4 | 5 | h2. Customization 6 | 7 | AddWatch accepts a name and a callback parameter which is fed with the unit id of a raider, a simple watch can be added as follows: 8 | 9 |
addon:AddWatch("Dead", function(unit) return UnitIsDeadOrGhost(unit) end)
10 | 11 | You can add much more complex callbacks: 12 | 13 |
local healerClasses = {"PRIEST", "SHAMAN", "DRUID", "PALADIN"}
14 | local lowManaThreshold = 0.2
15 | 
16 | addon:AddWatch("Low Healer Mana", function(unit)
17 |     local class, classId = UnitClass(unit)
18 | 
19 |     -- We only want to include healer classes
20 |     if healerClasses[classId] and UnitPowerType(unit) == 0 then
21 |         return (UnitMana(unit) / UnitMaxMana(unit) <= lowManaThreshold)
22 |     end
23 | end)
24 | 
25 | -------------------------------------------------------------------------------- /Interface/AddOns/evl_RaidStatus/evl_RaidStatus.lua: -------------------------------------------------------------------------------- 1 | local _, addon = ... 2 | local frame = CreateFrame("Button", nil, UIParent) 3 | local watches = {} 4 | 5 | local text = frame:CreateFontString(nil, "ARTWORK") 6 | text:SetFontObject(GameFontHighlightSmall) 7 | text:SetPoint("TOPLEFT", frame) 8 | 9 | local memberSortCompare = function(a, b) 10 | return ((a.color.r + a.color.g + a.color.b) .. a.name) < ((b.color.r + b.color.g + b.color.b) .. b.name) 11 | end 12 | 13 | local lastUpdate = 0 14 | local result = nil 15 | local onUpdate = function(self, elapsed) 16 | lastUpdate = lastUpdate + elapsed 17 | 18 | if lastUpdate > 1 then 19 | lastUpdate = 0 20 | result = nil 21 | 22 | if GetNumGroupMembers() > 0 then 23 | for name, callback in pairs(watches) do 24 | local count = 0 25 | 26 | for i = 1, GetNumGroupMembers() do 27 | local unit = "raid" .. i 28 | 29 | if UnitExists(unit) and callback(unit) then 30 | count = count + 1 31 | end 32 | end 33 | 34 | if count > 0 then 35 | result = (result and result .. ", " or "") .. name .. ": " .. count 36 | end 37 | end 38 | end 39 | 40 | if result then 41 | text:SetText(result) 42 | text:Show() 43 | 44 | frame:SetWidth(text:GetWidth()) 45 | else 46 | text:Hide() 47 | end 48 | end 49 | end 50 | 51 | local matches, classId 52 | local onEnter = function() 53 | GameTooltip:SetOwner(frame, "ANCHOR_BOTTOMLEFT") 54 | 55 | for name, callback in pairs(watches) do 56 | matches = {} 57 | 58 | for i = 1, GetNumGroupMembers() do 59 | local unit = "raid" .. i 60 | 61 | if UnitExists(unit) and callback(unit) then 62 | _, classId = UnitClass(unit) 63 | 64 | -- TODO: Make sure classId is available at this time 65 | table.insert(matches, {name = UnitName(unit), color = RAID_CLASS_COLORS[classId]}) 66 | end 67 | end 68 | 69 | if next(matches) then 70 | if GameTooltip:NumLines() > 0 then 71 | GameTooltip:AddLine(" ") 72 | end 73 | 74 | GameTooltip:AddLine(name .. ":", 1, 1, 1) 75 | 76 | table.sort(matches, memberSortCompare) 77 | 78 | for _, match in pairs(matches) do 79 | GameTooltip:AddLine(match.name, match.color.r, match.color.g, match.color.b) 80 | end 81 | end 82 | end 83 | 84 | GameTooltip:Show() 85 | end 86 | 87 | function addon:AddWatch(name, callback) 88 | watches[name] = callback 89 | end 90 | 91 | frame:SetPoint("TOPLEFT", UIParent, "TOPLEFT", 3, -3) 92 | frame:SetHeight(16) 93 | 94 | frame:SetScript("OnUpdate", onUpdate) 95 | frame:SetScript("OnEnter", onEnter) 96 | frame:SetScript("OnLeave", function() GameTooltip:Hide() end) 97 | -------------------------------------------------------------------------------- /Interface/AddOns/evl_RaidStatus/evl_RaidStatus.toc: -------------------------------------------------------------------------------- 1 | ## Interface: 90002 2 | ## Title: Evl's Raid Status 3 | ## Author: Evl 4 | 5 | evl_RaidStatus.lua 6 | 7 | watches.lua 8 | -------------------------------------------------------------------------------- /Interface/AddOns/evl_RaidStatus/watches.lua: -------------------------------------------------------------------------------- 1 | local _, addon = ... 2 | 3 | addon:AddWatch("Members", function(unit) return not IsInInstance() and UnitIsConnected(unit) end) 4 | addon:AddWatch("Dead", function(unit) return UnitIsDeadOrGhost(unit) end) 5 | addon:AddWatch("Offline", function(unit) return not UnitIsConnected(unit) end) 6 | addon:AddWatch("AFK", function(unit) return UnitIsAFK(unit) end) 7 | -------------------------------------------------------------------------------- /Interface/AddOns/nBuff/config.lua: -------------------------------------------------------------------------------- 1 | local _, nBuff = ... 2 | 3 | nBuff.Config = { 4 | buffSize = 36, 5 | buffScale = 1, 6 | buffBorderColor = {1, 1, 1}, 7 | 8 | buffFontSize = 14, 9 | buffCountSize = 16, 10 | 11 | borderBuff = "Interface\\AddOns\\nBuff\\media\\textureOverlay", 12 | borderDebuff = "Interface\\AddOns\\nBuff\\media\\textureDebuff", 13 | 14 | debuffSize = 36, 15 | debuffScale = 1, 16 | 17 | debuffFontSize = 14, 18 | debuffCountSize = 16, 19 | 20 | paddingX = 7, 21 | paddingY = 7, 22 | buffPerRow = 8, 23 | 24 | durationFont = STANDARD_TEXT_FONT, 25 | countFont = STANDARD_TEXT_FONT, 26 | } 27 | -------------------------------------------------------------------------------- /Interface/AddOns/nBuff/media/fontAtari.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithammer/NeavUI/bc6b61557ee7d0ffeadf0e8c75bc623f4cc6f91f/Interface/AddOns/nBuff/media/fontAtari.ttf -------------------------------------------------------------------------------- /Interface/AddOns/nBuff/media/textureDebuff.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithammer/NeavUI/bc6b61557ee7d0ffeadf0e8c75bc623f4cc6f91f/Interface/AddOns/nBuff/media/textureDebuff.tga -------------------------------------------------------------------------------- /Interface/AddOns/nBuff/media/textureOverlay.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithammer/NeavUI/bc6b61557ee7d0ffeadf0e8c75bc623f4cc6f91f/Interface/AddOns/nBuff/media/textureOverlay.tga -------------------------------------------------------------------------------- /Interface/AddOns/nBuff/media/textureShadow.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithammer/NeavUI/bc6b61557ee7d0ffeadf0e8c75bc623f4cc6f91f/Interface/AddOns/nBuff/media/textureShadow.tga -------------------------------------------------------------------------------- /Interface/AddOns/nBuff/nBuff.toc: -------------------------------------------------------------------------------- 1 | ## Interface: 90002 2 | ## Title: |cffCC3333 n|rBuff 3 | 4 | config.lua 5 | core.lua 6 | -------------------------------------------------------------------------------- /Interface/AddOns/nChat/config.lua: -------------------------------------------------------------------------------- 1 | local _, nChat = ... 2 | 3 | nChat.Config = { 4 | alwaysAlertOnWhisper = true, 5 | 6 | disableFade = false, 7 | chatOutline = false, 8 | 9 | enableChatWindowBorder = false, 10 | 11 | enableVoiceChatButtons = false, 12 | enableQuickJoinButton = true, 13 | enableHyperlinkTooltip = false, 14 | enableBorderColoring = true, 15 | 16 | showInputBoxAbove = true, -- Show the chat input box above the chat window 17 | ignoreArrows = false, -- Ignore the arrow keys when typing in the input box unless alt is pressed 18 | 19 | tab = { 20 | fontSize = 15, 21 | fontOutline = true, 22 | normalColor = {1, 1, 1}, 23 | specialColor = {1, 0, 1}, 24 | selectedColor = {0, 0.75, 1}, 25 | }, 26 | } 27 | -------------------------------------------------------------------------------- /Interface/AddOns/nChat/copy.lua: -------------------------------------------------------------------------------- 1 | 2 | local _, nChat = ... 3 | local cfg = nChat.Config 4 | 5 | local concat = table.concat 6 | 7 | local chatWidth, chatHeight = ChatFrame1:GetSize() 8 | local container = CreateFrame("Frame", nil, UIParent, "BackdropTemplate") 9 | container:SetSize(chatWidth, chatHeight) 10 | container:SetFrameStrata("DIALOG") 11 | container:CreateBeautyBorder(12) 12 | container:SetBackdrop({ 13 | bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", 14 | edgeSize = 16, 15 | tile = true, tileSize = 16, 16 | insets = { left = 3, right = 3, top = 3, bottom = 3 } 17 | }) 18 | container:SetBackdropColor(0, 0, 0) 19 | container:Hide() 20 | 21 | local title = container:CreateFontString(nil, "OVERLAY") 22 | title:SetPoint("TOPLEFT", 8, -8) 23 | title:SetFont(STANDARD_TEXT_FONT, 18) 24 | title:SetTextColor(1, 1, 0) 25 | title:SetShadowOffset(1, -1) 26 | title:SetJustifyH("LEFT") 27 | 28 | local closeButton = CreateFrame("Button", nil, container, "UIPanelCloseButton") 29 | closeButton:SetPoint("TOPRIGHT", 0, -1) 30 | 31 | local copyBox = CreateFrame("EditBox", nil, container) 32 | copyBox:SetSize(chatWidth - 38, chatHeight - 38) -- a ScrollFrame's child needs to have its size set explicitly 33 | copyBox:SetMultiLine(true) 34 | copyBox:SetAutoFocus(false) 35 | copyBox:SetScript("OnEscapePressed", function() 36 | container:Hide() 37 | end) 38 | 39 | local scroll = CreateFrame("ScrollFrame", nil, container, "UIPanelScrollFrameTemplate") 40 | scroll:SetPoint("TOPLEFT", 8, -30) 41 | scroll:SetPoint("BOTTOMRIGHT", -30, 8) 42 | scroll:SetScrollChild(copyBox) 43 | 44 | scroll.ScrollBar:SetScript("OnMinMaxChanged", function(self, _, max) 45 | -- need to use a timer here, because the values take time to update 46 | C_Timer.After(2, function() self:SetValue(max) end) 47 | end) 48 | 49 | local function GetChatLines(chat) 50 | local lines = {} 51 | for message = 1, chat:GetNumMessages() do 52 | lines[message] = chat:GetMessageInfo(message) 53 | end 54 | 55 | return lines 56 | end 57 | 58 | local function CopyChat(chat) 59 | ToggleFrame(container) 60 | 61 | if container:IsShown() then 62 | if cfg.showInputBoxAbove then 63 | local editBox = _G[chat:GetName().."EditBox"] 64 | container:SetPoint("BOTTOMLEFT", editBox, "TOPLEFT", 3, 10) 65 | container:SetPoint("BOTTOMRIGHT", editBox, "TOPRIGHT", -3, 10) 66 | else 67 | local tabHeight = _G[chat:GetName().."Tab"]:GetHeight() 68 | container:SetPoint("BOTTOMLEFT", chat, "TOPLEFT", 0, tabHeight + 10) 69 | container:SetPoint("BOTTOMRIGHT", chat, "TOPRIGHT", 0, tabHeight + 10) 70 | end 71 | 72 | local width, height = container:GetSize() 73 | copyBox:SetSize(width - 38, height - 38) 74 | scroll:UpdateScrollChildRect() 75 | 76 | title:SetText(chat.name) 77 | 78 | local f1, f2, f3 = chat:GetFont() 79 | copyBox:SetFont(f1, f2, f3) 80 | 81 | local lines = GetChatLines(chat) 82 | local text = concat(lines, "\n") 83 | copyBox:SetMaxLetters(#lines * 255 + #lines) 84 | copyBox:SetText(text) 85 | end 86 | end 87 | 88 | local function CreateCopyButton(self) 89 | self.Copy = CreateFrame("Button", nil, self) 90 | self.Copy:SetSize(20, 20) 91 | self.Copy:SetPoint("TOPRIGHT", self, -5, -5) 92 | 93 | self.Copy:SetNormalTexture("Interface\\AddOns\\nChat\\media\\textureCopyNormal") 94 | self.Copy:GetNormalTexture():SetSize(20, 20) 95 | 96 | self.Copy:SetHighlightTexture("Interface\\AddOns\\nChat\\media\\textureCopyHighlight") 97 | self.Copy:GetHighlightTexture():SetAllPoints(self.Copy:GetNormalTexture()) 98 | 99 | local tab = _G[self:GetName().."Tab"] 100 | hooksecurefunc(tab, "SetAlpha", function() 101 | self.Copy:SetAlpha(tab:GetAlpha()*0.55) 102 | end) 103 | 104 | self.Copy:SetScript("OnMouseDown", function(self) 105 | self:GetNormalTexture():ClearAllPoints() 106 | self:GetNormalTexture():SetPoint("CENTER", 1, -1) 107 | end) 108 | 109 | self.Copy:SetScript("OnMouseUp", function() 110 | self.Copy:GetNormalTexture():ClearAllPoints() 111 | self.Copy:GetNormalTexture():SetPoint("CENTER") 112 | 113 | if self.Copy:IsMouseOver() then 114 | CopyChat(self) 115 | end 116 | end) 117 | end 118 | 119 | local function EnableCopyButton() 120 | for _, v in pairs(CHAT_FRAMES) do 121 | local chat = _G[v] 122 | if chat and not chat.Copy then 123 | CreateCopyButton(chat) 124 | end 125 | end 126 | end 127 | hooksecurefunc("FCF_OpenTemporaryWindow", EnableCopyButton) 128 | EnableCopyButton() 129 | -------------------------------------------------------------------------------- /Interface/AddOns/nChat/hyperlink.lua: -------------------------------------------------------------------------------- 1 | 2 | local _, nChat = ... 3 | local cfg = nChat.Config 4 | 5 | -- Mouseover Itemlinks in the chat 6 | -- Code provided by the Tukui crew (Tukui.org) 7 | 8 | if not cfg.enableHyperlinkTooltip then 9 | return 10 | end 11 | 12 | local orig1, orig2 = {}, {} 13 | local GameTooltip = GameTooltip 14 | 15 | local linktypes = { 16 | item = true, 17 | enchant = true, 18 | spell = true, 19 | quest = true, 20 | unit = true, 21 | talent = true, 22 | achievement = true, 23 | glyph = true 24 | } 25 | 26 | local function OnHyperlinkEnter(frame, link, ...) 27 | local linktype = link:match("^([^:]+)") 28 | if linktype and linktypes[linktype] then 29 | GameTooltip:SetOwner(ChatFrame1, "ANCHOR_CURSOR", 0, 20) 30 | GameTooltip:SetHyperlink(link) 31 | GameTooltip:Show() 32 | else 33 | GameTooltip:Hide() 34 | end 35 | 36 | if orig1[frame] then 37 | return orig1[frame](frame, link, ...) 38 | end 39 | end 40 | 41 | local function OnHyperlinkLeave(frame, ...) 42 | GameTooltip:Hide() 43 | 44 | if orig2[frame] then 45 | return orig2[frame](frame, ...) 46 | end 47 | end 48 | 49 | local function EnableItemLinkTooltip() 50 | for _, v in pairs(CHAT_FRAMES) do 51 | local chat = _G[v] 52 | if chat and not chat.URLCopy then 53 | orig1[chat] = chat:GetScript("OnHyperlinkEnter") 54 | chat:SetScript("OnHyperlinkEnter", OnHyperlinkEnter) 55 | 56 | orig2[chat] = chat:GetScript("OnHyperlinkLeave") 57 | chat:SetScript("OnHyperlinkLeave", OnHyperlinkLeave) 58 | chat.URLCopy = true 59 | end 60 | end 61 | end 62 | hooksecurefunc("FCF_OpenTemporaryWindow", EnableItemLinkTooltip) 63 | EnableItemLinkTooltip() 64 | -------------------------------------------------------------------------------- /Interface/AddOns/nChat/invite.lua: -------------------------------------------------------------------------------- 1 | local sub = string.sub 2 | local match = string.match 3 | 4 | StaticPopupDialogs["NCHAT_ALTCLICK"] = { 5 | text = ERR_INVITE_PLAYER_S, 6 | button1 = INVITE, 7 | button2 = CANCEL, 8 | OnAccept = function(self) 9 | C_PartyInfo.InviteUnit(self.data) 10 | end, 11 | timeout = 0, 12 | whileDead = true, 13 | hideOnEscape = true, 14 | enterClicksFirstButton = true, 15 | preferredIndex = 3, 16 | } 17 | 18 | hooksecurefunc("SetItemRef", function(link, text, button, chatFrame) 19 | local linkType = sub(link, 1, 6) 20 | if IsAltKeyDown() and linkType == "player" then 21 | for i = 1, NUM_CHAT_WINDOWS do 22 | local editBox = _G['ChatFrame'..i..'EditBox'] 23 | editBox:Hide() 24 | end 25 | local name = match(link, "player:([^:]+)") 26 | StaticPopup_Show("NCHAT_ALTCLICK", name, nil, name) 27 | end 28 | end) 29 | 30 | local eventWatcher = CreateFrame("Frame") 31 | eventWatcher:RegisterEvent("ADDON_LOADED") 32 | -------------------------------------------------------------------------------- /Interface/AddOns/nChat/media/textureCopyHighlight.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithammer/NeavUI/bc6b61557ee7d0ffeadf0e8c75bc623f4cc6f91f/Interface/AddOns/nChat/media/textureCopyHighlight.tga -------------------------------------------------------------------------------- /Interface/AddOns/nChat/media/textureCopyNormal.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithammer/NeavUI/bc6b61557ee7d0ffeadf0e8c75bc623f4cc6f91f/Interface/AddOns/nChat/media/textureCopyNormal.tga -------------------------------------------------------------------------------- /Interface/AddOns/nChat/nChat.toc: -------------------------------------------------------------------------------- 1 | ## Interface: 90002 2 | ## Title: |cffCC3333 n|rChat 3 | ## RequiredDeps: !Beautycase 4 | 5 | config.lua 6 | core.lua 7 | copy.lua 8 | hyperlink.lua 9 | urlcopy.lua 10 | whisper.lua 11 | invite.lua 12 | -------------------------------------------------------------------------------- /Interface/AddOns/nChat/urlcopy.lua: -------------------------------------------------------------------------------- 1 | local find = string.find 2 | local gsub = string.gsub 3 | 4 | local found = false 5 | 6 | local function ColorURL(text, url) 7 | found = true 8 | return " |H".."url"..":"..tostring(url).."|h".."|cff0099FF["..tostring(url).."]|h|r " 9 | end 10 | 11 | local function ScanURL(frame, text, ...) 12 | found = false 13 | 14 | if find(text:upper(), "%pTINTERFACE%p+") then 15 | found = true 16 | end 17 | 18 | -- 192.168.2.1:1234 19 | if not found then 20 | text = gsub(text, "(%s?)(%d%d?%d?%.%d%d?%d?%.%d%d?%d?%.%d%d?%d?:%d%d?%d?%d?%d?)(%s?)", ColorURL) 21 | end 22 | -- 192.168.2.1 23 | if not found then 24 | text = gsub(text, "(%s?)(%d%d?%d?%.%d%d?%d?%.%d%d?%d?%.%d%d?%d?)(%s?)", ColorURL) 25 | end 26 | -- www.url.com:3333 27 | if not found then 28 | text = gsub(text, "(%s?)([%w_-]+%.?[%w_-]+%.[%w_-]+:%d%d%d?%d?%d?)(%s?)", ColorURL) 29 | end 30 | -- http://www.google.com 31 | if not found then 32 | text = gsub(text, "(%s?)(%a+://[%w_/%.%?%%=~&-\"%-]+)(%s?)", ColorURL) 33 | end 34 | -- www.google.com 35 | if not found then 36 | text = gsub(text, "(%s?)(www%.[%w_/%.%?%%=~&-\"%-]+)(%s?)", ColorURL) 37 | end 38 | -- url@domain.com 39 | if not found then 40 | text = gsub(text, "(%s?)([_%w-%.~-]+@[_%w-]+%.[_%w-%.]+)(%s?)", ColorURL) 41 | end 42 | 43 | frame.add(frame, text,...) 44 | end 45 | 46 | local function EnableURLCopy() 47 | for _, v in pairs(CHAT_FRAMES) do 48 | local chat = _G[v] 49 | if chat and not chat.hasURLCopy and chat ~= "ChatFrame2" then 50 | chat.add = chat.AddMessage 51 | chat.AddMessage = ScanURL 52 | chat.hasURLCopy = true 53 | end 54 | end 55 | end 56 | hooksecurefunc("FCF_OpenTemporaryWindow", EnableURLCopy) 57 | 58 | local _ChatFrame_OnHyperlinkShow = ChatFrame_OnHyperlinkShow 59 | function ChatFrame_OnHyperlinkShow(self, link, text, button) -- luacheck: ignore 60 | local type, value = link:match("(%a+):(.+)") 61 | if type == "url" then 62 | local editBox = _G[self:GetName().."EditBox"] 63 | if editBox then 64 | editBox:Show() 65 | editBox:SetText(value) 66 | editBox:SetFocus() 67 | editBox:HighlightText() 68 | end 69 | else 70 | _ChatFrame_OnHyperlinkShow(self, link, text, button) 71 | end 72 | end 73 | 74 | EnableURLCopy() 75 | -------------------------------------------------------------------------------- /Interface/AddOns/nChat/whisper.lua: -------------------------------------------------------------------------------- 1 | local gsub = string.gsub 2 | 3 | for i = 1, NUM_CHAT_WINDOWS do 4 | local editBox = _G["ChatFrame"..i.."EditBox"] 5 | 6 | editBox:HookScript("OnTextChanged", function(self) 7 | local text = self:GetText() 8 | if UnitExists("target") and UnitIsPlayer("target") and UnitIsFriend("player", "target") then 9 | if text:len() < 5 then 10 | if text:sub(1, 4) == "/tt " then 11 | local unitname, realm = UnitName("target") 12 | 13 | if unitname then 14 | unitname = gsub(unitname, " ", "") 15 | end 16 | 17 | if unitname and not UnitIsSameServer("player", "target") then 18 | unitname = unitname.."-"..gsub(realm, " ", "") 19 | end 20 | 21 | ChatFrame_SendTell((unitname or SPELL_FAILED_BAD_TARGETS), ChatFrame1) 22 | end 23 | end 24 | end 25 | end) 26 | end 27 | -------------------------------------------------------------------------------- /Interface/AddOns/nCore/core.lua: -------------------------------------------------------------------------------- 1 | local _, nCore = ... 2 | 3 | function nCore_OnLoad(self) 4 | self:RegisterEvent("PLAYER_LOGIN") 5 | self:RegisterEvent("ADDON_LOADED") 6 | 7 | if AddonList then 8 | _G["ADDON_DEMAND_LOADED"] = "On Demand" 9 | end 10 | 11 | if MerchantFrame then 12 | _G["MerchantRepairText"]:SetText("") 13 | end 14 | end 15 | 16 | function nCore_OnEvent(self, event, ...) 17 | if event == "PLAYER_LOGIN" then 18 | SetCVar("ScreenshotQuality", 10) 19 | elseif event == "ADDON_LOADED" then 20 | local name = ... 21 | if name == "nCore" then 22 | nCore:SetDefaultOptions() 23 | nCore:AltBuy() 24 | nCore:ArchaeologyHelper() 25 | nCore:AutoGreed() 26 | nCore:AutoQuest() 27 | nCore:Dressroom() 28 | nCore:Durability() 29 | nCore:ErrorFilter() 30 | nCore:Fonts() 31 | nCore:MapCoords() 32 | nCore:MoveTalkingHeads() 33 | nCore:QuestTracker() 34 | nCore:ObjectiveTracker() 35 | nCore:Skins() 36 | nCore:SpellID() 37 | nCore:VignetteAlert() 38 | end 39 | end 40 | end 41 | 42 | SlashCmdList["RELOADUI"] = function() 43 | ReloadUI() 44 | end 45 | SLASH_RELOADUI1 = "/rl" 46 | 47 | SlashCmdList["ACTIONCAM"] = function(msg) 48 | if msg == "basic" or msg == "full" or msg == "off" then 49 | ConsoleExec("actioncam "..msg) 50 | else 51 | print("ActionCam Options: basic, full, off") 52 | end 53 | end 54 | SLASH_ACTIONCAM1 = "/actioncam" 55 | -------------------------------------------------------------------------------- /Interface/AddOns/nCore/functions.lua: -------------------------------------------------------------------------------- 1 | local _, nCore = ... 2 | 3 | function nCore:RegisterDefaultSetting(key, value) 4 | if nCoreDB == nil then 5 | nCoreDB = {} 6 | end 7 | if nCoreDB[key] == nil then 8 | nCoreDB[key] = value 9 | end 10 | end 11 | 12 | function nCore:SetDefaultOptions() 13 | nCore:RegisterDefaultSetting("AltBuy", true) 14 | nCore:RegisterDefaultSetting("ArchaeologyHelper", true) 15 | nCore:RegisterDefaultSetting("AutoGreed", true) 16 | nCore:RegisterDefaultSetting("AutoQuest", true) 17 | nCore:RegisterDefaultSetting("Dressroom", true) 18 | nCore:RegisterDefaultSetting("Durability", true) 19 | nCore:RegisterDefaultSetting("ErrorFilter", true) 20 | nCore:RegisterDefaultSetting("Fonts", true) 21 | nCore:RegisterDefaultSetting("ObjectiveTracker", true) 22 | nCore:RegisterDefaultSetting("MapCoords", true) 23 | nCore:RegisterDefaultSetting("MoveTalkingHeads", true) 24 | nCore:RegisterDefaultSetting("QuestTracker", true) 25 | nCore:RegisterDefaultSetting("Skins", true) 26 | nCore:RegisterDefaultSetting("SpellID", true) 27 | nCore:RegisterDefaultSetting("VignetteAlert", true) 28 | end 29 | 30 | function nCore:LockInCombat(frame) 31 | frame:SetScript("OnUpdate", function(self) 32 | if not InCombatLockdown() then 33 | self:Enable() 34 | else 35 | self:Disable() 36 | end 37 | end) 38 | end 39 | 40 | function nCore:RegisterControl(control, parentFrame) 41 | if ( ( not parentFrame ) or ( not control ) ) then 42 | return; 43 | end 44 | 45 | parentFrame.controls = parentFrame.controls or {}; 46 | 47 | tinsert(parentFrame.controls, control); 48 | end 49 | 50 | local prevControl 51 | 52 | function nCore:CreateLabel(cfg) 53 | --[[ 54 | { 55 | type = "Label", 56 | name = "LabelName", 57 | parent = Options, 58 | label = L.LabelText, 59 | fontObject = "GameFontNormalLarge", 60 | relativeTo = LeftSide, 61 | relativePoint = "TOPLEFT", 62 | offsetX = 16, 63 | offsetY = -16, 64 | }, 65 | --]] 66 | cfg.initialPoint = cfg.initialPoint or "TOPLEFT" 67 | cfg.relativePoint = cfg.relativePoint or "BOTTOMLEFT" 68 | cfg.offsetX = cfg.offsetX or 0 69 | cfg.offsetY = cfg.offsetY or -16 70 | cfg.relativeTo = cfg.relativeTo or prevControl 71 | cfg.fontObject = cfg.fontObject or "GameFontNormalLarge" 72 | 73 | local label = cfg.parent:CreateFontString(cfg.name, "ARTWORK", cfg.fontObject) 74 | label:SetPoint(cfg.initialPoint, cfg.relativeTo, cfg.relativePoint, cfg.offsetX, cfg.offsetY) 75 | label:SetText(cfg.label) 76 | 77 | prevControl = label 78 | return label 79 | end 80 | 81 | function nCore:CreateCheckBox(cfg) 82 | --[[ 83 | { 84 | type = "CheckBox", 85 | name = "Test", 86 | parent = parent, 87 | label = L.TestLabel, 88 | tooltip = L.TestTooltip, 89 | isCvar = nil or True, 90 | var = "TestVar", 91 | needsRestart = nil or True, 92 | disableInCombat = nil or True, 93 | func = function(self) 94 | -- Do stuff here. 95 | end, 96 | initialPoint = "TOPLEFT", 97 | relativeTo = frame, 98 | relativePoint, "BOTTOMLEFT", 99 | offsetX = 0, 100 | offsetY = -6, 101 | }, 102 | --]] 103 | cfg.initialPoint = cfg.initialPoint or "TOPLEFT" 104 | cfg.relativePoint = cfg.relativePoint or "BOTTOMLEFT" 105 | cfg.offsetX = cfg.offsetX or 0 106 | cfg.offsetY = cfg.offsetY or -6 107 | cfg.relativeTo = cfg.relativeTo or prevControl 108 | 109 | local checkBox = CreateFrame("CheckButton", cfg.name, cfg.parent, "InterfaceOptionsCheckButtonTemplate") 110 | checkBox:SetPoint(cfg.initialPoint, cfg.relativeTo, cfg.relativePoint, cfg.offsetX, cfg.offsetY) 111 | checkBox.Text:SetText(cfg.label) 112 | checkBox.GetValue = function(self) return checkBox:GetChecked() end 113 | checkBox.SetValue = function(self) checkBox:SetChecked(nCoreDB[cfg.var]) end 114 | checkBox.var = cfg.var 115 | checkBox.isCvar = cfg.isCvar 116 | 117 | if cfg.needsRestart then 118 | checkBox.restart = false 119 | end 120 | 121 | if cfg.tooltip then 122 | if cfg.needsRestart then 123 | cfg.tooltip = cfg.tooltip.." "..RED_FONT_COLOR:WrapTextInColorCode(REQUIRES_RELOAD) 124 | end 125 | checkBox.tooltipText = cfg.tooltip 126 | end 127 | 128 | if cfg.disableInCombat then 129 | nCore:LockInCombat(checkBox) 130 | end 131 | 132 | checkBox:SetScript("OnClick", function(self) 133 | local checked = self:GetChecked() 134 | PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON) 135 | checkBox.value = checked 136 | if cfg.needsRestart then 137 | checkBox.restart = not checkBox.restart 138 | end 139 | if cfg.func then 140 | cfg.func(self) 141 | end 142 | end) 143 | 144 | nCore:RegisterControl(checkBox, cfg.parent) 145 | prevControl = checkBox 146 | return checkBox 147 | end 148 | -------------------------------------------------------------------------------- /Interface/AddOns/nCore/localization.lua: -------------------------------------------------------------------------------- 1 | local _, nCore = ... 2 | 3 | local L = {} 4 | nCore.L = L 5 | 6 | setmetatable(L, { __index = function(t, k) 7 | local v = tostring(k) 8 | t[k] = v 9 | return v 10 | end }) 11 | 12 | ------------------------------------------------------------------------ 13 | -- English 14 | ------------------------------------------------------------------------ 15 | 16 | L.OptionsLabel = "Options" 17 | L.AltBuy = "Alt Buy" 18 | L.AltBuyTooltip = "Hold the alt key to buy a stack of an item." 19 | L.AltBuyVendorToolip = "" 20 | L.ArchaeologyHelper = "Archaeology Helper" 21 | L.ArchaeologyHelperTooltip = "Double right click to survey at digsites." 22 | L.AutoGreed = "Auto Greed" 23 | L.AutoGreedTooltip = "Automaticly role greed on green items at max level." 24 | L.AutoQuest = "Auto Quest" 25 | L.AutoQuestTooltip = "Hold shift to automaticly accept and turnin quests." 26 | L.CombatWarning = "nCore: This is not possible in combat!" 27 | L.Dressroom = "Dressroom Tweaks" 28 | L.DressroomTooltip = "Adds clothed and naked buttons to the dressroom frame." 29 | L.Durability = DURABILITY 30 | L.DurabilityTooltip = "Adds durability information to the character frame." 31 | L.ErrorFilter = "Error Filter" 32 | L.ErrorFilterTooltip = "Filter common error spam." 33 | L.Fonts = "Font Fix" 34 | L.FontsTooltip = "Modifies some default font objects." 35 | L.ObjectiveTracker = "Moveable Objective Tracker" 36 | L.ObjectiveTrackerTooltip = "Makes the objective tracker movable." 37 | L.ObjectiveTrackerButtonTooltip = "Shift + left-click to Drag" 38 | L.MapCoords = "Map Coords" 39 | L.MapCoordsTooltip = "Adds player and cursor location to the world map." 40 | L.MoveTalkingHeads = "Moveable Talking Heads" 41 | L.MoveTalkingHeadsTooltip = "Makes the talking heads frame movable. /alertframemover to unlock the frame." 42 | L.QuestTracker = "Quest Tracker" 43 | L.QuestTrackerTooltip = "Add current number of quests to the worldmap title text." 44 | L.Skins = "Skin Addons" 45 | L.SkinsTooltip = "Skin Omen, DBM, TinyDPS, Recount, Skada, and Numeration to closer match the Neav UI look." 46 | L.SpellID = "Spell IDs" 47 | L.SpellIDTooltip = "Add spell ids to the tooltip." 48 | L.VignetteAlert = "Vignette Alerts" 49 | L.VignetteAlertTooltip = "Alerts you when you detect a rare or chest." 50 | 51 | local CURRENT_LOCALE = GetLocale() 52 | if CURRENT_LOCALE == "enUS" then return end 53 | 54 | ------------------------------------------------------------------------ 55 | -- German 56 | ------------------------------------------------------------------------ 57 | 58 | if CURRENT_LOCALE == "deDE" then 59 | 60 | L.OptionsLabel = "Einstellungen" 61 | L.AltBuy = "Alt-Kaufen" 62 | L.AltBuyTooltip = "Die Alt-Taste gedrückt halten um einen Stapel von einem Gegenstand zu kaufen." 63 | L.AltBuyVendorToolip = "" 64 | L.ArchaeologyHelper = "Archäologie-Gehilfe" 65 | L.ArchaeologyHelperTooltip = "Doppelt rechtsklicken um Grabungsstätten zu untersuchen." 66 | L.AutoGreed = "Autom. Gier" 67 | L.AutoGreedTooltip = "Automatisch Gier bei grünen Gegenständen würfeln, wenn auf Höchststufe." 68 | L.AutoQuest = "Autom. Quests" 69 | L.AutoQuestTooltip = "Die Umschalttaste gedrückt halten um Quests automatisch anzunehmen und abzuschliessen." 70 | L.CombatWarning = "nCore: Das ist im Kampf nicht möglich!" 71 | L.Dressroom = "Anpassungen für die Anprobe" 72 | L.DressroomTooltip = "Fügt dem Anprobefester Buttons zum An- und Ausziehen hinzu." 73 | L.Durability = DURABILITY 74 | L.DurabilityTooltip = "Zeigt Haltbarkeitinformationen im Charakterfenster an." 75 | L.ErrorFilter = "Fehlerfilter" 76 | L.ErrorFilterTooltip = "Filtert oft vorkommende Fehlermeldungen aus." 77 | L.Fonts = "Schriftenreparatur" 78 | L.FontsTooltip = "Modifiziert manche der Standardschriften." 79 | L.ObjectiveTracker = "Verstellbares Fortschrittsfenster" 80 | L.ObjectiveTrackerTooltip = "Macht das Fortschrittsfenster verstellbar." 81 | L.ObjectiveTrackerButtonTooltip = "Umschalttaste + Linksklick zum Ziehen" 82 | L.MapCoords = "Kartenkoordinaten" 83 | L.MapCoordsTooltip = "Zeigt die Player- und die Kursorposition auf der Weltkarte an." 84 | L.MoveTalkingHeads = "Verstellbarer Talking Heads" 85 | L.MoveTalkingHeadsTooltip = "Macht das talking heads Fenster verstellbar. /alertframemover um das Fenster freizuschalten." 86 | L.QuestTracker = "Quest Tracker" 87 | L.QuestTrackerTooltip = "Zeigt die Anzahl angenommener Quests in der Titelleiste der Weltkarte an." 88 | L.Skins = "Addonsdarstellung" 89 | L.SkinsTooltip = "Das Aussehen von Omen, DBM, TinyDPS, Recount, Skada und Numeration anpassen, damit sie dem Aussehen von Neav UI ähneln." 90 | L.SpellID = "Zauber IDs" 91 | L.SpellIDTooltip = "Zauber IDs in Tooltips anzeigen." 92 | L.VignetteAlert = "Alarmierungen für Vignetten" 93 | L.VignetteAlertTooltip = "Löst ein Alarm aus, wenn seltene Kreaturen oder Truhen in der Nähe sind." 94 | 95 | return end 96 | 97 | ------------------------------------------------------------------------ 98 | -- Spanish 99 | ------------------------------------------------------------------------ 100 | 101 | if CURRENT_LOCALE == "esES" then 102 | 103 | L.AltBuyVendorToolip = "" 104 | 105 | return end 106 | 107 | ------------------------------------------------------------------------ 108 | -- Latin American Spanish 109 | ------------------------------------------------------------------------ 110 | 111 | if CURRENT_LOCALE == "esMX" then 112 | 113 | return end 114 | 115 | ------------------------------------------------------------------------ 116 | -- French 117 | ------------------------------------------------------------------------ 118 | 119 | if CURRENT_LOCALE == "frFR" then 120 | 121 | L.AltBuyVendorToolip = "" 122 | 123 | return end 124 | 125 | ------------------------------------------------------------------------ 126 | -- Italian 127 | ------------------------------------------------------------------------ 128 | 129 | if CURRENT_LOCALE == "itIT" then 130 | 131 | return end 132 | 133 | ------------------------------------------------------------------------ 134 | -- Brazilian Portuguese 135 | ------------------------------------------------------------------------ 136 | 137 | if CURRENT_LOCALE == "ptBR" then 138 | 139 | return end 140 | 141 | ------------------------------------------------------------------------ 142 | -- Russian 143 | ------------------------------------------------------------------------ 144 | 145 | if CURRENT_LOCALE == "ruRU" then 146 | 147 | return end 148 | 149 | ------------------------------------------------------------------------ 150 | -- Korean 151 | ------------------------------------------------------------------------ 152 | 153 | if CURRENT_LOCALE == "koKR" then 154 | 155 | return end 156 | 157 | ------------------------------------------------------------------------ 158 | -- Simplified Chinese 159 | ------------------------------------------------------------------------ 160 | 161 | if CURRENT_LOCALE == "zhCN" then 162 | 163 | return end 164 | 165 | ------------------------------------------------------------------------ 166 | -- Traditional Chinese 167 | ------------------------------------------------------------------------ 168 | 169 | if CURRENT_LOCALE == "zhTW" then 170 | 171 | return end 172 | -------------------------------------------------------------------------------- /Interface/AddOns/nCore/media/textureHighlight.blp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithammer/NeavUI/bc6b61557ee7d0ffeadf0e8c75bc623f4cc6f91f/Interface/AddOns/nCore/media/textureHighlight.blp -------------------------------------------------------------------------------- /Interface/AddOns/nCore/media/textureNormal.blp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithammer/NeavUI/bc6b61557ee7d0ffeadf0e8c75bc623f4cc6f91f/Interface/AddOns/nCore/media/textureNormal.blp -------------------------------------------------------------------------------- /Interface/AddOns/nCore/media/texturePushed.blp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithammer/NeavUI/bc6b61557ee7d0ffeadf0e8c75bc623f4cc6f91f/Interface/AddOns/nCore/media/texturePushed.blp -------------------------------------------------------------------------------- /Interface/AddOns/nCore/modules/altbuy.lua: -------------------------------------------------------------------------------- 1 | local _, nCore = ... 2 | 3 | function nCore:AltBuy() 4 | local L = nCore.L 5 | local select = select 6 | 7 | local NEW_ITEM_VENDOR_STACK_BUY = ITEM_VENDOR_STACK_BUY 8 | ITEM_VENDOR_STACK_BUY = "|cffa9ff00"..NEW_ITEM_VENDOR_STACK_BUY.."|r" -- luacheck: ignore 9 | 10 | -- Alt-click to buy a stack. 11 | 12 | hooksecurefunc("MerchantItemButton_OnModifiedClick", function(self, ...) 13 | if not nCoreDB.AltBuy then return end 14 | if IsAltKeyDown() then 15 | local numAvailable = select(5, GetMerchantItemInfo(self:GetID())) 16 | 17 | -- -1 means an item has unlimited supply. 18 | if numAvailable ~= -1 then 19 | BuyMerchantItem(self:GetID(), numAvailable) 20 | else 21 | BuyMerchantItem(self:GetID(), GetMerchantItemMaxStack(self:GetID())) 22 | end 23 | end 24 | end) 25 | 26 | -- Add a hint to the tooltip. 27 | 28 | local function IsMerchantButtonOver() 29 | return GetMouseFocus():GetName() and GetMouseFocus():GetName():find("MerchantItem%d") 30 | end 31 | 32 | GameTooltip:HookScript("OnTooltipSetItem", function(self) 33 | if not nCoreDB.AltBuy then return end 34 | if MerchantFrame:IsShown() and IsMerchantButtonOver() then 35 | for i = 2, GameTooltip:NumLines() do 36 | local line = _G["GameTooltipTextLeft"..i]:GetText() or "" 37 | if line:find("<[sS]hift") then 38 | GameTooltip:AddLine("|cff00ffcc"..L.AltBuyVendorToolip.."|r") 39 | end 40 | end 41 | end 42 | end) 43 | end 44 | -------------------------------------------------------------------------------- /Interface/AddOns/nCore/modules/archaeology.lua: -------------------------------------------------------------------------------- 1 | local _, nCore = ... 2 | 3 | function nCore:ArchaeologyHelper() 4 | local SURVEY_SPELL_ID = 80451 5 | local FISHING_POLE = GetItemSubClassInfo(2, 20) 6 | 7 | local override_binding_on = nil 8 | local previousClickTime = nil 9 | local regen_clear_override = nil 10 | 11 | 12 | local surveyButtonName = "nArch_EasySurveyButton" 13 | local surveyButton = CreateFrame("Button", surveyButtonName, UIParent, "SecureActionButtonTemplate") 14 | surveyButton:SetPoint("LEFT", UIParent, "RIGHT", 10000, 0) 15 | surveyButton:Hide() 16 | surveyButton:SetFrameStrata("LOW") 17 | surveyButton:EnableMouse(true) 18 | surveyButton:RegisterForClicks("RightButtonDown") 19 | surveyButton:SetAttribute("type", "spell") 20 | surveyButton:SetAttribute("spell", SURVEY_SPELL_ID) 21 | surveyButton:SetAttribute("action", nil) 22 | 23 | surveyButton:SetScript("PostClick", function(self, button, down) 24 | if override_binding_on and not nCore:IsTaintable() then 25 | ClearOverrideBindings(self) 26 | override_binding_on = nil 27 | else 28 | regen_clear_override = true 29 | end 30 | end) 31 | 32 | local watcher = CreateFrame("Frame", nil) 33 | watcher:RegisterEvent("PLAYER_REGEN_ENABLED") 34 | 35 | watcher:SetScript("OnEvent", function(self, event, ...) 36 | if event == "PLAYER_REGEN_ENABLED" then 37 | if regen_clear_override then 38 | ClearOverrideBindings(surveyButtonName) 39 | override_binding_on = nil 40 | regen_clear_override = nil 41 | end 42 | end 43 | end) 44 | 45 | WorldFrame:HookScript("OnMouseDown", function(frame, button, down) 46 | if button ~= "RightButton" or nCore:IsTaintable() or not nCoreDB.ArchaeologyHelper then return end 47 | 48 | local mapID = C_Map.GetBestMapForUnit("player") 49 | 50 | if not mapID then return end 51 | 52 | if ArchaeologyMapUpdateAll(mapID) > 0 and CanScanResearchSite() and GetSpellCooldown(SURVEY_SPELL_ID) == 0 and not IsEquippedItemType(FISHING_POLE) then 53 | if GetNumLootItems() == 0 and previousClickTime then 54 | local doubleClickTime = GetTime() - previousClickTime 55 | 56 | if doubleClickTime < 0.2 and doubleClickTime > 0.04 then 57 | previousClickTime = nil 58 | 59 | SetOverrideBindingClick(surveyButton, true, "BUTTON2", surveyButtonName) 60 | override_binding_on = true 61 | end 62 | end 63 | 64 | previousClickTime = GetTime() 65 | end 66 | end) 67 | end 68 | -------------------------------------------------------------------------------- /Interface/AddOns/nCore/modules/autogreed.lua: -------------------------------------------------------------------------------- 1 | local _, nCore = ... 2 | 3 | function nCore:AutoGreed() 4 | -- Option to only auto-greed at max level. 5 | local maxLevelOnly = true 6 | 7 | -- Disenchant items when able. 8 | local disenchantItems = false 9 | 10 | -- A skip list for green stuff you might not wanna auto-greed on 11 | local skipList = { 12 | --["Stone Scarab"] = true, 13 | --["Silver Scarab"] = true, 14 | } 15 | 16 | local f = CreateFrame("Frame") 17 | f:RegisterEvent("START_LOOT_ROLL") 18 | 19 | f:SetScript("OnEvent", function(_, _, rollID) 20 | if not nCoreDB.AutoGreed then return end 21 | if maxLevelOnly and IsPlayerAtEffectiveMaxLevel() then 22 | local _, name, _, quality, BoP, _, _, canDisenchant = GetLootRollItemInfo(rollID) 23 | if quality == 2 and not BoP and not skipList[name] then 24 | RollOnLoot(rollID, (disenchantItems and canDisenchant and 3) or 2) 25 | end 26 | end 27 | end) 28 | end 29 | -------------------------------------------------------------------------------- /Interface/AddOns/nCore/modules/coords.lua: -------------------------------------------------------------------------------- 1 | local _, nCore = ... 2 | 3 | function nCore:MapCoords() 4 | local unpack = unpack 5 | 6 | local cfg = { 7 | location = {"BOTTOMLEFT", WorldMapFrame, "BOTTOMLEFT", 10, 0}, 8 | } 9 | 10 | local mapRects = {} 11 | local tempVec2D = CreateVector2D(0, 0) 12 | local function GetPlayerMapPos(mapID) 13 | tempVec2D.x, tempVec2D.y = UnitPosition("player") 14 | if not tempVec2D.x then return end 15 | 16 | local mapRect = mapRects[mapID] 17 | if not mapRect then 18 | local pos1 = select(2, C_Map.GetWorldPosFromMapPos(mapID, CreateVector2D(0, 0))) 19 | local pos2 = select(2, C_Map.GetWorldPosFromMapPos(mapID, CreateVector2D(1, 1))) 20 | if not pos1 or not pos2 then return end 21 | mapRect = {pos1, pos2} 22 | mapRect[2]:Subtract(mapRect[1]) 23 | 24 | mapRects[mapID] = mapRect 25 | end 26 | tempVec2D:Subtract(mapRect[1]) 27 | 28 | return tempVec2D.y/mapRect[2].y, tempVec2D.x/mapRect[2].x 29 | end 30 | 31 | local nCore_CoordsFrame = CreateFrame("Frame", "nCore_Coords", WorldMapFrame, "nCore_Coords") 32 | 33 | nCore_CoordsFrame:SetScript("OnLoad", function(self) 34 | self:RegisterEvent("PLAYER_ENTERING_WORLD") 35 | self:SetPoint(unpack(cfg.location)) 36 | end) 37 | 38 | nCore_CoordsFrame:SetScript("OnUpdate", function(self, elapsed) 39 | if IsInInstance() or not nCoreDB.MapCoords then 40 | self.Mouse.Text:SetText("") 41 | self.Player.Text:SetText("") 42 | return 43 | end 44 | 45 | local mapID = C_Map.GetBestMapForUnit("player") 46 | local px, py = GetPlayerMapPos(mapID) 47 | 48 | if px then 49 | if px ~= 0 and py ~= 0 then 50 | self.Player.Text:SetFormattedText("%s: %.1f x %.1f", PLAYER, px * 100, py * 100) 51 | else 52 | self.Player.Text:SetText("") 53 | end 54 | end 55 | 56 | if WorldMapFrame.ScrollContainer:IsMouseOver() then 57 | local cx, cy = WorldMapFrame.ScrollContainer:GetNormalizedCursorPosition() 58 | 59 | if cx then 60 | if cx >= 0 and cy >= 0 and cx <= 1 and cy <= 1 then 61 | self.Mouse.Text:SetFormattedText("%s: %.1f x %.1f", MOUSE_LABEL, cx * 100, cy * 100) 62 | else 63 | self.Mouse.Text:SetText("") 64 | end 65 | end 66 | else 67 | self.Mouse.Text:SetText("") 68 | end 69 | end) 70 | end -------------------------------------------------------------------------------- /Interface/AddOns/nCore/modules/coords.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 |