Init
This commit is contained in:
commit
3725388b2c
60
Core/Commands.lua
Normal file
60
Core/Commands.lua
Normal file
@ -0,0 +1,60 @@
|
||||
local addon, ns = ...
|
||||
local L = ns.L
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- # CORE > COMMANDS
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
-- reload user interface
|
||||
SlashCmdList['RELOADUI'] = function()
|
||||
ReloadUI()
|
||||
end
|
||||
SLASH_RELOADUI1 = '/rl'
|
||||
|
||||
-- print client patch version
|
||||
SlashCmdList['PATCHNUMBER'] = function()
|
||||
print('Klaz|cff1994ffScripts|r — |cnNORMAL_FONT_COLOR:'..L.COMMAND_PATCH_NUMBER..':|r |cnGREEN_FONT_COLOR:'..select(4, GetBuildInfo())..'|r')
|
||||
end
|
||||
SLASH_PATCHNUMBER1 = '/patch'
|
||||
|
||||
-- clear text in all chat frames
|
||||
SlashCmdList['CLEARCHAT'] = function()
|
||||
for i = 1, NUM_CHAT_WINDOWS do
|
||||
_G[format('ChatFrame%d', i)]:Clear()
|
||||
end
|
||||
print('Klaz|cff1994ffScripts|r — |cnNORMAL_FONT_COLOR:'..L.COMMAND_CLEAR_CHAT..'.|r')
|
||||
end
|
||||
SLASH_CLEARCHAT1 = '/clearchat'
|
||||
SLASH_CLEARCHAT2 = '/cc'
|
||||
|
||||
-- teleport in/out of instance
|
||||
SlashCmdList['TELEPORT'] = function()
|
||||
if IsInInstance() then
|
||||
LFGTeleport(true)
|
||||
else
|
||||
LFGTeleport()
|
||||
end
|
||||
end
|
||||
SLASH_TELEPORT1 = '/teleport'
|
||||
SLASH_TELEPORT2 = '/tp'
|
||||
|
||||
-- leave party/raid group
|
||||
SlashCmdList['LEAVEGROUP'] = function()
|
||||
C_PartyInfo.LeaveParty()
|
||||
end
|
||||
SLASH_LEAVEGROUP1 = '/leaveparty'
|
||||
SLASH_LEAVEGROUP2 = '/lp'
|
||||
|
||||
-- reset instances
|
||||
SlashCmdList['RESETINSTANCES'] = function()
|
||||
ResetInstances()
|
||||
end
|
||||
SLASH_RESETINSTANCES1 = '/resetinstances'
|
||||
SLASH_RESETINSTANCES2 = '/ri'
|
||||
|
||||
-- open great vault
|
||||
SlashCmdList['GREATVAULT'] = function()
|
||||
LoadAddOn('Blizzard_WeeklyRewards')
|
||||
WeeklyRewardsFrame:Show()
|
||||
end
|
||||
SLASH_GREATVAULT1 = '/gv'
|
39
Core/Config.lua
Normal file
39
Core/Config.lua
Normal file
@ -0,0 +1,39 @@
|
||||
local addon, ns = ...
|
||||
local L = ns.L
|
||||
local T = ns.T
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- # CORE > CONFIG
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
-- ## RESET
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
StaticPopupDialogs.KLAZSCRIPTS_RESET = {
|
||||
text = L.CONFIG_POPUP_RESET,
|
||||
button1 = ACCEPT,
|
||||
button2 = CANCEL,
|
||||
OnAccept = function()
|
||||
|
||||
end,
|
||||
OnCancel = function() end,
|
||||
showAlert = true,
|
||||
timeout = 0,
|
||||
whileDead = 1,
|
||||
hideOnEscape = true,
|
||||
preferredIndex = 5,
|
||||
}
|
||||
-- ## SLASH COMMAND
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
SlashCmdList['KLAZSCRIPTS'] = function(msg)
|
||||
if string.lower(msg) == 'reset' then
|
||||
StaticPopup_Show('KLAZSCRIPTS_RESET')
|
||||
else
|
||||
print('------------------------------------------')
|
||||
print('Klaz|cff1994ffScripts|r')
|
||||
print('------------------------------------------')
|
||||
end
|
||||
end
|
||||
SLASH_KLAZSCRIPTS1 = '/klazscripts'
|
||||
SLASH_KLAZSCRIPTS2 = '/kscripts'
|
25
Core/Functions.lua
Normal file
25
Core/Functions.lua
Normal file
@ -0,0 +1,25 @@
|
||||
local addon, ns = ...
|
||||
local T = {}
|
||||
ns.T = T
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- # CORE > FUNCTIONS
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
T.ClassColor = RAID_CLASS_COLORS[select(2, UnitClass('player'))]
|
||||
|
||||
-- ## CHECK CHAT CHANNEL
|
||||
--------------------------------------------------------------------------------
|
||||
-- check which chat channel is appropriate to use
|
||||
|
||||
T.ChatChannel = function(warning)
|
||||
if (not IsInGroup(LE_PARTY_CATEGORY_HOME) or not IsInRaid(LE_PARTY_CATEGORY_HOME)) and IsInGroup(LE_PARTY_CATEGORY_INSTANCE) then
|
||||
return 'INSTANCE_CHAT'
|
||||
elseif IsInRaid(LE_PARTY_CATEGORY_HOME) then
|
||||
return 'RAID'
|
||||
elseif IsInGroup(LE_PARTY_CATEGORY_HOME) then
|
||||
return 'PARTY'
|
||||
else
|
||||
return 'SAY'
|
||||
end
|
||||
end
|
41
Core/Localization.lua
Normal file
41
Core/Localization.lua
Normal file
@ -0,0 +1,41 @@
|
||||
local addon, ns = ...
|
||||
local L = {}
|
||||
ns.L = L
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- # CORE > LOCALIZATION
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
-- ## ENGLISH
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
L['COMMAND_PATCH_NUMBER'] = 'Patch'
|
||||
L['COMMAND_CLEAR_CHAT'] = 'Cleared text in all chat frames'
|
||||
|
||||
L['CONFIG_POPUP_RESET'] = 'Klaz|cff1994ffScripts|r\n|cnNORMAL_FONT_COLOR:Apply personalized settings?|r\n|cnRED_FONT_COLOR:Warning! Changes will occur to your UI!'
|
||||
|
||||
L['AUTO_REPAIR'] = 'Repair cost'
|
||||
L['AUTO_REPAIR_GUILD'] = 'Repaired using guild funds'
|
||||
L['AUTO_REPAIR_BROKE'] = 'You do not have enough gold to auto repair'
|
||||
L['AUTO_SELL_JUNK'] = 'Sold junk items'
|
||||
|
||||
L['MAP_CURSOR'] = 'Cursor'
|
||||
L['MAP_PLAYER'] = 'Player'
|
||||
L['MAP_BOUNDS'] = 'Out of bounds'
|
||||
|
||||
local locale = GetLocale()
|
||||
if locale == 'en_GB' or locale == 'enUS' then return end -- ENGLISH
|
||||
|
||||
-- ## OTHER
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
-- if locale == 'esMX' then return end -- SPANISH (MEXICO)
|
||||
-- if locale == 'pt_BR' then return end -- PORTUGEUSE
|
||||
-- if locale == 'de_DE' then return end -- GERMAN
|
||||
-- if locale == 'es_ES' then return end -- SPANISH (SPAIN)
|
||||
-- if locale == 'fr_FR' then return end -- FRENCH
|
||||
-- if locale == 'it_IT' then return end -- ITALIAN
|
||||
-- if locale == 'ru_RU' then return end -- RUSSIAN
|
||||
-- if locale == 'ko_KR' then return end -- KOREAN
|
||||
-- if locale == 'zh_TW' then return end -- CHINESE (TRADITIONAL)
|
||||
-- if locale == 'zh_CN' then return end -- CHINESE (SIMPLIFIED)
|
20
KlazScripts.toc
Normal file
20
KlazScripts.toc
Normal file
@ -0,0 +1,20 @@
|
||||
## Interface: 100205
|
||||
## Title: Klaz|cff1994ffScripts|r
|
||||
## Author: Klaz
|
||||
## Notes: Adds quality of life automation and adjustments to the default user interface.
|
||||
## IconTexture: Interface\AddOns\KlazScripts\Media\KlazAddOnIcon.blp
|
||||
|
||||
Core\Localization.lua
|
||||
Core\Functions.lua
|
||||
Core\Commands.lua
|
||||
Core\Config.lua
|
||||
|
||||
Modules\Announcements\Interrupts.lua
|
||||
Modules\Announcements\Sound.lua
|
||||
Modules\Automation\EasyDelete.lua
|
||||
Modules\Automation\MailMoney.lua
|
||||
Modules\Automation\NoEscape.lua
|
||||
Modules\Automation\Repair.lua
|
||||
Modules\Automation\ReputationTracker.lua
|
||||
Modules\Automation\SellJunk.lua
|
||||
Modules\Maps\WorldMap.lua
|
BIN
Media/KlazAddOnIcon.blp
Normal file
BIN
Media/KlazAddOnIcon.blp
Normal file
Binary file not shown.
BIN
Media/Screenshot_Map.png
Normal file
BIN
Media/Screenshot_Map.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 391 KiB |
35
Modules/Announcements/Interrupts.lua
Normal file
35
Modules/Announcements/Interrupts.lua
Normal file
@ -0,0 +1,35 @@
|
||||
local addon, ns = ...
|
||||
local T = ns.T
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- # MODULES > ANNOUNCEMENTS > INTERRUPTS
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
local announceSelf = true
|
||||
local announceParty = false
|
||||
local announceRaid = false
|
||||
|
||||
local f = CreateFrame('Frame')
|
||||
f:RegisterEvent('COMBAT_LOG_EVENT_UNFILTERED')
|
||||
f:SetScript('OnEvent', function()
|
||||
local _, event, _, sourceGUID, _, _, _, _, destName, _, _, _, _, _, spellID = CombatLogGetCurrentEventInfo()
|
||||
if not (event == 'SPELL_INTERRUPT' and sourceGUID == UnitGUID('player')) then return end
|
||||
|
||||
-- check instant difficulty
|
||||
local _, _, difficultyID = GetInstanceInfo()
|
||||
-- do not announce interrupts in open world content
|
||||
if difficultyID == 0 then return end
|
||||
|
||||
-- check instance type
|
||||
local _, instanceType = IsInInstance()
|
||||
-- do not announce interrupts in pvp content
|
||||
if instanceType == 'pvp' or instanceType == 'arena' then return end
|
||||
|
||||
if instanceType == 'raid' and announceRaid == true then
|
||||
SendChatMessage(INTERRUPTED..' '..destName..': '..GetSpellLink(spellID), T.ChatChannel())
|
||||
elseif (instanceType == 'party' or 'scenario') and announceParty == true then
|
||||
SendChatMessage(INTERRUPTED..' '..destName..': '..GetSpellLink(spellID), T.ChatChannel())
|
||||
elseif announceSelf == true then
|
||||
print('|cff1994ff'..INTERRUPTED..' '..destName..':|r '..GetSpellLink(spellID))
|
||||
end
|
||||
end)
|
58
Modules/Announcements/Sound.lua
Normal file
58
Modules/Announcements/Sound.lua
Normal file
@ -0,0 +1,58 @@
|
||||
--------------------------------------------------------------------------------
|
||||
-- # MODULES > ANNOUNCEMENTS > SOUND
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
-- push ready check sound through to master channel
|
||||
hooksecurefunc('ShowReadyCheck', function(self, initiator)
|
||||
if initiator ~= 'player' then
|
||||
PlaySound(SOUNDKIT.READY_CHECK, 'Master')
|
||||
end
|
||||
end)
|
||||
|
||||
-- push other warning sounds through to master channel
|
||||
local warn = CreateFrame('Frame')
|
||||
warn:RegisterEvent('UPDATE_BATTLEFIELD_STATUS')
|
||||
warn:RegisterEvent('PET_BATTLE_QUEUE_PROPOSE_MATCH')
|
||||
warn:RegisterEvent('LFG_PROPOSAL_SHOW')
|
||||
warn:RegisterEvent('RESURRECT_REQUEST')
|
||||
warn:SetScript('OnEvent', function(self, event)
|
||||
if event == 'UPDATE_BATTLEFIELD_STATUS' then
|
||||
for i = 1, GetMaxBattlefieldID() do
|
||||
local status = GetBattlefieldStatus(i)
|
||||
if status == 'confirm' then
|
||||
PlaySound(SOUNDKIT.PVP_THROUGH_QUEUE, 'Master')
|
||||
break
|
||||
end
|
||||
i = i + 1
|
||||
end
|
||||
elseif event == 'PET_BATTLE_QUEUE_PROPOSE_MATCH' then
|
||||
PlaySound(SOUNDKIT.PVP_THROUGH_QUEUE, 'Master')
|
||||
elseif event == 'LFG_PROPOSAL_SHOW' then
|
||||
PlaySound(SOUNDKIT.READY_CHECK, 'Master')
|
||||
elseif event == 'RESURRECT_REQUEST' then
|
||||
PlaySound(37, 'Master')
|
||||
end
|
||||
end)
|
||||
|
||||
-- mute crying emote sound
|
||||
-- why did blizzard curse us with this trinket - Elegy of the Eternals (Shadowlands)
|
||||
MuteSoundFile(540533) -- female human
|
||||
MuteSoundFile(539792) -- female dwarf
|
||||
MuteSoundFile(540273) -- female gnome
|
||||
MuteSoundFile(540873) -- female night elf
|
||||
MuteSoundFile(539674) -- female draenei
|
||||
MuteSoundFile(540736) -- male human
|
||||
MuteSoundFile(539875) -- male dwarf
|
||||
MuteSoundFile(540264) -- male gnome
|
||||
MuteSoundFile(540957) -- male night elf
|
||||
MuteSoundFile(539609) -- male draenei
|
||||
MuteSoundFile(541149) -- female orc
|
||||
MuteSoundFile(542815) -- female tauren
|
||||
MuteSoundFile(543084) -- female troll
|
||||
MuteSoundFile(542519) -- female undead
|
||||
MuteSoundFile(539295) -- female blood elf
|
||||
MuteSoundFile(541240) -- male orc
|
||||
MuteSoundFile(542887) -- male tauren
|
||||
MuteSoundFile(543090) -- male troll
|
||||
MuteSoundFile(542601) -- male undead
|
||||
MuteSoundFile(539355) -- male blood elf
|
14
Modules/Automation/EasyDelete.lua
Normal file
14
Modules/Automation/EasyDelete.lua
Normal file
@ -0,0 +1,14 @@
|
||||
--------------------------------------------------------------------------------
|
||||
-- # MODULES > AUTOMATION > EASY DELETE
|
||||
--------------------------------------------------------------------------------
|
||||
-- never type "DELETE" ever again
|
||||
|
||||
local deleteDialog = StaticPopupDialogs['DELETE_GOOD_ITEM']
|
||||
|
||||
if deleteDialog.OnShow then
|
||||
hooksecurefunc(deleteDialog, 'OnShow', function(s)
|
||||
s.editBox:SetText(DELETE_ITEM_CONFIRM_STRING)
|
||||
s.editBox:SetAutoFocus(false)
|
||||
s.editBox:ClearFocus()
|
||||
end)
|
||||
end
|
14
Modules/Automation/MailMoney.lua
Normal file
14
Modules/Automation/MailMoney.lua
Normal file
@ -0,0 +1,14 @@
|
||||
--------------------------------------------------------------------------------
|
||||
-- # MODULES > AUTOMATION > MAIL MONEY
|
||||
--------------------------------------------------------------------------------
|
||||
-- automatically enters subject line when sending money
|
||||
|
||||
local function MailSubject(self)
|
||||
if self:GetText() ~= '' and SendMailSubjectEditBox:GetText() == '' then
|
||||
SendMailSubjectEditBox:SetText(MONEY)
|
||||
end
|
||||
end
|
||||
|
||||
SendMailMoneyGold:HookScript('OnTextChanged', MailSubject)
|
||||
SendMailMoneySilver:HookScript('OnTextChanged', MailSubject)
|
||||
SendMailMoneyCopper:HookScript('OnTextChanged', MailSubject)
|
11
Modules/Automation/NoEscape.lua
Normal file
11
Modules/Automation/NoEscape.lua
Normal file
@ -0,0 +1,11 @@
|
||||
--------------------------------------------------------------------------------
|
||||
-- # MODULES > AUTOMATION > NO ESCAPE
|
||||
--------------------------------------------------------------------------------
|
||||
-- prevent <Esc> from closing these pop-ups
|
||||
|
||||
StaticPopupDialogs.RESURRECT.hideOnEscape = nil
|
||||
StaticPopupDialogs.AREA_SPIRIT_HEAL.hideOnEscape = nil
|
||||
StaticPopupDialogs.PARTY_INVITE.hideOnEscape = nil
|
||||
StaticPopupDialogs.CONFIRM_SUMMON.hideOnEscape = nil
|
||||
StaticPopupDialogs.ADDON_ACTION_FORBIDDEN.button1 = nil
|
||||
StaticPopupDialogs.TOO_MANY_LUA_ERRORS.button1 = nil
|
33
Modules/Automation/Repair.lua
Normal file
33
Modules/Automation/Repair.lua
Normal file
@ -0,0 +1,33 @@
|
||||
local addon, ns = ...
|
||||
local L = ns.L
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- # MODULES > AUTOMATION > REPAIR
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
local autoRepair = true
|
||||
local autoRepairGuild = true
|
||||
|
||||
local f = CreateFrame('Frame')
|
||||
f:RegisterEvent('MERCHANT_SHOW')
|
||||
f:SetScript('OnEvent', function()
|
||||
if CanMerchantRepair() then
|
||||
local cost = GetRepairAllCost()
|
||||
if cost > 0 then
|
||||
-- using guild funds
|
||||
if autoRepairGuild == true and GetGuildBankWithdrawMoney() >= cost then
|
||||
RepairAllItems(1)
|
||||
print('Klaz|cff1994ffScripts|r — |cnYELLOW_FONT_COLOR:'..L.AUTO_REPAIR_GUILD..':|r '..GetCoinTextureString(cost, 10)) -- print using currency icons
|
||||
PlaySound(SOUNDKIT.ITEM_REPAIR)
|
||||
-- using personal funds
|
||||
elseif autoRepair == true and GetMoney() > cost then
|
||||
RepairAllItems()
|
||||
print('Klaz|cff1994ffScripts|r — |cnYELLOW_FONT_COLOR:'..L.AUTO_REPAIR..':|r '..GetCoinTextureString(cost, 10)) -- print using currency icons
|
||||
PlaySound(SOUNDKIT.ITEM_REPAIR)
|
||||
-- no money
|
||||
else
|
||||
print('Klaz|cff1994ffScripts|r — |cnRED_FONT_COLOR:'..L.AUTO_REPAIR_BROKE..'.|r')
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
29
Modules/Automation/ReputationTracker.lua
Normal file
29
Modules/Automation/ReputationTracker.lua
Normal file
@ -0,0 +1,29 @@
|
||||
--------------------------------------------------------------------------------
|
||||
-- # MODULES > REPUTATION TRACKER
|
||||
--------------------------------------------------------------------------------
|
||||
-- switch reputation tracker to most recently earned reputation
|
||||
-- ignores guild reputation
|
||||
|
||||
|
||||
local f = CreateFrame('Frame')
|
||||
f:RegisterEvent('COMBAT_TEXT_UPDATE')
|
||||
f:SetScript('OnEvent', function(_, event, arg1)
|
||||
|
||||
local lastupdate = 0
|
||||
local lastamount = 0
|
||||
|
||||
if (event == 'COMBAT_TEXT_UPDATE' and arg1 == 'FACTION') then
|
||||
local faction, amount = GetCurrentCombatTextEventInfo()
|
||||
if (faction ~= 'Guild') then
|
||||
if (amount > lastamount) or (time() > lastupdate) then
|
||||
for i=1,GetNumFactions() do
|
||||
if faction == GetFactionInfo(i) then
|
||||
SetWatchedFactionIndex(i);
|
||||
end
|
||||
end
|
||||
end
|
||||
lastamount = amount
|
||||
lastupdate = time()
|
||||
end
|
||||
end
|
||||
end)
|
41
Modules/Automation/SellJunk.lua
Normal file
41
Modules/Automation/SellJunk.lua
Normal file
@ -0,0 +1,41 @@
|
||||
local addon, ns = ...
|
||||
local L = ns.L
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- # MODULES > AUTOMATION > SELL JUNK
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
local f = CreateFrame('Frame')
|
||||
f:RegisterEvent('MERCHANT_SHOW')
|
||||
f:SetScript('OnEvent', function()
|
||||
|
||||
-- local bag, slot
|
||||
-- for bag = 0, 4 do
|
||||
-- for slot = 0, C_Container.GetContainerNumSlots(bag) do
|
||||
-- local item = C_Container.GetContainerItemLink(bag, slot)
|
||||
-- if item and (select(3, GetItemInfo(item)) == 0) then
|
||||
-- C_Container.UseContainerItem(bag, slot)
|
||||
-- end
|
||||
-- end
|
||||
-- end
|
||||
|
||||
local totalPrice = 0
|
||||
for bag = 0, 4 do
|
||||
for bagSlots = 1, C_Container.GetContainerNumSlots(bag) do
|
||||
CurrentItemLink = C_Container.GetContainerItemLink(bag, bagSlots)
|
||||
if CurrentItemLink then
|
||||
_, _, itemRarity, _, _, _, _, _, _, _, itemSellPrice = GetItemInfo(CurrentItemLink)
|
||||
itemInfo = C_Container.GetContainerItemInfo(bag, bagSlots)
|
||||
if itemRarity == 0 and itemSellPrice ~= 0 then
|
||||
totalPrice = totalPrice + (itemSellPrice * itemInfo.stackCount)
|
||||
C_Container.UseContainerItem(bag, bagSlots)
|
||||
PickupMerchantItem()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if totalPrice ~= 0 then
|
||||
DEFAULT_CHAT_FRAME:AddMessage('Klaz|cff1994ffScripts|r — |cnYELLOW_FONT_COLOR:'..L.AUTO_SELL_JUNK..':|r '..GetCoinTextureString(totalPrice), 255, 255, 255)
|
||||
end
|
||||
|
||||
end)
|
75
Modules/Maps/WorldMap.lua
Normal file
75
Modules/Maps/WorldMap.lua
Normal file
@ -0,0 +1,75 @@
|
||||
|
||||
local addon, ns = ...
|
||||
local L = ns.L
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- # MODULES > MAPS > WORLD MAP
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
-- # COORDINATES
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
local coords = CreateFrame('Frame', 'CoordsFrame', WorldMapFrame)
|
||||
coords:SetFrameLevel(WorldMapFrame.BorderFrame.TitleContainer:GetFrameLevel() + 2)
|
||||
coords:SetFrameStrata(WorldMapFrame.BorderFrame.TitleContainer:GetFrameStrata())
|
||||
|
||||
coords.PlayerText = coords:CreateFontString(nil, 'ARTWORK', 'GameFontHighlight')
|
||||
coords.PlayerText:SetPoint('TOPLEFT', WorldMapFrame.BorderFrame.TitleContainer, 'TOPLEFT', 50, -5)
|
||||
coords.PlayerText:SetJustifyH('LEFT')
|
||||
coords.PlayerText:SetText(UnitName('player')..': 0, 0')
|
||||
|
||||
coords.MouseText = coords:CreateFontString(nil, 'ARTWORK', 'GameFontHighlight')
|
||||
coords.MouseText:SetJustifyH('LEFT')
|
||||
coords.MouseText:SetPoint('TOPLEFT', coords.PlayerText, 'TOPRIGHT', 10, 0)
|
||||
coords.MouseText:SetText(L.MAP_CURSOR..': 0, 0')
|
||||
|
||||
local mapRects, tempVec2D = {}, CreateVector2D(0, 0)
|
||||
local function GetPlayerMapPos(mapID)
|
||||
tempVec2D.x, tempVec2D.y = UnitPosition('player')
|
||||
if not tempVec2D.x then return end
|
||||
|
||||
local mapRect = mapRects[mapID]
|
||||
if not mapRect then
|
||||
local _, pos1 = C_Map.GetWorldPosFromMapPos(mapID, CreateVector2D(0, 0))
|
||||
local _, pos2 = C_Map.GetWorldPosFromMapPos(mapID, CreateVector2D(1, 1))
|
||||
if not pos1 or not pos2 then return end
|
||||
mapRect = {pos1, pos2}
|
||||
mapRect[2]:Subtract(mapRect[1])
|
||||
mapRects[mapID] = mapRect
|
||||
end
|
||||
tempVec2D:Subtract(mapRect[1])
|
||||
|
||||
return (tempVec2D.y/mapRect[2].y), (tempVec2D.x/mapRect[2].x)
|
||||
end
|
||||
|
||||
local int = 0
|
||||
WorldMapFrame:HookScript('OnUpdate', function()
|
||||
int = int + 1
|
||||
if int >= 3 then
|
||||
local unitMap = C_Map.GetBestMapForUnit('player')
|
||||
local x, y = 0, 0
|
||||
|
||||
if unitMap then
|
||||
x, y = GetPlayerMapPos(unitMap)
|
||||
end
|
||||
|
||||
if x and y and x >= 0 and y >= 0 then
|
||||
coords.PlayerText:SetFormattedText('|cff1994ff%s:|r %.2f, %.2f', UnitName('player'), x * 100, y * 100)
|
||||
else
|
||||
coords.PlayerText:SetText('|cff1994ff'..UnitName('player')..':|r '..'|cffff0000'..L.MAP_BOUNDS..'!|r')
|
||||
end
|
||||
|
||||
if WorldMapFrame.ScrollContainer:IsMouseOver() then
|
||||
local mouseX, mouseY = WorldMapFrame.ScrollContainer:GetNormalizedCursorPosition()
|
||||
if mouseX and mouseY and mouseX >= 0 and mouseY >= 0 then
|
||||
coords.MouseText:SetFormattedText('|cff1994ff%s:|r %.2f, %.2f', L.MAP_CURSOR, mouseX * 100, mouseY * 100)
|
||||
else
|
||||
coords.MouseText:SetText('|cff1994ff'..L.MAP_CURSOR..':|r |cffff0000'..L.MAP_BOUNDS..'!|r')
|
||||
end
|
||||
else
|
||||
coords.MouseText:SetText('|cff1994ff'..L.MAP_CURSOR..':|r |cffff0000'..L.MAP_BOUNDS..'!|r')
|
||||
end
|
||||
|
||||
int = 0
|
||||
end
|
||||
end)
|
Loading…
Reference in New Issue
Block a user