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