ESO Lua File v100012

ingame/contacts/gamepad/zo_socialoptionsdialog_gamepad.lua

[◄ back to folders ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
--------------------------------------------
-- SocialOptionsDialog Gamepad
--------------------------------------------
ZO_SocialOptionsDialogGamepad = ZO_Object:Subclass()
function ZO_SocialOptionsDialogGamepad:ShowOptionsDialog()
    local parametricList = {}
    self:BuildOptionsList(parametricList)
    local data = {
        parametricList = parametricList,
    }
    ZO_Dialogs_ShowGamepadDialog("GAMEPAD_SOCIAL_OPTIONS_DIALOG", data)
end
function ZO_SocialOptionsDialogGamepad:BuildOptionsList(list)
    -- This function is meant to be overridden by a subclass
end
function ZO_SocialOptionsDialogGamepad:BuildOptionEntry(header, label, callback, finishedCallback)
    local entry = {
        template = "ZO_GamepadMenuEntryTemplate",
        templateData = {
            text = GetString(label),
            setup = ZO_SharedGamepadEntry_OnSetup,
            callback = callback,
            finishedCallback = finishedCallback,
        },
    }
    return entry
end
function ZO_SocialOptionsDialogGamepad:AddHeader(list, header)
    list.header = header
end
function ZO_SocialOptionsDialogGamepad:AddOption(list, option)
    if option == nil then 
        return 
    end
    if list.header then
        option.header = list.header
        list.header = nil
    end
    table.insert(list, option)
end
function ZO_SocialOptionsDialogGamepad:SetupOptions(socialData)
    self.socialData = socialData
end
--Shared Options
function ZO_SocialOptionsDialogGamepad:BuildEditNoteOption()
    local callback = function()
        local data = {
            displayName = self.socialData.displayName,
            note = self.socialData.note,
            noteChangedCallback = self.noteChangedCallback,
        }
        ZO_Dialogs_ShowGamepadDialog("GAMEPAD_SOCIAL_EDIT_NOTE_DIALOG", data)
    end
    return self:BuildOptionEntry(nil, SI_SOCIAL_MENU_EDIT_NOTE, callback)
end
function ZO_SocialOptionsDialogGamepad:BuildSendMailOption()
    local function Callback()
        if IsUnitDead("player") then
            ZO_AlertEvent(EVENT_UI_ERROR, SI_CANNOT_DO_THAT_WHILE_DEAD)
        elseif IsUnitInCombat("player") then
            ZO_AlertEvent(EVENT_UI_ERROR, SI_CANNOT_DO_THAT_WHILE_IN_COMBAT)
        else
            MAIL_MANAGER_GAMEPAD:GetSend():ComposeMailTo(self.socialData.displayName)
        end
    end
    return self:BuildOptionEntry(nil, SI_SOCIAL_MENU_SEND_MAIL, nil, Callback)
end
function ZO_SocialOptionsDialogGamepad:BuildWhisperOption()
    local finishCallback = function() StartChatInput("", CHAT_CHANNEL_WHISPER, self.socialData.displayName) end
    return self:BuildOptionEntry(nil, SI_SOCIAL_LIST_PANEL_WHISPER, nil, finishCallback)
end
function ZO_SocialOptionsDialogGamepad:ShouldAddInviteToGroupOption()
    return self.playerAlliance == self.socialData.alliance
end
function ZO_SocialOptionsDialogGamepad:GetInviteToGroupCallback()
    return function()
        local NOT_SENT_FROM_CHAT = false
        local DISPLAY_INVITED_MESSAGE = true
        TryGroupInviteByName(self.socialData.displayName, NOT_SENT_FROM_CHAT, DISPLAY_INVITED_MESSAGE)
    end
end
function ZO_SocialOptionsDialogGamepad:BuildInviteToGroupOption()
    if self:ShouldAddInviteToGroupOption() then
        return self:BuildOptionEntry(nil, SI_SOCIAL_MENU_INVITE, self:GetInviteToGroupCallback())
    end
end
function ZO_SocialOptionsDialogGamepad:BuildTravelToPlayerOption(jumpFunc)
    if self.playerAlliance == self.socialData.alliance then
        local callback = function()
            jumpFunc(DecorateDisplayName(self.socialData.displayName))
            SCENE_MANAGER:ShowBaseScene()
        end
        return self:BuildOptionEntry(nil, SI_SOCIAL_MENU_JUMP_TO_PLAYER, callback)
    end
end
function ZO_SocialOptionsDialogGamepad:BuildGamerCardOption()
    if IsConsoleUI() then
        local callback = function()
            if(self.socialData.friendIndex) then
                --To make sure we use the correct index if friends list was updated while the dialog is being displayed.
                local updatedData = FRIENDS_LIST_MANAGER:FindDataByDisplayName(self.socialData.displayName)
                if(updatedData) then
                    ZO_ShowGamerCardFromDisplayNameOrFallback(self.socialData.displayName, ZO_ID_REQUEST_TYPE_DISPLAY_NAME, self.socialData.displayName)
                end
            elseif(self.socialData.ignoreIndex) then
                ZO_ShowGamerCardFromDisplayNameOrFallback(self.socialData.displayName, ZO_ID_REQUEST_TYPE_IGNORE_INFO, self.socialData.ignoreIndex)
            elseif(self.socialData.isGroup) then
                ZO_ShowGamerCardFromDisplayNameOrFallback(self.socialData.displayName, ZO_ID_REQUEST_TYPE_GROUP_INFO, self.socialData.index)
            else
                ZO_Dialogs_ShowGamepadDialog("GAMERCARD_UNAVAILABLE")
            end
        end
        return self:BuildOptionEntry(nil, GetGamerCardStringId(), callback)
    end
    return nil
end
function ZO_SocialOptionsDialogGamepad:BuildInviteToGameOption()
    if IsConsoleUI() and GetUIPlatform() == UI_PLATFORM_PS4 then
        local callback = function()
            local accountName = UndecorateDisplayName(self.socialData.displayName)
            if(accountName) then
                TriggerSendOrbisFriendInviteDialog(accountName)
            end
        end
        return self:BuildOptionEntry(nil, SI_ORBIS_OPEN_INVITE_DIALOG, callback)
    end
end
function ZO_SocialOptionsDialogGamepad:BuildIgnoreOption()
    local stringId
    local callback
    if GetUIPlatform() == UI_PLATFORM_PC then
        stringId = SI_FRIEND_MENU_IGNORE
        callback = function()
            ZO_Dialogs_ShowGamepadDialog("CONFIRM_IGNORE_FRIEND", self.socialData, {mainTextParams={ ZO_FormatUserFacingDisplayName(self.socialData.displayName) }}) 
        end
    elseif ZO_DoesConsoleSupportTargetedIgnore() then
        stringId = SI_GAMEPAD_CONTACTS_MENU_IGNORE
        callback = function()
            ZO_ShowConsoleIgnoreDialogFromDisplayNameOrFallback(self.socialData.displayName, ZO_ID_REQUEST_TYPE_FRIEND_INFO, self.socialData.friendIndex)
        end
    end
    if stringId and callback then
        return self:BuildOptionEntry(nil, stringId, callback)
    end
    return nil
end
function ZO_SocialOptionsDialogGamepad:BuildRemoveFriendOption()
    local callback = function() 
        ZO_Dialogs_ShowGamepadDialog("CONFIRM_REMOVE_FRIEND", self.socialData, {mainTextParams={ZO_FormatUserFacingDisplayName(self.socialData.displayName)}}) 
    end
    return self:BuildOptionEntry(nil, SI_FRIEND_MENU_REMOVE_FRIEND, callback)
end
function ZO_SocialOptionsDialogGamepad:BuildRemoveIgnoreOption()
    local callback = function() 
        RemoveIgnore(self.socialData.displayName)
        PlaySound(SOUNDS.DIALOG_ACCEPT)
    end
    return self:BuildOptionEntry(nil, SI_IGNORE_MENU_REMOVE_IGNORE, callback)
end
function ZO_SocialOptionsDialogGamepad:BuildAddFriendOption()
    local callback = function()      
        if IsConsoleUI() then
            local displayName = self.socialData.displayName
            ZO_ShowConsoleAddFriendDialogFromDisplayName(displayName)
        else
            local data = { displayName = self.socialData.displayName, }
            ZO_Dialogs_ShowGamepadDialog("GAMEPAD_SOCIAL_ADD_FRIEND_DIALOG", data)
        end
    end
    return self:BuildOptionEntry(nil, SI_SOCIAL_MENU_ADD_FRIEND, callback)
end