ElvUI/Core/AprilFools.lua

356 lines
12 KiB
Lua
Raw Permalink Normal View History

2020-11-13 14:27:50 -05:00
------------------------------------------------------------------------
-- 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')
local _G = _G
local pairs = pairs
local wipe, tinsert = wipe, tinsert
local CreateFrame = CreateFrame
local DoEmote = DoEmote
local GetCVar, SetCVar = GetCVar, SetCVar
local NUM_PET_ACTION_SLOTS = NUM_PET_ACTION_SLOTS
local PlayMusic, StopMusic = PlayMusic, StopMusic
-- GLOBALS: ElvUI_StaticPopup1, ElvUI_StaticPopup1Button1, ElvUI_StanceBar
--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')
wipe(self.massiveShakeObjects)
DoEmote('Dance')
end
function E:DoTheHarlemShake()
E.isMassiveShaking = true
ElvUI_StaticPopup1Button1:Enable()
for _, object in pairs(self.massiveShakeObjects) do
if object and not object:IsForbidden() and object:IsShown() then
self:Shake(object)
end
end
E.massiveShakeTimer = E:ScheduleTimer('StopHarlemShake', 42.5)
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, _G.GameTooltip)
tinsert(self.massiveShakeObjects, _G.Minimap)
tinsert(self.massiveShakeObjects, _G.ObjectiveTrackerFrame)
tinsert(self.massiveShakeObjects, _G.LeftChatPanel)
tinsert(self.massiveShakeObjects, _G.RightChatPanel)
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:StaggeredUpdateAll(nil, true)
end
end
function E:RestoreHelloKitty()
--Store old settings
self.db.general.kittys = false
if _G.HelloKittyLeft then
_G.HelloKittyLeft:Hide()
_G.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:StaggeredUpdateAll(nil, true)
end
function E:CreateKittys()
if _G.HelloKittyLeft then
_G.HelloKittyLeft:Show()
_G.HelloKittyRight:Show()
return
end
local helloKittyLeft = CreateFrame('Frame', 'HelloKittyLeft', _G.UIParent)
helloKittyLeft:Size(120, 128)
helloKittyLeft:SetMovable(true)
helloKittyLeft:EnableMouse(true)
helloKittyLeft:RegisterForDrag('LeftButton')
helloKittyLeft:Point('BOTTOMLEFT', _G.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', _G.UIParent)
helloKittyRight:Size(120, 128)
helloKittyRight:SetMovable(true)
helloKittyRight:EnableMouse(true)
helloKittyRight:RegisterForDrag('LeftButton')
helloKittyRight:Point('BOTTOMRIGHT', _G.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 _G.HelloKittyLeft then
_G.HelloKittyLeft:Hide()
_G.HelloKittyRight:Hide()
self.db.general.kittys = nil
return
end
self.db.tempSettings = nil
self:StaggeredUpdateAll(nil, true)
end
function E:HelloKittyToggle()
if _G.HelloKittyLeft and _G.HelloKittyLeft:IsShown() then
self:RestoreHelloKitty()
else
self:StaticPopup_Show('HELLO_KITTY')
end
end
end