--[[ 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