--[[-- ETII.ETIIEmoteData integer description [1] = string slashName [2] = number EmoteCategory category [3] = number emoteId [4] = string displayName [5] = boolean showInGamepadUI --]]-- ESOTheatreII = { Name = "ESOTheatreII", Title = "ESO Theatre II", Author = "Halja, II by AnotherFoxGuy", Version = "2.1.0", SV = "ESOTheatreIISavedVariables", SVersion = "2.1.0", CurrentSVars = {}, } local ETII = ESOTheatreII ETII.ETIIEmoteData = {} ETII.ETIIEmoteCategory = { [0] = "ceremonial", [1] = "cheers and jeers", [2] = "collected", [3] = "deprecated", [4] = "emotion", [5] = "entertainment", [6] = "food and drink", [7] = "give directions", [8] = "invalid", [9] = "perpetual", [10] = "personality override", [11] = "physical", [12] = "poses and fidgets", [13] = "prop", [14] = "social", [15] = "all" } local TransparentFlag = false local LastKnownTarget = nil local verboseFlag = false local lastEmote = { Name = "", ID = 0, } function ETII.GetEmoteData() local edat for i = 1, GetNumEmotes() do edat = { GetEmoteInfo(i) } ETII.ETIIEmoteData[i] = edat end end function ETII.GetLastEmote() return lastEmote end function ETII.SetLastEmote(name, id) lastEmote.Name = name lastEmote.ID = id end function ETII.GetLastKnownTarget() return LasstKnownTarget end function ETII.IsVerbose() if (verboseFlag ~= nil) then return verboseFlag else return false end end local function PlayerTargetOnChange() local name = GetUnitName("reticleover") local caption = GetUnitCaption("reticleover") if DoesUnitExist('reticleover') then --if IsUnitPlayer('reticleover') then if (name ~= LastKnownTarget) then LastKnownTarget = name if ETII.IsVerbose() then ETII.PrintSystemChat( "New Target: "..name ) end end --end end end function ETII.PrintSystemChat( text ) if (type(text) ~= string) then text = tostring(text) end --d( text ) CHAT_SYSTEM:AddMessage(text) end function ETII.EmptyTable( aTable ) for k, v in pairs (aTable) do aTable[k] = nil end end function ETII.TableSize( aTable ) -- # shortcut for lua table count is not always working? local count = 0 for k in pairs (aTable) do count = count + 1 end return count end function ETII.IsString(obj) return type(obj) == 'string' end function ETII.IsNumber(obj) return type(obj) == 'number' end function ETII.GetTransparentFlag() return TransparentFlag end function ETII.SetTransparentFlag() TransparentFlag = not TransparentFlag if ETII.IsVerbose()then ETII.PrintSystemChat(TransparentFlag) end local TransparencyLevel = tonumber(ETII.CurrentSVars.UserSettings.TransparencyLevel) if (TransparencyLevel < 1) then TransparencyLevel = 1 end if (TransparencyLevel > 100) then TransparencyLevel = 100 end TransparencyLevel = (TransparencyLevel / 100) local mainFrame = GetControl("TheatreFrame") local configFrame = GetControl("PlaybillFrame") if TransparentFlag then mainFrame:SetAlpha(1) configFrame:SetAlpha(1) else mainFrame:SetAlpha(TransparencyLevel) configFrame:SetAlpha(TransparencyLevel) end end function ETII.EmoteIdByName(aname) local id = -1 local tblemote = ETII.ETIIEmoteData for k, v in pairs (tblemote) do if (aname == v[4]) then id = v[3] end end return id end function ETII.CategoryIdByName(aname) local id = 0 local tblCategory = ETII.ETIIEmoteCategory for k in pairs (tblCategory) do if (aname == tblCategory[k]) then id = k end end return id end function ETII.EmoteNameByID(id) local name = "" local tblemote = ETII.ETIIEmoteData for k, v in pairs (tblemote) do if (id == v[3]) then name = v[4] end end return name end function ETII.PlayEmoteByName(name) local emoteid = ETII.EmoteIdByName(name) if (emoteid > 0) then PlayEmoteByIndex(GetEmoteIndex(emoteid)) if ETII.IsVerbose() then ETII.PrintSystemChat( "Playing "..name.." By Name") end ETII.SetLastEmote(name, emoteid) end end function ETII.PlayEmoteByID(id) PlayEmoteByIndex(GetEmoteIndex(id)) if ETII.IsVerbose() then ETII.PrintSystemChat( "Playing "..ETII.EmoteNameByID(id) .." By ID") end ETII.SetLastEmote(eName, ID) end local function ShouldHideAddon() local CompassIsHidden = ZO_CompassFrame:IsHidden() if (CompassIsHidden and IsReticleHidden() ) then ESOTheatreII:Hide() ESOEmotesListGUI:Hide() else --There is a variable in the class to check that it should really become visible. ESOTheatreII:Show() end end function ETII.ToggleAddon() ETII.ESOFavoritesGUI:ToggleWindow() end function ETII.ToggleEmotesWindow() ETII.ESOEmotesListGUI:ToggleWindow() end function ETII.QuickEmotes( btnNumber ) local emotename = ETII.ESOFavoritesGUI:GetFavoriteButtonEmote( btnNumber ) if (emotename ~= nul) then ETII.PlayEmoteByName(emotename) end end function ETII.RandomEmote() local randomIndex = math.random(1, GetNumEmotes()) local randomEmote = { GetEmoteInfo(randomIndex) } ETII.PrintSystemChat( "Playing "..randomEmote[4]) PlayEmoteByIndex(randomIndex) end local function ReloadRawTable() ETII.CurrentSVars.RawTable = {} for i = 1, GetNumEmotes() do d(GetEmoteInfo(i)) end ETII.CurrentSVars.RawTable = ETII.ETIIEmoteData end local function ReloadAddOnDefaults() local size = ETII.TableSize(ETII.FavoriteTable) if ( size > 0) then if ETII.IsVerbose() then ETII.PrintSystemChat("Starting reset...") end ETII.EmptyTable( ETII.CurrentSVars.FavoriteTable ) ETII.EmptyTable( ETII.CurrentSVars.RawTable ) ETII.EmptyTable( ETII.CurrentSVars.UserSettings ) ETII.CurrentSVars.UserSettings = ETII.UserSettings ETII.CurrentSVars.FavoriteTable = ETII.FavoriteTable ETII.CurrentSVars.RawTable = {} ETII.ESOFavoritesGUI.ReLoadFavoriteButtons() local x = ETII.CurrentSVars.UserSettings.StageLocation.Xoffset local y = ETII.CurrentSVars.UserSettings.StageLocation.Yoffset ETII.ESOFavoritesGUI:MoveWindow( x, y ) x = ETII.CurrentSVars.UserSettings.PlaybillLocation.Xoffset y = ETII.CurrentSVars.UserSettings.PlaybillLocation.Yoffset ETII.ESOEmotesListGUI:MoveWindow( x, y ) if ETII.IsVerbose() then ETII.PrintSystemChat("Reset Done") end end end local function OnAddSlashCommand( ... ) --only parsing the first argument local arg1 = select(1, ...) if ( arg1 ~= nil and arg1 ~= "") then if ETII.IsVerbose() then ETII.PrintSystemChat( arg1 ) end if (arg1 == "-help" or arg1 == "-h"or arg1 == "-?") then ETII.PrintSystemChat(ETII.Name.." Slash Commands") ETII.PrintSystemChat("******************************************") ETII.PrintSystemChat("/esotheatre : Display emote window") ETII.PrintSystemChat("/et : Alias to display emote window") ETII.PrintSystemChat("/et -< Options >") ETII.PrintSystemChat("/et -help : This message") -- ETII.PrintSystemChat("/et -enumsys : Pulls system emotes and copies to SavedVariables file") ETII.PrintSystemChat("/et -reload : Reloads Add-on default to SavedVariables file") ETII.PrintSystemChat("/et -repin : Reset main window position to top left corner") ETII.PrintSystemChat("/et #### Plays the games emote id") ETII.PrintSystemChat("/et -f## Plays the emote based on the favorite's button number i.e. /et -f9 plays the emote you assigned to button 9.") ETII.PrintSystemChat("******************************************") end if arg1 == "-enumsys" then ReloadRawTable() end if arg1 == "-reload" then ReloadAddOnDefaults() end if arg1 == "-repin" then ETII.ESOFavoritesGUI:MoveWindow( 30, 20 ) ETII.ESOEmotesListGUI:MoveWindow( 360, 20 ) end if (string.sub(string.upper(arg1), 1, 2) == "-F") then local btnNumber = string.sub(arg1, 3) local emotename = ETII.ESOFavoritesGUI:GetFavoriteButtonEmote( btnNumber ) if (emotename ~= nul) then --No error checking just tossing over the fence :P ETII.PlayEmoteByName(emotename) end end if arg1 == "-v" then if ETII.IsVerbose() then verboseFlag = false else verboseFlag = true end end local emoteid = tonumber(arg1) if (emoteid ~= nul and ETII.IsNumber(emoteid) == true) then ETII.PlayEmoteByID(emoteid) else --No error checking just tossing over the fence :P ETII.PlayEmoteByName(arg1) end else ETII.ESOFavoritesGUI:OnSlashCommand() end end function ETII.AddonInitialized( self ) ETII.ESOFavoritesGUI:Initialize() ETII.ESOFavoritesGUI:Hide() ETII.ESOEmotesListGUI:Initialize() local control = GetControl("PlaybillFrame") control:SetHidden( true ) end local function OnAddOnLoaded(eventCode, addOnName) if (addOnName == ETII.Name) then ETII.GetEmoteData() local defaultSV = { ["FavoriteTable"] = { }, ["RawTable"] = { }, ["UserSettings"] = { }, } defaultSV.UserSettings = ETII.UserSettings defaultSV.FavoriteTable = ETII.FavoriteTable --initialize saved variables --if ( EmotesAccountWide == 1 ) then ETII.CurrentSVars = ZO_SavedVars:NewAccountWide(ETII.SV, ETII.SVersion, "Session", defaultSV) --else --ETII.CurrentSVars = ZO_SavedVars:New(ETII.SV, ETII.SVersion, "Session", defaultSV) --end --Initialize Slash commands SLASH_COMMANDS["/esotheatre"] = function( ... ) OnAddSlashCommand( ... ) end SLASH_COMMANDS["/et"] = function( ... ) OnAddSlashCommand( ... ) end ETII.ESOFavoritesGUI:LoadFavoriteButtons() local x = ETII.CurrentSVars.UserSettings.StageLocation.Xoffset local y = ETII.CurrentSVars.UserSettings.StageLocation.Yoffset ETII.ESOFavoritesGUI:MoveWindow( x, y ) x = ETII.CurrentSVars.UserSettings.PlaybillLocation.Xoffset y = ETII.CurrentSVars.UserSettings.PlaybillLocation.Yoffset ETII.ESOEmotesListGUI:MoveWindow( x, y ) ETII.ESOEmotesListGUI:LoadCategoryFilters() ETII.ESOEmotesListGUI:FillScrollList() end end function ETII.TestFoo() ---A Placeholder for trying stuff ETII.ESOEmotesListGUI:FillScrollList() if ETII.IsVerbose() then ETII.PrintSystemChat( "Done :D" ) end end EVENT_MANAGER:RegisterForEvent(ETII.Name, EVENT_ADD_ON_LOADED, OnAddOnLoaded) --EVENT_MANAGER:RegisterForEvent(ETII.Name, EVENT_RETIIICLE_HIDDEN_UPDATE, ShouldHideAddon) --also fires when main game main menu is triggered EVENT_MANAGER:RegisterForEvent(ETII.Name, EVENT_RETIIICLE_TARGETII_CHANGED, PlayerTargetOnChange) ZO_CreateStringId("SI_BINDING_NAME_DISPLAY_ESOTHEATER", "Display ESO Theatre Reloaded") ZO_CreateStringId("SI_BINDING_NAME_DISPLAY_EMOTES", "Display Emotes |c888855( All )|r") ZO_CreateStringId("SI_BINDING_NAME_QUICK_EMOTE_01", "Emote Favorite 01") ZO_CreateStringId("SI_BINDING_NAME_QUICK_EMOTE_02", "Emote Favorite 02") ZO_CreateStringId("SI_BINDING_NAME_QUICK_EMOTE_03", "Emote Favorite 03") ZO_CreateStringId("SI_BINDING_NAME_QUICK_EMOTE_04", "Emote Favorite 04") ZO_CreateStringId("SI_BINDING_NAME_QUICK_EMOTE_05", "Emote Favorite 05") ZO_CreateStringId("SI_BINDING_NAME_QUICK_EMOTE_06", "Emote Favorite 06") ZO_CreateStringId("SI_BINDING_NAME_QUICK_EMOTE_07", "Emote Favorite 07") ZO_CreateStringId("SI_BINDING_NAME_QUICK_EMOTE_08", "Emote Favorite 08") ZO_CreateStringId("SI_BINDING_NAME_QUICK_EMOTE_09", "Emote Favorite 09") ZO_CreateStringId("SI_BINDING_NAME_QUICK_EMOTE_10", "Emote Favorite 10") ZO_CreateStringId("SI_BINDING_NAME_RANDOM_EMOTE", "Play Random Emote") ETII.FavoriteTable = { [1] = { ["EmoteName"] = "Hello", ["ID"] = 137, }, [2] = { ["EmoteName"] = "Congratulate", ["ID"] = 143, }, [3] = { ["EmoteName"] = "Sit chair", ["ID"] = 100, }, [4] = { ["EmoteName"] = "Eat apple", ["ID"] = 178, }, [5] = { ["EmoteName"] = "Drinking from flagon", ["ID"] = 8, }, [6] = { ["EmoteName"] = "Play dead", ["ID"] = 115, }, [7] = { ["EmoteName"] = "Dust off", ["ID"] = 80, }, [8] = { ["EmoteName"] = "Dance", ["ID"] = 72, }, [9] = { ["EmoteName"] = "Dance drunk", ["ID"] = 79, }, [10] = { ["EmoteName"] = "Play lute", ["ID"] = 5, }, } ESOTheatreII.TweaksUI = { ["MainWindow"] = { ["WindowWidth"] = 305, ["WindowHeight"] = 215, ["ButtonBaseOffsetX"] = 2, ["ButtonBaseOffsetY"] = 1, ["ButtonRelativeOffsetX"] = 140, ["ButtonRelativeOffsetY"] = 35, ["ButtonSize"] = 150, }, ["EmoteConfigWindow"] = { ["WindowMinWidth"] = 250, ["WindowMinHeight"] = 750, ["ButtonSize"] = 250, ["WindowMaxWidth"] = 265, ["WindowMaxHeight"] = 750, }, }