Files
coa-elvui/ElvUI/Core/AprilFools.lua
T
Andrew6810 60ef8a38af init
2022-10-21 07:09:01 -07:00

369 lines
12 KiB
Lua

--[[
Collection of previous april fools pranks
Harlem Shake: Try it out with the command /harlemshake
Hello Kitty: Try it out with the command /hellokitty (pay attention to the popups, read what it says)
]]
local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
local UF = E:GetModule("UnitFrames")
local AB = E:GetModule("ActionBars")
--Lua functions
local _G = _G
local pairs = pairs
local twipe, tinsert = wipe, tinsert
--WoW API / Variables
local CreateFrame = CreateFrame
local DoEmote = DoEmote
local GetCVar, SetCVar = GetCVar, SetCVar
local PlayMusic, StopMusic = PlayMusic, StopMusic
local SendChatMessage = SendChatMessage
local NUM_PET_ACTION_SLOTS = NUM_PET_ACTION_SLOTS
--Harlem Shake (Activate with command: /harlemshake)
--People really seemed to like this one. We got a lot of positive responses.
do
function E:StopHarlemShake()
E.isMassiveShaking = nil
StopMusic()
SetCVar("Sound_EnableAllSound", self.oldEnableAllSound)
SetCVar("Sound_EnableMusic", self.oldEnableMusic)
self:StopShakeHorizontal(ElvUI_StaticPopup1)
for _, object in pairs(self.massiveShakeObjects) do
if object then
self:StopShake(object)
end
end
if E.massiveShakeTimer then
E:CancelTimer(E.massiveShakeTimer)
end
E.global.aprilFools = true
E:StaticPopup_Hide("HARLEM_SHAKE")
twipe(self.massiveShakeObjects)
DoEmote("Dance")
end
function E:DoTheHarlemShake()
E.isMassiveShaking = true
ElvUI_StaticPopup1Button1:Enable()
for _, object in pairs(self.massiveShakeObjects) do
if object and object:IsShown() then
self:Shake(object)
end
end
E.massiveShakeTimer = E:ScheduleTimer("StopHarlemShake", 42.5)
SendChatMessage("DO THE HARLEM SHAKE!", "YELL")
end
function E:BeginHarlemShake()
DoEmote("Dance")
ElvUI_StaticPopup1Button1:Disable()
self:ShakeHorizontal(ElvUI_StaticPopup1)
self.oldEnableAllSound = GetCVar("Sound_EnableAllSound")
self.oldEnableMusic = GetCVar("Sound_EnableMusic")
SetCVar("Sound_EnableAllSound", 1)
SetCVar("Sound_EnableMusic", 1)
PlayMusic(E.Media.Sounds.HarlemShake)
E:ScheduleTimer("DoTheHarlemShake", 15.5)
self.massiveShakeObjects = {}
tinsert(self.massiveShakeObjects, GameTooltip)
tinsert(self.massiveShakeObjects, Minimap)
tinsert(self.massiveShakeObjects, WatchFrame)
tinsert(self.massiveShakeObjects, LeftChatPanel)
tinsert(self.massiveShakeObjects, RightChatPanel)
tinsert(self.massiveShakeObjects, LeftChatToggleButton)
tinsert(self.massiveShakeObjects, RightChatToggleButton)
if ElvUI_ReputationBar then
tinsert(self.massiveShakeObjects, ElvUI_ReputationBar)
end
if ElvUI_ExperienceBar then
tinsert(self.massiveShakeObjects, ElvUI_ExperienceBar)
end
for unit in pairs(UF.units) do
tinsert(self.massiveShakeObjects, UF[unit])
end
for _, header in pairs(UF.headers) do
tinsert(self.massiveShakeObjects, header)
end
for _, bar in pairs(AB.handledBars) do
for i = 1, #bar.buttons do
tinsert(self.massiveShakeObjects, bar.buttons[i])
end
end
if ElvUI_StanceBar then
for i = 1, #ElvUI_StanceBar.buttons do
tinsert(self.massiveShakeObjects, ElvUI_StanceBar.buttons[i])
end
end
for i = 1, NUM_PET_ACTION_SLOTS do
local button = _G["PetActionButton"..i]
if button then
tinsert(self.massiveShakeObjects, button)
end
end
end
function E:HarlemShakeToggle()
self:StaticPopup_Show("HARLEM_SHAKE")
end
end
--Hello Kitty (Activate with command: /hellokitty)
--This is one of those pranks where you either love it or hate it I think
--Unfortunately there was a bug which caused some of the hello kitty changes to stick,
-- when they should have reverted to the original settings. This bug was fixed later on.
do
local function OnDragStart(self)
self:StartMoving()
end
local function OnDragStop(self)
self:StopMovingOrSizing()
end
local function OnUpdate(self, elapsed)
if self.elapsed and self.elapsed > 0.1 then
self.tex:SetTexCoord((self.curFrame - 1) * 0.1, 0, (self.curFrame - 1) * 0.1, 1, self.curFrame * 0.1, 0, self.curFrame * 0.1, 1)
if self.countUp then
self.curFrame = self.curFrame + 1
else
self.curFrame = self.curFrame - 1
end
if self.curFrame > 10 then
self.countUp = false
self.curFrame = 9
elseif self.curFrame < 1 then
self.countUp = true
self.curFrame = 2
end
self.elapsed = 0
else
self.elapsed = (self.elapsed or 0) + elapsed
end
end
function E:SetupHelloKitty()
if not self.db.tempSettings then
self.db.tempSettings = {}
end
--Store old settings
local t = self.db.tempSettings
local c = self.db.general.backdropcolor
if self:HelloKittyFixCheck() then
E:HelloKittyFix()
else
self.oldEnableAllSound = GetCVar("Sound_EnableAllSound")
self.oldEnableMusic = GetCVar("Sound_EnableMusic")
t.backdropcolor = {r = c.r, g = c.g, b = c.b}
c = self.db.general.backdropfadecolor
t.backdropfadecolor = {r = c.r, g = c.g, b = c.b, a = c.a}
c = self.db.general.bordercolor
t.bordercolor = {r = c.r, g = c.g, b = c.b}
c = self.db.general.valuecolor
t.valuecolor = {r = c.r, g = c.g, b = c.b}
t.panelBackdropNameLeft = self.db.chat.panelBackdropNameLeft
t.panelBackdropNameRight = self.db.chat.panelBackdropNameRight
c = self.db.unitframe.colors.health
t.health = {r = c.r, g = c.g, b = c.b}
t.healthclass = self.db.unitframe.colors.healthclass
c = self.db.unitframe.colors.castColor
t.castColor = {r = c.r, g = c.g, b = c.b}
t.transparentCastbar = self.db.unitframe.colors.transparentCastbar
c = self.db.unitframe.colors.auraBarBuff
t.auraBarBuff = {r = c.r, g = c.g, b = c.b}
t.transparentAurabars = self.db.unitframe.colors.transparentAurabars
--Apply new settings
self.db.general.backdropfadecolor = {r = 131/255, g = 36/255, b = 130/255, a = 0.36}
self.db.general.backdropcolor = {r = 223/255, g = 76/255, b = 188/255}
self.db.general.bordercolor = {r = 223/255, g = 217/255, b = 47/255}
self.db.general.valuecolor = {r = 223/255, g = 217/255, b = 47/255}
self.db.chat.panelBackdropNameLeft = E.Media.Textures.HelloKittyChat
self.db.chat.panelBackdropNameRight = E.Media.Textures.HelloKittyChat
self.db.unitframe.colors.castColor = {r = 223/255, g = 76/255, b = 188/255}
self.db.unitframe.colors.transparentCastbar = true
self.db.unitframe.colors.auraBarBuff = {r = 223/255, g = 76/255, b = 188/255}
self.db.unitframe.colors.transparentAurabars = true
self.db.unitframe.colors.health = {r = 223/255, g = 76/255, b = 188/255}
self.db.unitframe.colors.healthclass = false
SetCVar("Sound_EnableAllSound", 1)
SetCVar("Sound_EnableMusic", 1)
PlayMusic(E.Media.Sounds.HelloKitty)
E:StaticPopup_Show("HELLO_KITTY_END")
self.db.general.kittys = true
self:CreateKittys()
self:UpdateAll()
end
end
function E:RestoreHelloKitty()
--Store old settings
self.db.general.kittys = false
if HelloKittyLeft then
HelloKittyLeft:Hide()
HelloKittyRight:Hide()
end
if not self.db.tempSettings then return end
if self:HelloKittyFixCheck() then
self:HelloKittyFix()
self.db.tempSettings = nil
return
end
local c = self.db.tempSettings.backdropcolor
self.db.general.backdropcolor = {r = c.r, g = c.g, b = c.b}
c = self.db.tempSettings.backdropfadecolor
self.db.general.backdropfadecolor = {r = c.r, g = c.g, b = c.b, a = (c.a or 0.8)}
c = self.db.tempSettings.bordercolor
self.db.general.bordercolor = {r = c.r, g = c.g, b = c.b}
c = self.db.tempSettings.valuecolor
self.db.general.valuecolor = {r = c.r, g = c.g, b = c.b}
self.db.chat.panelBackdropNameLeft = self.db.tempSettings.panelBackdropNameLeft
self.db.chat.panelBackdropNameRight = self.db.tempSettings.panelBackdropNameRight
c = self.db.tempSettings.health
self.db.unitframe.colors.health = {r = c.r, g = c.g, b = c.b}
self.db.unitframe.colors.healthclass = self.db.tempSettings.healthclass
c = self.db.tempSettings.castColor
self.db.unitframe.colors.castColor = {r = c.r, g = c.g, b = c.b}
self.db.unitframe.colors.transparentCastbar = self.db.tempSettings.transparentCastbar
c = self.db.tempSettings.auraBarBuff
self.db.unitframe.colors.auraBarBuff = {r = c.r, g = c.g, b = c.b}
self.db.unitframe.colors.transparentAurabars = self.db.tempSettings.transparentAurabars
self.db.tempSettings = nil
self:UpdateAll()
end
function E:CreateKittys()
if HelloKittyLeft then
HelloKittyLeft:Show()
HelloKittyRight:Show()
return
end
local helloKittyLeft = CreateFrame("Frame", "HelloKittyLeft", UIParent)
helloKittyLeft:SetSize(120, 128)
helloKittyLeft:SetMovable(true)
helloKittyLeft:EnableMouse(true)
helloKittyLeft:RegisterForDrag("LeftButton")
helloKittyLeft:Point("BOTTOMLEFT", LeftChatPanel, "BOTTOMRIGHT", 2, -4)
helloKittyLeft.tex = helloKittyLeft:CreateTexture(nil, "OVERLAY")
helloKittyLeft.tex:SetAllPoints()
helloKittyLeft.tex:SetTexture(E.Media.Textures.HelloKitty)
helloKittyLeft.tex:SetTexCoord(0, 0, 0, 1, 0, 0, 0, 1)
helloKittyLeft.curFrame = 1
helloKittyLeft.countUp = true
helloKittyLeft:SetClampedToScreen(true)
helloKittyLeft:SetScript("OnDragStart", OnDragStart)
helloKittyLeft:SetScript("OnDragStop", OnDragStop)
helloKittyLeft:SetScript("OnUpdate", OnUpdate)
local helloKittyRight = CreateFrame("Frame", "HelloKittyRight", UIParent)
helloKittyRight:SetSize(120, 128)
helloKittyRight:SetMovable(true)
helloKittyRight:EnableMouse(true)
helloKittyRight:RegisterForDrag("LeftButton")
helloKittyRight:Point("BOTTOMRIGHT", RightChatPanel, "BOTTOMLEFT", -2, -4)
helloKittyRight.tex = helloKittyRight:CreateTexture(nil, "OVERLAY")
helloKittyRight.tex:SetAllPoints()
helloKittyRight.tex:SetTexture(E.Media.Textures.HelloKitty)
helloKittyRight.tex:SetTexCoord(0, 0, 0, 1, 0, 0, 0, 1)
helloKittyRight.curFrame = 10
helloKittyRight.countUp = false
helloKittyRight:SetClampedToScreen(true)
helloKittyRight:SetScript("OnDragStart", OnDragStart)
helloKittyRight:SetScript("OnDragStop", OnDragStop)
helloKittyRight:SetScript("OnUpdate", OnUpdate)
end
--When it bugged out for a user the command "/hellokittyfix" attempted to restore the changed settings to default
function E:HelloKittyFixCheck(secondCheck)
local t = self.db.tempSettings
if not t and not secondCheck then t = self.db.general end
if t and t.backdropcolor then
return self:Round(t.backdropcolor.r, 2) == 0.87 and self:Round(t.backdropcolor.g, 2) == 0.3 and self:Round(t.backdropcolor.b, 2) == 0.74
end
end
function E:HelloKittyFix()
local c = P.general.backdropcolor
self.db.general.backdropcolor = {r = c.r, g = c.g, b = c.b}
c = P.general.backdropfadecolor
self.db.general.backdropfadecolor = {r = c.r, g = c.g, b = c.b, a = (c.a or 0.8)}
c = P.general.bordercolor
self.db.general.bordercolor = {r = c.r, g = c.g, b = c.b}
c = P.general.valuecolor
self.db.general.valuecolor = {r = c.r, g = c.g, b = c.b}
self.db.chat.panelBackdropNameLeft = ""
self.db.chat.panelBackdropNameRight = ""
c = P.unitframe.colors.health
self.db.unitframe.colors.health = {r = c.r, g = c.g, b = c.b}
c = P.unitframe.colors.castColor
self.db.unitframe.colors.castColor = {r = c.r, g = c.g, b = c.b}
self.db.unitframe.colors.transparentCastbar = false
c = P.unitframe.colors.castColor
self.db.unitframe.colors.auraBarBuff = {r = c.r, g = c.g, b = c.b}
self.db.unitframe.colors.transparentAurabars = false
if HelloKittyLeft then
HelloKittyLeft:Hide()
HelloKittyRight:Hide()
self.db.general.kittys = nil
return
end
self.db.tempSettings = nil
self:UpdateAll()
end
function E:HelloKittyToggle()
if HelloKittyLeft and HelloKittyLeft:IsShown() then
self:RestoreHelloKitty()
else
self:StaticPopup_Show("HELLO_KITTY")
end
end
end