From 6c26bc61902d155bfc170b55979680a901448fd9 Mon Sep 17 00:00:00 2001 From: shagu Date: Sat, 19 Nov 2022 16:59:12 +0100 Subject: [PATCH] core: don't rely on sane global environment some addons like to provide a broken _G variable to the global environment breaking every other addon that relies on it if existing. With this commit, make ShaguTweaks no longer re-use the global _G, even if existing. --- config.lua | 2 +- helpers.lua | 25 ++++++++++++++++++++++++- mods/auto-dismount.lua | 2 +- mods/auto-stance.lua | 2 +- mods/blue-shaman.lua | 2 +- mods/chat-links.lua | 2 +- mods/chat-tweaks.lua | 2 +- mods/cooldown-numbers.lua | 2 +- mods/custom.lua | 2 +- mods/dark-ui-elements.lua | 2 +- mods/equip-compare.lua | 2 +- mods/health-color.lua | 2 +- mods/health-numbers.lua | 2 +- mods/hide-errors.lua | 2 +- mods/hide-gryphons.lua | 2 +- mods/item-colors.lua | 2 +- mods/minimap-clock.lua | 2 +- mods/minimap-square.lua | 2 +- mods/minimap-tweaks.lua | 2 +- mods/move-unitframes.lua | 2 +- mods/nameplate-classcolor.lua | 2 +- mods/nameplate-scale.lua | 2 +- mods/sell-junk.lua | 2 +- mods/social-colors.lua | 2 +- mods/target-castbar.lua | 2 +- mods/target-debufftimer.lua | 2 +- mods/tooltip-details.lua | 2 +- mods/unitframes-bighealth.lua | 2 +- mods/unitframes-classcolor.lua | 2 +- mods/unitframes-classportrait.lua | 2 +- mods/vendor-values.lua | 2 +- mods/worldmap-colors.lua | 2 +- mods/worldmap-coordinates.lua | 2 +- mods/worldmap-window.lua | 2 +- 34 files changed, 57 insertions(+), 34 deletions(-) diff --git a/config.lua b/config.lua index 22e50b1..6cb6aa5 100644 --- a/config.lua +++ b/config.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local GetExpansion = ShaguTweaks.GetExpansion local mod = math.mod or mod diff --git a/helpers.lua b/helpers.lua index 996eced..90a0e25 100644 --- a/helpers.lua +++ b/helpers.lua @@ -1,6 +1,29 @@ -local _G = _G or getfenv(0) local gfind = string.gmatch or string.gfind +ShaguTweaks.GetExpansion = function() + local _, _, _, client = GetBuildInfo() + client = client or 11200 + + -- detect client expansion + if client >= 20000 and client <= 20400 then + return "tbc" + elseif client >= 30000 and client <= 30300 then + return "wotlk" + else + return "vanilla" + end +end + +ShaguTweaks.GetGlobalEnv = function() + if ShaguTweaks.GetExpansion() == 'vanilla' then + return getfenv(0) + else + return _G or getfenv(0) + end +end + +local _G = ShaguTweaks.GetGlobalEnv() + local gradientcolors = {} ShaguTweaks.GetColorGradient = function(perc) perc = perc > 1 and 1 or perc diff --git a/mods/auto-dismount.lua b/mods/auto-dismount.lua index edbe876..3191ca0 100644 --- a/mods/auto-dismount.lua +++ b/mods/auto-dismount.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local module = ShaguTweaks:register({ title = "Auto Dismount", diff --git a/mods/auto-stance.lua b/mods/auto-stance.lua index 7fccc29..5924efa 100644 --- a/mods/auto-stance.lua +++ b/mods/auto-stance.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local strsplit = ShaguTweaks.strsplit local module = ShaguTweaks:register({ diff --git a/mods/blue-shaman.lua b/mods/blue-shaman.lua index 3ca6836..2f9cbcd 100644 --- a/mods/blue-shaman.lua +++ b/mods/blue-shaman.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local GetExpansion = ShaguTweaks.GetExpansion local module = ShaguTweaks:register({ diff --git a/mods/chat-links.lua b/mods/chat-links.lua index a57a1e9..7851638 100644 --- a/mods/chat-links.lua +++ b/mods/chat-links.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local gfind = string.gmatch or string.gfind local GetUnitData = ShaguTweaks.GetUnitData local hooksecurefunc = ShaguTweaks.hooksecurefunc diff --git a/mods/chat-tweaks.lua b/mods/chat-tweaks.lua index de917a3..d1e11e4 100644 --- a/mods/chat-tweaks.lua +++ b/mods/chat-tweaks.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local scrollspeed = 1 local module = ShaguTweaks:register({ diff --git a/mods/cooldown-numbers.lua b/mods/cooldown-numbers.lua index edcf354..e507b7b 100644 --- a/mods/cooldown-numbers.lua +++ b/mods/cooldown-numbers.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local hooksecurefunc = hooksecurefunc or ShaguTweaks.hooksecurefunc local GetExpansion = ShaguTweaks.GetExpansion local AddBorder = ShaguTweaks.AddBorder diff --git a/mods/custom.lua b/mods/custom.lua index 7925070..2e36d0b 100644 --- a/mods/custom.lua +++ b/mods/custom.lua @@ -16,7 +16,7 @@ local module = ShaguTweaks:register({ -- Global code: -- This is where you can put your most basic variable assignments. -- Code in this scope will *always* run, no matter if the module is enabled or not. -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() module.enable = function(self) -- Module code: diff --git a/mods/dark-ui-elements.lua b/mods/dark-ui-elements.lua index 0db6bc5..e41a855 100644 --- a/mods/dark-ui-elements.lua +++ b/mods/dark-ui-elements.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local HookAddonOrVariable = ShaguTweaks.HookAddonOrVariable local GetExpansion = ShaguTweaks.GetExpansion local AddBorder = ShaguTweaks.AddBorder diff --git a/mods/equip-compare.lua b/mods/equip-compare.lua index c994b0a..91179eb 100644 --- a/mods/equip-compare.lua +++ b/mods/equip-compare.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local module = ShaguTweaks:register({ title = "Equip Compare", diff --git a/mods/health-color.lua b/mods/health-color.lua index c57cc7b..322b6b8 100644 --- a/mods/health-color.lua +++ b/mods/health-color.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local Abbreviate = ShaguTweaks.Abbreviate local GetColorGradient = ShaguTweaks.GetColorGradient local vanilla = ShaguTweaks.GetExpansion() == "vanilla" or nil diff --git a/mods/health-numbers.lua b/mods/health-numbers.lua index a7fee00..1649a55 100644 --- a/mods/health-numbers.lua +++ b/mods/health-numbers.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local Abbreviate = ShaguTweaks.Abbreviate local GetColorGradient = ShaguTweaks.GetColorGradient local vanilla = ShaguTweaks.GetExpansion() == "vanilla" or nil diff --git a/mods/hide-errors.lua b/mods/hide-errors.lua index 838fb8d..5705e5e 100644 --- a/mods/hide-errors.lua +++ b/mods/hide-errors.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local module = ShaguTweaks:register({ title = "Hide Errors", diff --git a/mods/hide-gryphons.lua b/mods/hide-gryphons.lua index a1df71b..dc7bb3b 100644 --- a/mods/hide-gryphons.lua +++ b/mods/hide-gryphons.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local module = ShaguTweaks:register({ title = "Hide Gryphons", diff --git a/mods/item-colors.lua b/mods/item-colors.lua index 4a32387..14cd412 100644 --- a/mods/item-colors.lua +++ b/mods/item-colors.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local GetExpansion = ShaguTweaks.GetExpansion local AddBorder = ShaguTweaks.AddBorder local HookAddonOrVariable = ShaguTweaks.HookAddonOrVariable diff --git a/mods/minimap-clock.lua b/mods/minimap-clock.lua index a98fa7f..167a116 100644 --- a/mods/minimap-clock.lua +++ b/mods/minimap-clock.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local module = ShaguTweaks:register({ title = "MiniMap Clock", diff --git a/mods/minimap-square.lua b/mods/minimap-square.lua index 321159e..ad549ff 100644 --- a/mods/minimap-square.lua +++ b/mods/minimap-square.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local module = ShaguTweaks:register({ title = "MiniMap Square", diff --git a/mods/minimap-tweaks.lua b/mods/minimap-tweaks.lua index 1b8170a..c3ecd7f 100644 --- a/mods/minimap-tweaks.lua +++ b/mods/minimap-tweaks.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local module = ShaguTweaks:register({ title = "MiniMap Tweaks", diff --git a/mods/move-unitframes.lua b/mods/move-unitframes.lua index 2673ce8..4d60fed 100644 --- a/mods/move-unitframes.lua +++ b/mods/move-unitframes.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local module = ShaguTweaks:register({ title = "Movable Unit Frames", diff --git a/mods/nameplate-classcolor.lua b/mods/nameplate-classcolor.lua index 3411cdd..83859ce 100644 --- a/mods/nameplate-classcolor.lua +++ b/mods/nameplate-classcolor.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local GetUnitData = ShaguTweaks.GetUnitData local module = ShaguTweaks:register({ diff --git a/mods/nameplate-scale.lua b/mods/nameplate-scale.lua index 150f8e2..73b0bac 100644 --- a/mods/nameplate-scale.lua +++ b/mods/nameplate-scale.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local module = ShaguTweaks:register({ title = "Nameplate Scale", diff --git a/mods/sell-junk.lua b/mods/sell-junk.lua index 0b47d73..df8eeb1 100644 --- a/mods/sell-junk.lua +++ b/mods/sell-junk.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local module = ShaguTweaks:register({ title = "Sell Junk", diff --git a/mods/social-colors.lua b/mods/social-colors.lua index 3a3851a..7ed4342 100644 --- a/mods/social-colors.lua +++ b/mods/social-colors.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local L = ShaguTweaks.L local gfind = string.gmatch or string.gfind local GetUnitData = ShaguTweaks.GetUnitData diff --git a/mods/target-castbar.lua b/mods/target-castbar.lua index 56dd345..82e0850 100644 --- a/mods/target-castbar.lua +++ b/mods/target-castbar.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local GetExpansion = ShaguTweaks.GetExpansion local UnitCastingInfo = ShaguTweaks.UnitCastingInfo local UnitChannelInfo = ShaguTweaks.UnitChannelInfo diff --git a/mods/target-debufftimer.lua b/mods/target-debufftimer.lua index 46ae25d..43e0c8d 100644 --- a/mods/target-debufftimer.lua +++ b/mods/target-debufftimer.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local module = ShaguTweaks:register({ title = "Debuff Timer", diff --git a/mods/tooltip-details.lua b/mods/tooltip-details.lua index a60df3d..1a1726d 100644 --- a/mods/tooltip-details.lua +++ b/mods/tooltip-details.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local round = ShaguTweaks.round local rgbhex = ShaguTweaks.rgbhex local Abbreviate = ShaguTweaks.Abbreviate diff --git a/mods/unitframes-bighealth.lua b/mods/unitframes-bighealth.lua index f85f6f6..47b5786 100644 --- a/mods/unitframes-bighealth.lua +++ b/mods/unitframes-bighealth.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local module = ShaguTweaks:register({ title = "Unit Frame Big Health", diff --git a/mods/unitframes-classcolor.lua b/mods/unitframes-classcolor.lua index f4e1cd4..dfc1537 100644 --- a/mods/unitframes-classcolor.lua +++ b/mods/unitframes-classcolor.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local module = ShaguTweaks:register({ title = "Unit Frame Class Colors", diff --git a/mods/unitframes-classportrait.lua b/mods/unitframes-classportrait.lua index 9a6e2c9..3bbf2ce 100644 --- a/mods/unitframes-classportrait.lua +++ b/mods/unitframes-classportrait.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local addonpath local tocs = { "", "-master", "-tbc", "-wotlk" } diff --git a/mods/vendor-values.lua b/mods/vendor-values.lua index 924f466..44feb6f 100644 --- a/mods/vendor-values.lua +++ b/mods/vendor-values.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local GetExpansion = ShaguTweaks.GetExpansion local module = ShaguTweaks:register({ diff --git a/mods/worldmap-colors.lua b/mods/worldmap-colors.lua index eca3fcf..68323ed 100644 --- a/mods/worldmap-colors.lua +++ b/mods/worldmap-colors.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local module = ShaguTweaks:register({ title = "WorldMap Class Colors", diff --git a/mods/worldmap-coordinates.lua b/mods/worldmap-coordinates.lua index cb7d6a5..36cbdbe 100644 --- a/mods/worldmap-coordinates.lua +++ b/mods/worldmap-coordinates.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local module = ShaguTweaks:register({ title = "WorldMap Coordinates", diff --git a/mods/worldmap-window.lua b/mods/worldmap-window.lua index a4735f7..6e757e2 100644 --- a/mods/worldmap-window.lua +++ b/mods/worldmap-window.lua @@ -1,4 +1,4 @@ -local _G = _G or getfenv(0) +local _G = ShaguTweaks.GetGlobalEnv() local HookScript = ShaguTweaks.HookScript local module = ShaguTweaks:register({