From 198099af0dda663e10b41dcf857cd400b3ba40bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Majdand=C5=BEi=C4=87?= Date: Tue, 5 Mar 2024 21:27:24 +0100 Subject: [PATCH] Add personal cooldown announcer --- .vscode/settings.json | 214 +++++++++++++++++- .../PersonalCooldownAnnouncer/event.lua | 7 + .../PersonalCooldownAnnouncer/event2.lua | 12 + .../Legion/PersonalCooldownAnnouncer/init.lua | 73 ++++++ 4 files changed, 305 insertions(+), 1 deletion(-) create mode 100644 Complete Projects/Legion/PersonalCooldownAnnouncer/event.lua create mode 100644 Complete Projects/Legion/PersonalCooldownAnnouncer/event2.lua create mode 100644 Complete Projects/Legion/PersonalCooldownAnnouncer/init.lua diff --git a/.vscode/settings.json b/.vscode/settings.json index 9f6b4a0..71f3d84 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,215 @@ { - "Lua.diagnostics.globals": ["aura_env"] + "Lua.diagnostics.globals": [ + "aura_env", + "StaticPopup1Button1", + "SelectGossipOption", + "UnitDebuff", + "PLAYER", + "UnitBuff", + "ChatConfigChatSettingsLeftCheckBox1Check", + "ChatConfigChatSettingsLeftCheckBox2Check", + "ChatConfigChatSettingsLeftCheckBox3Check", + "ChatConfigChatSettingsLeftCheckBox4Check", + "ChatConfigChatSettingsLeftCheckBox5Check", + "ChatConfigChatSettingsLeftCheckBox6Check", + "ChatConfigChatSettingsLeftCheckBox7Check", + "ChatConfigChatSettingsLeftCheckBox8Check", + "ChatConfigChatSettingsLeftCheckBox9Check", + "ChatConfigChatSettingsLeftCheckBox10Check", + "ChatConfigChatSettingsLeftCheckBox11Check", + "ChatConfigChatSettingsLeftCheckBox12Check", + "ChatConfigChatSettingsLeftCheckBox13Check", + "ChatConfigChatSettingsLeftCheckBox14Check", + "ChatConfigChatSettingsLeftCheckBox15Check", + "ChatConfigChatSettingsLeftCheckBox16Check", + "StaticPopupDialogs", + "StaticPopup_Show", + "CommunitiesFrame", + "COMMUNITIES_FRAME_DISPLAY_MODES", + "CommunitiesFrameInset", + "ActionButton_HideOverlayGlow", + "ActionButton_ShowOverlayGlow", + "message", + "InspectUnit", + "GetItemStats", + "FriendsFrameCloseButton", + "DISPLAY", + "HP", + "NAME", + "ANIMATION", + "SHOW", + "SlashCmdList", + "ChatFrame_AddMessageEventFilter", + "ChatFrame_GetMessageEventFilters", + "ChatFrame_RemoveMessageEventFilter", + "CR_VERSATILITY_DAMAGE_DONE", + "CHAT_MSG_WHISPER", + "CHAT_MSG_TEXT_EMOTE", + "HIDE", + "UnitAura", + "CR_VERSATILITY_DAMAGE_TAKEN", + "COLOR", + "CHAT_MSG_LOOT", + "CHAT_MSG_SYSTEM", + "CHAT_MSG_SKILL", + "AuctionHouseFrame", + "CompactRaidFrameContainer", + "ChatFrame1", + "UIDropDownMenu_Initialize", + "UIDropDownMenu_AddButton", + "ToggleDropDownMenu", + "WorldMapFrame", + "RegisterUnitWatch", + "UnitFrame_OnEnter", + "BOOKTYPE_SPELL", + "DEFAULT_CHAT_FRAME", + "GameTooltipTextLeft1", + "CHAT_MSG_PARTY", + "CHAT_MSG_PARTY_LEADER", + "LFG_LIST_CONVERT_TO_RAID_WARNING", + "INVITE", + "CANCEL", + "UIDropDownMenu_SetText", + "HybridScrollFrame_CreateButtons", + "HybridScrollFrame_Update", + "SearchBoxTemplate_OnTextChanged", + "NORMAL_FONT_COLOR", + "GRAY_FONT_COLOR", + "StaticPopupSpecial_Show", + "StaticPopupSpecial_Hide", + "UIDropDownMenu_JustifyText", + "UIDropDownMenu_SetAnchor", + "NUM_LE_LFG_CATEGORYS", + "LFG_LIST_ENTER_NAME", + "nop", + "FILTER", + "LFGListApplicationDialog", + "LFG_LIST_APP_UNEMPOWERED", + "HIGHLIGHT_FONT_COLOR", + "WHISPER", + "LFG_LIST_MUST_SIGN_UP_TO_WHISPER", + "PVEFrame_ShowFrame", + "LFG_LIST_SELECT_A_CATEGORY", + "LFG_LIST_NOT_LEADER", + "LFG_LIST_MORE", + "LFG_LIST_MUST_HAVE_NAME", + "UIDropDownMenu_DisableDropDown", + "UIDropDownMenu_EnableDropDown", + "HybridScrollFrame_GetOffset", + "ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL", + "MAX_RAID_MEMBERS", + "LFG_LIST_PROVING_GROUND_TITLE", + "LFG_LIST_APP_CURRENTLY_APPLYING", + "LFG_LIST_MAX_MEMBERS", + "LFG_LIST_MUST_CHOOSE_SPEC", + "LFG_LIST_OFFLINE_MEMBER", + "LFG_LIST_SELECT_A_SEARCH_RESULT", + "BATTLENET_FONT_COLOR", + "EasyMenu", + "LFG_LIST_MUST_SELECT_ROLE", + "LFG_LIST_INVITED_TO_GROUP", + "GMError", + "LFG_LIST_ILVL_ABOVE_YOURS", + "LFG_LIST_HONOR_LEVEL_ABOVE_YOURS", + "LFG_LIST_LEGACY", + "LFG_LIST_CATEGORY_FORMAT", + "WHISPER_LEADER", + "LFG_LIST_REPORT_GROUP_FOR", + "LFG_LIST_REPORT_FOR", + "IGNORE_PLAYER", + "UIDropDownMenu_CreateInfo", + "PVEFrame_ToggleFrame", + "CANNOT_DO_THIS_WITH_LFGLIST_APP", + "CANNOT_DO_THIS_WHILE_LFGLIST_LISTED", + "NO_LFG_LIST_AVAILABLE", + "LFG_LIST_LOADING", + "LFG_LIST_RECOMMENDED_ILVL", + "LFG_LIST_ITEM_LEVEL_INSTR_SHORT", + "DONE_EDITING", + "LIST_GROUP", + "LFG_LIST_ITEM_LEVEL_CURRENT", + "GameFontHighlightSmall", + "GameFontDisableSmall", + "LE_PARTY_CATEGORY_HOME", + "LFG_LIST_INVITE_GROUP", + "LFG_LIST_APP_INVITED", + "LFG_LIST_APP_CANCELLED", + "LFG_LIST_APP_DECLINED", + "LFG_LIST_APP_TIMED_OUT", + "LFG_LIST_APP_INVITE_ACCEPTED", + "LFG_LIST_APP_INVITE_DECLINED", + "LFG_LIST_PROVING_TANK_GOLD", + "LFG_LIST_PROVING_TANK_SILVER", + "LFG_LIST_PROVING_TANK_BRONZE", + "LFG_LIST_PROVING_HEALER_GOLD", + "LFG_LIST_PROVING_HEALER_SILVER", + "LFG_LIST_PROVING_HEALER_BRONZE", + "LFG_LIST_PROVING_DAMAGER_GOLD", + "LFG_LIST_PROVING_DAMAGER_SILVER", + "LFG_LIST_PROVING_DAMAGER_BRONZE", + "SearchBoxTemplateClearButton_OnClick", + "LFG_LIST_ROLE_CHECK", + "LFG_LIST_PENDING", + "LFGListFrameDropDown", + "LE_LFG_LIST_DISPLAY_TYPE_CLASS_ENUMERATE", + "LFG_LIST_TOOLTIP_FRIENDS_IN_GROUP", + "LFG_LIST_BOSSES_DEFEATED", + "LFG_LIST_ENTRY_DELISTED", + "FRIENDS_BNET_NAME_COLOR_CODE", + "FRIENDS_WOW_NAME_COLOR_CODE", + "LFG_LIST_JOINED_GROUP_NOTICE", + "LFG_LIST_OFFLINE_MEMBER_NOTICE", + "GameFontRed", + "LFG_LIST_OFFLINE_MEMBER_NOTICE_GONE", + "GameFontGreen", + "LE_LFG_LIST_DISPLAY_TYPE_ROLE_COUNT", + "LE_LFG_LIST_DISPLAY_TYPE_ROLE_ENUMERATE", + "LE_LFG_LIST_DISPLAY_TYPE_PLAYER_COUNT", + "LE_LFG_LIST_DISPLAY_TYPE_HIDE_ALL", + "UIDropDownMenu_SetWidth", + "GetLFGMode", + "CANNOT_DO_THIS_WHILE_PVE_QUEUING", + "CANNOT_DO_THIS_IN_BATTLEGROUND", + "GREEN_FONT_COLOR", + "LFG_LIST_NO_RESULTS_FOUND", + "MAX_PARTY_MEMBERS", + "LFG_LIST_AND_MORE", + "RED_FONT_COLOR", + "PLAYER_LIST_DELIMITER", + "FONT_COLOR_CODE_CLOSE", + "RGBTableToColorCode", + "ChatFrame_SendTell", + "CANNOT_DO_THIS_WHILE_PVP_QUEUING", + "ChatTypeInfo", + "LFG_LIST_TOO_MANY_FOR_ACTIVITY", + "LFG_LIST_GROUP_TOO_FULL", + "LFG_LIST_INVITED_APP_FILLS_GROUP", + "UNIT_TYPE_LEVEL_TEMPLATE", + "LFG_LIST_HONOR_LEVEL_CURRENT_PVP", + "LFG_LIST_COMMENT_FORMAT", + "LFG_LIST_SEARCH_FAILED", + "LFG_LIST_HIT_MAX_APPLICATIONS", + "LFG_LIST_TOOLTIP_ILVL", + "LFG_LIST_TOOLTIP_HONOR_LEVEL", + "LFG_LIST_TOOLTIP_VOICE_CHAT", + "LFG_LIST_TOOLTIP_LEADER", + "LFG_LIST_TOOLTIP_AGE", + "LFG_LIST_TOOLTIP_MEMBERS_SIMPLE", + "LFG_LIST_TOOLTIP_MEMBERS", + "CANNOT_DO_THIS_IN_LFG_PARTY", + "CANNOT_DO_THIS_IN_PVE_QUEUE", + "LFG_LIST_TOOLTIP_CLASS_ROLE", + "LFG_LIST_BAD_NAME", + "LFG_LIST_BAD_DESCRIPTION", + "LFG_LIST_BAD_VOICE_CHAT_COMMENT", + "LFG_LIST_BAD_LEADER_NAME", + "LFG_LIST_APP_DECLINED_MESSAGE", + "LFG_LIST_APP_TIMED_OUT_MESSAGE", + "LE_FRAME_TUTORIAL_LFG_LIST", + "LFGListFrame", + "WeakAuras", + "enabled", + "C_Container" + ], + "Lua.diagnostics.disable": ["duplicate-doc-field"] } diff --git a/Complete Projects/Legion/PersonalCooldownAnnouncer/event.lua b/Complete Projects/Legion/PersonalCooldownAnnouncer/event.lua new file mode 100644 index 0000000..e263b39 --- /dev/null +++ b/Complete Projects/Legion/PersonalCooldownAnnouncer/event.lua @@ -0,0 +1,7 @@ +-- CYKA_EVENT_TICKER +function(e) + for _, spell in ipairs(aura_env.spells) do + ---@cast spell Spell + spell:Update() + end +end \ No newline at end of file diff --git a/Complete Projects/Legion/PersonalCooldownAnnouncer/event2.lua b/Complete Projects/Legion/PersonalCooldownAnnouncer/event2.lua new file mode 100644 index 0000000..10a4cf7 --- /dev/null +++ b/Complete Projects/Legion/PersonalCooldownAnnouncer/event2.lua @@ -0,0 +1,12 @@ +-- PLAYER_ENTERING_WORLD GUILD_ROSTER_UPDATE +function(e) + if aura_env.debug then print(string.format("Current ticker: %s", tostring(aura_env.ticker))) end + if aura_env.ticker == nil then + if aura_env.debug then print("Creating ticker") end + local aura_env = aura_env + aura_env.ticker = C_Timer.NewTicker(0.5, function() + if aura_env.debug then print("Ticker calling CYKA_EVENT_TICKER") end + WeakAuras.ScanEvents("CYKA_EVENT_TICKER") + end) + end +end \ No newline at end of file diff --git a/Complete Projects/Legion/PersonalCooldownAnnouncer/init.lua b/Complete Projects/Legion/PersonalCooldownAnnouncer/init.lua new file mode 100644 index 0000000..e6e5b2d --- /dev/null +++ b/Complete Projects/Legion/PersonalCooldownAnnouncer/init.lua @@ -0,0 +1,73 @@ +aura_env.debug = false +aura_env.ticker = nil + +---@class Spell +---@field name string +---@field id number +---@field isOnCooldown boolean +---@field announced boolean +---@field remaining number +Spell = { + ---@param id number + ---@param name string + ---@return Spell + new = function(id, name) + local self = setmetatable({}, { + __index = Spell + }) + self.id = id + self.name = name + self.isOnCooldown = false + self.announced = false + self.remaining = 0 + return self + end, + + ---@param self Spell + Update = function(self) + local start, duration = GetSpellCooldown(self.id) + local isOnCooldown = start > 0 and duration > 3 + local remaining = start + duration - GetTime() + + if not isOnCooldown and self.isOnCooldown then + self:playComplete() + self.announced = false + end + if not self.announced and isOnCooldown and remaining < 10 then + self:playSoon() + self.announced = true + end + + self.isOnCooldown = isOnCooldown + self.remaining = remaining + end, + + ---@param self Spell + playComplete = function(self) + local soundFile = string.format("Interface\\Sounds\\cooldown\\%s.ogg", self.name) + if aura_env.debug then print(string.format("%s is off cooldown, playing sound file at %s", self.name, soundFile)) end + local success = PlaySoundFile(soundFile, "Master") + if not success then + print(string.format("Failed to play sound for %s", self.name)) + end + end, + + ---@param self Spell + playSoon = function(self) + local soundFile = string.format("Interface\\Sounds\\cooldown\\%sSoon.ogg", self.name) + if aura_env.debug then print(string.format("%s is almost off cooldown, playing sound file at %s", self.name, soundFile)) end + local success = PlaySoundFile(soundFile, "Master") + if not success then + print(string.format("Failed to play sound for %s", self.name)) + end + end +} + +aura_env.spells = { + Spell.new(107574, "Avatar"), + Spell.new(1719, "BattleCry"), + Spell.new(205545, "OdynsFury"), + Spell.new(26297, "Berserking"), + Spell.new(12292, "Bloodbath"), + Spell.new(23881, "Bloodthirst") +}