CThunWarnerStatus_InCombat = 0; CThunWarnerStatus_Alarm = 1; CThunWarnerStatus_Timer = 1; CThunWarnerStatus_PlaySound = 1; CThunWarnerStatus_SoundPhase2 = 0; CThunWarnerStatus_ShowList = 4; CThunWarnerStatus_Fake = 0; CThunWarnerStatus_RangeStatus = 0; CThunWarnerStatus_CurrentTime = 0; CThunWarnerStatus_LastTimeCheck = 0; CThunWarnerStatus_LastTimeSound = 0; CThunWarnerStatus_Scale = 2; CThunWarnerStatus_Locked = 0; CThunWarnerStatus_InStomach = 0; CThunWarnerStatus_TempDisableSound = 0; CThunWarnerStatus_Players = {}; CThunWarnerStatus_PlayersStomach = {}; CThunWarnerStatus_DigestiveAcidTexture = "Interface\\Icons\\Ability_Creature_Disease_02"; CThunWarnerStatus_Emote = "%s is weakened!"; CThunWarnerStatus_Dies = "Eye of C'Thun dies."; CThunWarnerStatus_Victory = "C'Thun dies."; CThunWarnerStatus_WasVisible = true; CThunWarnerStatus_VersionCheck = {}; CThunWarnerStatus_Offline = {}; CThunWarnerStatus_CheckRunning = false; CThunWarnerStatus_CheckProgress = 0; CThunWarnerStatus_CheckTime = 3; function CThunWarner_OnLoad() this:RegisterEvent("VARIABLES_LOADED"); this:RegisterEvent("PLAYER_REGEN_DISABLED"); this:RegisterEvent("PLAYER_REGEN_ENABLED"); this:RegisterEvent("PLAYER_ENTERING_WORLD"); this:RegisterEvent("CHAT_MSG_ADDON"); this:RegisterEvent("CHAT_MSG_MONSTER_EMOTE"); this:RegisterEvent("CHAT_MSG_COMBAT_HOSTILE_DEATH"); SLASH_CThunWarner1 = "/ctw"; SlashCmdList["CThunWarner"] = CThunWarner_SlashHandler; end function CThunWarner_SlashHandler(arg1) local _, _, command, args = string.find(arg1, "(%w+)%s?(.*)"); if(command) then command = strlower(command); else command = ""; end if(command == "sound") then if(args == "on") then CThunWarnerStatus_PlaySound = 1; CThunWarner_Print("|cFFFF9955Sound:|r |cFFFFFF00On|r."); elseif(args == "off") then CThunWarnerStatus_PlaySound = 0; CThunWarner_Print("|cFFFF9955Sound:|r |cFFFFFF00Off|r."); end elseif(command == "check") then if(UnitInRaid("player")) then CThunWarner_Check(); else CThunWarner_Print("You are not in a raid.") end elseif(command == "fake") then if(CThunWarnerStatus_Fake == 0) then if(not CThunWarnerFrame:IsVisible()) then CThunWarnerStatus_WasVisible = false; CThunWarnerFrame:Show(); end CThunWarnerStatus_Fake = 1; CThunWarnerStatusBar_Timer(8); if(CThunWarnerStatus_Alarm == 1) then PlaySoundFile("Interface\\AddOns\\CThunWarner\\alarm.mp3"); end else CThunWarnerStatusBar:Hide(); CThunWarnerStatus_Fake = 0; if(not CThunWarnerStatus_WasVisible) then CThunWarner_Off(); end CThunWarnerStatus_WasVisible = true; end elseif(command == "alarm") then if(args == "on") then CThunWarnerStatus_Alarm = 1; CThunWarner_Print("|cFFFF9955Alarm:|r |cFFFFFF00On|r."); elseif(args == "off") then CThunWarnerStatus_Alarm = 0; CThunWarner_Print("|cFFFF9955Alarm:|r |cFFFFFF00Off|r."); end elseif(command == "timer") then if(args == "on") then CThunWarnerStatus_Timer = 1; CThunWarner_Print("|cFFFF9955Timer:|r |cFFFFFF00On|r."); elseif(args == "off") then CThunWarnerStatus_Timer = 0; CThunWarner_Print("|cFFFF9955Timer:|r |cFFFFFF00Off|r."); end elseif(command == "soundphase2") then if(args == "on") then CThunWarnerStatus_SoundPhase2 = 1; CThunWarner_Print("|cFFFF9955Phase2 Sound:|r |cFFFFFF00On|r."); elseif(args == "off") then CThunWarnerStatus_SoundPhase2 = 0; CThunWarner_Print("|cFFFF9955Phase2 Sound:|r |cFFFFFF00Off|r."); end elseif(command == "lock") then CThunWarnerStatus_Locked = 1; CThunWarner_Print("|cFFFF9955Position:|r |cFFFFFF00Locked|r."); elseif(command == "unlock") then CThunWarnerStatus_Locked = 0; CThunWarner_Print("|cFFFF9955Position:|r |cFFFFFF00Unlocked|r."); elseif(command == "reset") then CThunWarnerStatus_Locked = 0; CThunWarnerFrame:SetScale(2); CThunWarnerStatus_Scale = 2; CThunWarnerFrame:ClearAllPoints(); CThunWarnerFrame:SetPoint("CENTER", "UIParent"); CThunWarner_Print("|cFFFF9955Position:|r |cFFFFFF00Reset|r."); elseif(command == "scale") then if(tonumber(args)) then local newscale = tonumber(args); CThunWarnerStatus_Locked = 0; CThunWarnerFrame:SetScale(newscale); CThunWarnerStatus_Scale = newscale; CThunWarnerFrame:ClearAllPoints(); CThunWarnerFrame:SetPoint("CENTER", "UIParent"); CThunWarner_Print("|cFFFF9955Scale:|r |cFFFFFF00"..newscale.."|r."); end elseif(command == "list") then if(tonumber(args)) then local newlines = tonumber(args); CThunWarnerStatus_ShowList = newlines; CThunWarner_Print("|cFFFF9955Player List:|r |cFFFFFF00"..newlines.."|r."); end elseif(command == "ooc") then CThunWarnerStatus_InCombat = 0; CThunWarnerStatus_TempDisableSound = 0; CThunWarner_Print("|cFFFF9955Sound:|r |cFFFFFF00Reset|r."); elseif(command == "help") then CThunWarner_Print("Command List:"); DEFAULT_CHAT_FRAME:AddMessage(" /ctw on/off", 0.988, 0.819, 0.086); DEFAULT_CHAT_FRAME:AddMessage(" /ctw alarm on/off", 0.988, 0.819, 0.086); DEFAULT_CHAT_FRAME:AddMessage(" /ctw sound on/off", 0.988, 0.819, 0.086); DEFAULT_CHAT_FRAME:AddMessage(" /ctw timer on/off", 0.988, 0.819, 0.086); DEFAULT_CHAT_FRAME:AddMessage(" /ctw soundphase2 on/off", 0.988, 0.819, 0.086); DEFAULT_CHAT_FRAME:AddMessage(" /ctw list 0..40", 0.988, 0.819, 0.086); DEFAULT_CHAT_FRAME:AddMessage(" /ctw scale 1..9", 0.988, 0.819, 0.086); DEFAULT_CHAT_FRAME:AddMessage(" /ctw reset", 0.988, 0.819, 0.086); DEFAULT_CHAT_FRAME:AddMessage(" /ctw lock", 0.988, 0.819, 0.086); DEFAULT_CHAT_FRAME:AddMessage(" /ctw unlock", 0.988, 0.819, 0.086); DEFAULT_CHAT_FRAME:AddMessage(" /ctw ooc", 0.988, 0.819, 0.086); DEFAULT_CHAT_FRAME:AddMessage(" /ctw fake", 0.988, 0.819, 0.086); DEFAULT_CHAT_FRAME:AddMessage(" /ctw check", 0.988, 0.819, 0.086); CThunWarner_Print("Command List."); elseif(command == "on") then CThunWarnerFrame:Show(); CThunWarner_Print("|cFFFF9955C'Thun Warner:|r |cFFFFFF00On|r."); elseif(command == "off") then CThunWarner_Off(); CThunWarnerStatus_Fake = 0; CThunWarnerStatus_WasVisible = true; CThunWarner_Print("|cFFFF9955C'Thun Warner:|r |cFFFFFF00Off|r."); elseif(command == "") then if(CThunWarnerFrame:IsVisible()) then CThunWarner_Off(); CThunWarnerStatus_Fake = 0; CThunWarnerStatus_WasVisible = true; CThunWarner_Print("|cFFFF9955C'Thun Warner:|r |cFFFFFF00Off|r."); else CThunWarnerFrame:Show(); CThunWarner_Print("|cFFFF9955C'Thun Warner:|r |cFFFFFF00On|r."); end else CThunWarner_Print("Type /ctw help for a command list."); end end function CThunWarner_OnEvent(event) if(event == "PLAYER_REGEN_DISABLED" and GetZoneText() == "Ahn'Qiraj") then if(CThunWarnerFrame:IsVisible()) then CThunWarnerStatus_InCombat = 1; end elseif(event == "PLAYER_REGEN_ENABLED" and CThunWarnerStatus_InCombat == 1) then CThunWarnerStatus_InCombat = 0; CThunWarnerStatus_TempDisableSound = 0; elseif(event == "PLAYER_ENTERING_WORLD") then CThunWarnerStatus_InCombat = 0; CThunWarnerStatus_TempDisableSound = 0; elseif(event == "VARIABLES_LOADED") then CThunWarnerFrame:SetScale(CThunWarnerStatus_Scale); elseif(event == "CHAT_MSG_ADDON" and UnitInRaid("player")) then if(arg1 == "CThunWarner" and arg3 == "RAID") then CThunWarner_Reply(arg2, arg4); end elseif(event == "CHAT_MSG_MONSTER_EMOTE" and CThunWarnerFrame:IsVisible() and GetZoneText() == "Ahn'Qiraj") then if(arg1 == CThunWarnerStatus_Emote) then if(CThunWarnerStatus_Alarm == 1) then PlaySoundFile("Interface\\AddOns\\CThunWarner\\alarm.mp3"); end if(CThunWarnerStatus_Timer == 1) then CThunWarnerStatusBar_Timer(45); end end elseif(event == "CHAT_MSG_COMBAT_HOSTILE_DEATH" and CThunWarnerFrame:IsVisible() and GetZoneText() == "Ahn'Qiraj") then if(arg1 == CThunWarnerStatus_Dies) then if(CThunWarnerStatus_SoundPhase2 == 0) then CThunWarnerStatus_TempDisableSound = 1; end elseif(arg1 == CThunWarnerStatus_Victory) then CThunWarner_Off(); CThunWarnerStatus_InCombat = 0; CThunWarnerStatus_TempDisableSound = 0; CThunWarner_Print("|cFF5DFC0AVictory!|r |cFFFF9955C'Thun Warner:|r |cFFFFFF00Off|r."); end end end function CThunWarner_OnUpdate(arg1) CThunWarnerStatus_CurrentTime = CThunWarnerStatus_CurrentTime + arg1; if(CThunWarnerStatus_CurrentTime > (CThunWarnerStatus_LastTimeCheck+0.1)) then local unitid; CThunWarnerStatus_Players = {}; CThunWarnerStatus_PlayersStomach = {}; CThunWarnerStatus_InStomach = 0; for i = 1, GetNumRaidMembers(), 1 do unitid = "raid"..i; if(not UnitIsDeadOrGhost(unitid)) then if(not UnitIsUnit(unitid, "player")) then if(CheckInteractDistance(unitid, 3)) then tinsert(CThunWarnerStatus_Players, (UnitName(unitid))); end end for a=1,16 do local t,c = UnitDebuff(unitid,a); if(t == nil) then break; end; if(t == CThunWarnerStatus_DigestiveAcidTexture) then if(UnitIsUnit(unitid, "player")) then CThunWarnerStatus_InStomach = 1; end tinsert(CThunWarnerStatus_PlayersStomach, unitid); break; end end end end if(getn(CThunWarnerStatus_Players) > 0) then CThunWarnerStatus_RangeStatus = 1; CThunWarnerStatusTexture:SetVertexColor(1,0,0); if(CThunWarnerStatus_InCombat == 1 and CThunWarnerStatus_PlaySound == 1 and CThunWarnerStatus_TempDisableSound == 0 and CThunWarnerStatus_InStomach == 0) then if(CThunWarnerStatus_CurrentTime > (CThunWarnerStatus_LastTimeSound+1)) then PlaySoundFile("Interface\\AddOns\\CThunWarner\\beep.mp3"); CThunWarnerStatus_LastTimeSound = CThunWarnerStatus_CurrentTime; end end else CThunWarnerStatus_RangeStatus = 0; CThunWarnerStatusTexture:SetVertexColor(0,1,0); end CThunWarner_UpdateList(); CThunWarner_UpdateStomachList(); CThunWarnerStatus_LastTimeCheck = CThunWarnerStatus_CurrentTime; end if(CThunWarnerStatus_CheckRunning) then CThunWarnerStatus_CheckProgress = CThunWarnerStatus_CheckProgress + arg1; if(CThunWarnerStatus_CheckProgress > CThunWarnerStatus_CheckTime) then CThunWarnerStatus_CheckRunning = false; local foundcount = 0; local notfoundcount = 0; local notfound = "Not Found: "; for i=1,MAX_RAID_MEMBERS do local raidname = (UnitName("raid"..i)); if(CThunWarnerStatus_VersionCheck[raidname] == false) then notfoundcount = notfoundcount + 1; notfound = notfound.."|Hplayer:"..raidname.."|h["..raidname.."]|h, "; elseif(CThunWarnerStatus_VersionCheck[raidname] == true and raidname ~= UnitName("player")) then foundcount = foundcount + 1; end end CThunWarner_Print("|cFFFF5333"..notfound.."("..notfoundcount.." Total)|r"); CThunWarner_Print("|cFF5DFC0AFound: ("..foundcount.." Total)|r"); end end end function CThunWarnerStatusBar_Timer(time) CThunWarnerStatusBar.startTime = GetTime(); CThunWarnerStatusBar.endTime = CThunWarnerStatusBar.startTime + time; CThunWarnerStatusBar:SetMinMaxValues(CThunWarnerStatusBar.startTime, CThunWarnerStatusBar.endTime); CThunWarnerStatusBar:SetValue(CThunWarnerStatusBar.startTime); CThunWarnerStatusBar:Show(); end function CThunWarnerStatusBar_OnUpdate() local time = GetTime(); if(time > this.endTime) then time = this.endTime end if(time == this.endTime) then if(CThunWarnerStatus_Fake == 1) then CThunWarnerStatus_Fake = 0; if(not CThunWarnerStatus_WasVisible) then CThunWarner_Off(); CThunWarnerStatus_WasVisible = true; end end this:Hide(); return; end this:SetValue(this.startTime + (this.endTime - time)); getglobal(this:GetName().."Text"):SetText(format("%.2f", this.endTime - time)); end function CThunWarner_UpdateList() CThunWarnerTooltip:SetOwner(CThunWarnerFrame, "ANCHOR_BOTTOMRIGHT"); CThunWarnerTooltip:SetFrameStrata("MEDIUM"); if(CThunWarnerStatus_RangeStatus == 0 or CThunWarnerStatus_ShowList == 0) then CThunWarnerTooltip:Hide(); if(CThunWarnerStatus_Fake == 1) then CThunWarnerTooltip:SetOwner(CThunWarnerFrame, "ANCHOR_BOTTOMRIGHT"); CThunWarnerTooltip:SetFrameStrata("MEDIUM"); CThunWarnerTooltip:ClearLines(); CThunWarnerTooltip:AddLine("Linking:",0.890,0.811,0.341,0); CThunWarnerTooltip:AddLine("- Farming",1,0.498,0,0); CThunWarnerTooltip:AddLine("- Stranglekelp",0.666,0.666,1,0); CThunWarnerTooltip:AddLine("- Liferoot",0.666,0.666,1,0); CThunWarnerTooltip:AddLine("- Forever",1,0.498,0,0); CThunWarnerTooltip:Show(); end else CThunWarnerTooltip:ClearLines(); CThunWarnerTooltip:AddLine("Linking:",0.890,0.811,0.341,0); local index = 1; for key, player in CThunWarnerStatus_Players do for i=1,MAX_RAID_MEMBERS do local partyid = "raid"..i; if((player == (UnitName(partyid))) and UnitExists(partyid) and UnitInParty(partyid)) then CThunWarnerTooltip:AddLine("- "..player,0.666,0.666,1,0); else if((player == (UnitName(partyid))) and UnitExists(partyid) and not UnitInParty(partyid)) then CThunWarnerTooltip:AddLine("- "..player,1,0.498,0,0); end end end if(index >= CThunWarnerStatus_ShowList) then break; end index = index + 1; end CThunWarnerTooltip:Show(); end end function CThunWarner_UpdateStomachList() CThunWarnerStomachTooltip:SetOwner(CThunWarnerFrame, "ANCHOR_RIGHT"); CThunWarnerStomachTooltip:SetFrameStrata("MEDIUM"); if(getn(CThunWarnerStatus_PlayersStomach) == 0 or CThunWarnerStatus_ShowList == 0 or CThunWarnerStatus_InStomach == 1) then CThunWarnerStomachTooltip:Hide(); if(CThunWarnerStatus_Fake == 1) then CThunWarnerStomachTooltip:SetOwner(CThunWarnerFrame, "ANCHOR_RIGHT"); CThunWarnerStomachTooltip:SetFrameStrata("MEDIUM"); CThunWarnerStomachTooltip:ClearLines(); CThunWarnerStomachTooltip:AddLine("Stomach:",0.635,0.737,0.074,0); CThunWarnerStomachTooltip:AddLine("- Pepcid",0.666,0.666,1,0); CThunWarnerStomachTooltip:AddLine("- Reflux",1,0.498,0,0); CThunWarnerStomachTooltip:Show(); end else CThunWarnerStomachTooltip:ClearLines(); CThunWarnerStomachTooltip:AddLine("Stomach:",0.635,0.737,0.074,0); for key, unit in CThunWarnerStatus_PlayersStomach do if(UnitExists(unit)) then if(UnitInParty(unit)) then CThunWarnerStomachTooltip:AddLine("- "..(UnitName(unit)),0.666,0.666,1,0); else CThunWarnerStomachTooltip:AddLine("- "..(UnitName(unit)),1,0.498,0,0); end end end CThunWarnerStomachTooltip:Show(); end end function CThunWarner_Check() if(UnitInRaid("player")) then if(CThunWarnerFrame:IsVisible() and not CThunWarnerStatus_CheckRunning) then CThunWarner_Print("|cFF5DFC0AReady Check!|r"); elseif(not CThunWarnerFrame:IsVisible()) then CThunWarnerFrame:Show(); CThunWarner_Print("|cFFFF9955C'Thun Warner:|r |cFFFFFF00On|r. |cFF5DFC0AReady Check!|r"); end if(not CThunWarnerStatus_CheckRunning) then CThunWarnerStatus_VersionCheck = {}; CThunWarnerStatus_Offline = {}; for i=1,MAX_RAID_MEMBERS do local raidname = (UnitName("raid"..i)); local isonline = UnitIsConnected("raid"..i); if(raidname and isonline ~= nil) then CThunWarnerStatus_VersionCheck[raidname] = false; else if(raidname and isonline == nil) then CThunWarnerStatus_Offline[raidname] = true; end end end SendAddonMessage("CThunWarner", "Check", "RAID"); CThunWarnerStatus_CheckRunning = true; CThunWarnerStatus_CheckProgress = 0; CThunWarner_Reply("Ready", (UnitName("player"))); CThunWarner_Offline(); end end end function CThunWarner_Offline() local offlinecount = 0; local isoffline = "Offline: "; for i=1,MAX_RAID_MEMBERS do local raidname = (UnitName("raid"..i)); if(CThunWarnerStatus_Offline[raidname] == true) then offlinecount = offlinecount + 1; isoffline = isoffline.."|Hplayer:"..raidname.."|h["..raidname.."]|h, "; end end CThunWarner_Print("|cFFC6C3B5"..isoffline.."("..offlinecount.." Total)|r"); end function CThunWarner_Reply(msg, sender) if(msg == "Check" and sender ~= UnitName("player")) then SendAddonMessage("CThunWarner", "Ready", "RAID"); if(not CThunWarnerFrame:IsVisible() and GetZoneText() == "Ahn'Qiraj") then local name, rank; for i = 1, GetNumRaidMembers(), 1 do name, rank = GetRaidRosterInfo(i); if(name == sender) then if(rank and rank > 0) then CThunWarnerFrame:Show(); CThunWarner_Print("|cFFFF9955C'Thun Warner:|r |cFFFFFF00On|r. |cFF5DFC0AReady Check!|r |cFFFF9955|Hplayer:"..sender.."|h["..sender.."]|h|r"); break; end break; end end end elseif(CThunWarnerStatus_CheckRunning and msg == "Ready" and sender) then CThunWarnerStatus_VersionCheck[sender] = true; end end function CThunWarner_Off() CThunWarnerFrame:Hide(); CThunWarnerTooltip:Hide(); CThunWarnerStomachTooltip:Hide(); CThunWarnerStatusBar:Hide(); end function CThunWarner_Print(msg) DEFAULT_CHAT_FRAME:AddMessage(" "..msg, 0.988, 0.819, 0.086); end