Back to Home

ESO Lua File v101041

ingame/slashcommands/slashcommandautocomplete.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
SlashCommandAutoComplete = ZO_AutoComplete:Subclass()
function SlashCommandAutoComplete:New(...)
    return ZO_AutoComplete.New(self, ...)
end
function SlashCommandAutoComplete:Initialize(editControl, ...)
    ZO_AutoComplete.Initialize(self, editControl, ...)
    self.possibleMatches = {}
    self:SetUseCallbacks(true)
    self:SetAnchorStyle(AUTO_COMPLETION_ANCHOR_BOTTOM)
    self:SetOwner(SLASH_COMMANDS)
    self:SetKeepFocusOnCommit(true)
    local function OnAutoCompleteEntrySelected(name, selectionMethod)
        editControl:SetText(name)
    end
    self:RegisterCallback(ZO_AutoComplete.ON_ENTRY_SELECTED, OnAutoCompleteEntrySelected)
    ZO_PreHook("ZO_ChatTextEntry_PreviousCommand", function(...)
        if not IsShiftKeyDown() and self:IsOpen() then
            local index = self:GetAutoCompleteIndex()
            if not index or index > 1 then
                self:ChangeAutoCompleteIndex(-1)
                return true
            end
        end
    end)
    ZO_PreHook("ZO_ChatTextEntry_NextCommand", function(...)
        if not IsShiftKeyDown() and self:IsOpen() then
            local index = self:GetAutoCompleteIndex()
            if not index or index < self:GetNumAutoCompleteEntries() then
                self:ChangeAutoCompleteIndex(1)
                return true --Handled
            end
        end
    end)
    local function OnEmoteSlashCommandsUpdated()
    end
    PLAYER_EMOTE_MANAGER:RegisterCallback("EmoteSlashCommandsUpdated", OnEmoteSlashCommandsUpdated)
end
function SlashCommandAutoComplete:InvalidateSlashCommandCache()
    self.possibleMatches = {}
end
function SlashCommandAutoComplete:AddCommandsToPossibleResults(tableOfCommands)
    if tableOfCommands == nil then
        return
    end
    for command, info in pairs(tableOfCommands) do
        if #command > 0 then
            self.possibleMatches[command:lower()] = command
            -- add in the command aliases, if any, as well
            if info.aliases then
                for index, alias in ipairs(info.aliases) do
                    self.possibleMatches[alias:lower()] = alias
                end
            end
        end
    end
end
function SlashCommandAutoComplete:GetAutoCompletionResults(text)
    if #text < 3 then
        return
    end
    local startChar = text:sub(1, 1)
    if startChar ~= "/" and startChar ~= "]" then
        return
    end
    if text:find(" ", 1, true) then
        return
    end
    if next(self.possibleMatches) == nil then
        for command in pairs(SLASH_COMMANDS) do
            if #command > 0 then
                self.possibleMatches[command:lower()] = command
            end
        end
        if BRACKET_COMMANDS then
            for command in pairs(BRACKET_COMMANDS) do
                if #command > 0 then
                    self.possibleMatches[command:lower()] = command
                end
            end
        end
        self:AddCommandsToPossibleResults(ZO_REGIONCOMMANDS)
        self:AddCommandsToPossibleResults(ZO_CLIENTCOMMANDS)
        local switchLookup = ZO_ChatSystem_GetChannelSwitchLookupTable()
        for channelId, switchString in ipairs(switchLookup) do
            self.possibleMatches[switchString:lower()] = switchString
        end
    end
    local results = GetTopMatchesByLevenshteinSubStringScore(self.possibleMatches, text, 2, self.maxResults)
    if results then
        return unpack(results)
    end
    return nil
end