Back to Home

ESO Lua File v100019

ingame/instancekickwarning/instancekickwarning.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
-- ZO_InstanceKickWarning Base Object
local ZO_InstanceKickWarning = ZO_Object:Subclass()
function ZO_InstanceKickWarning:New(control)
    local instanceKickWarning = ZO_Object.New(self)
    instanceKickWarning:Initialize(control)
    return instanceKickWarning
end
do
    local INSTANCE_KICK_KEYBOARD_STYLE =
    {
        font = "ZoFontWinH2",
    }
    local INSTANCE_KICK_GAMEPAD_STYLE =
    {
        font = "ZoFontGamepad34",
    }
    function ZO_InstanceKickWarning:ApplyPlatformStyle(style)
        self.kickLabel:SetFont(style.font)
    end
    function ZO_InstanceKickWarning:Initialize(control)
        self.control = control
        local function OnPlayerActivated()
            local timeRemaining, totalTime = GetInstanceKickTime()
            self:OnInstanceKickTimeUpdate(timeRemaining, totalTime)
        end
        local function OnInstanceKickTimeUpdate(event, timeRemaining, totalTime)
            if not timeRemaining then
                timeRemaining, totalTime = GetInstanceKickTime()
            elseif not totalTime then
                totalTime = timeRemaining
            end
            self:OnInstanceKickTimeUpdate(timeRemaining, totalTime)
        end
        local function OnGroupInviteUpdate()
            self:UpdateVisibility()
        end
        self.control:RegisterForEvent(EVENT_PLAYER_ACTIVATED, OnPlayerActivated)
        self.control:RegisterForEvent(EVENT_INSTANCE_KICK_TIME_UPDATE, OnInstanceKickTimeUpdate)
        self.control:RegisterForEvent(EVENT_GROUP_INVITE_RECEIVED, OnGroupInviteUpdate)
        self.control:RegisterForEvent(EVENT_GROUP_INVITE_REMOVED, OnGroupInviteUpdate)
        local container = self.control:GetNamedChild("Container")
        self.timerCooldown = container:GetNamedChild("Timer")
        self.timerCooldown:SetNumWarningSounds(5)
        self.kickLabel = container:GetNamedChild("Text")
        ZO_PlatformStyle:New(function(...) self:ApplyPlatformStyle(...) end, INSTANCE_KICK_KEYBOARD_STYLE, INSTANCE_KICK_GAMEPAD_STYLE)
        if IsPlayerActivated() then
            OnInstanceKickTimeUpdate()
        end
    end
end
function ZO_InstanceKickWarning:OnInstanceKickTimeUpdate(timeRemaining, totalTime)
    if timeRemaining and totalTime and timeRemaining > 0 and totalTime > 0 then
        self.timerCooldown:Start(timeRemaining)
        self.kickPending = true
        self:UpdateVisibility()
        
        -- give an alert text to explain why being removed from the instance
        if(IsUnitGrouped("player")) then
            ZO_Alert(UI_ALERT_CATEGORY_ALERT, SOUNDS.GENERAL_ALERT_ERROR, GetString(SI_INSTANCE_KICK_WARNING_GROUPED))
        else
            ZO_Alert(UI_ALERT_CATEGORY_ALERT, SOUNDS.GENERAL_ALERT_ERROR, GetString(SI_INSTANCE_KICK_WARNING_UNGROUPED))
        end
    else
        self.timerCooldown:Stop()
        self.kickPending = false
        self:UpdateVisibility()
    end
end
function ZO_InstanceKickWarning:SetHidden(hidden)
    self.control:SetHidden(hidden)
end
-- ZO_InstanceKickWarning_Alive...Used when the player is alive (in shared info area)
local ZO_InstanceKickWarning_Alive = ZO_InstanceKickWarning:Subclass()
function ZO_InstanceKickWarning_Alive:Initialize(control)
    ZO_InstanceKickWarning.Initialize(self, control)
    SHARED_INFORMATION_AREA:AddInstanceKick(self)
end
function ZO_InstanceKickWarning_Alive:UpdateVisibility()
    local groupInviterName = GetGroupInviteInfo()
    local hasInvitePending = groupInviterName ~= ""
    local hideKickWarning = hasInvitePending or not self.kickPending
    SHARED_INFORMATION_AREA:SetHidden(self, hideKickWarning)
end
-- ZO_InstanceKickWarning_Dead...Used when the player is dead
local ZO_InstanceKickWarning_Dead = ZO_InstanceKickWarning:Subclass()
function ZO_InstanceKickWarning_Dead:Initialize(control)
    self.hiddenReasons = ZO_HiddenReasons:New()
    ZO_InstanceKickWarning.Initialize(self, control)
end
function ZO_InstanceKickWarning_Dead:UpdateVisibility()
    self:SetHiddenForReason("kickPending", not self.kickPending)
end
function ZO_InstanceKickWarning_Dead:RefreshVisible()
    self:SetHidden(self.hiddenReasons:IsHidden())
end
function ZO_InstanceKickWarning_Dead:SetHiddenForReason(reason, hidden)
    if self.hiddenReasons:SetHiddenForReason(reason, hidden) then
        self:RefreshVisible()
    end
end
-- Global functions
    INSTANCE_KICK_WARNING_ALIVE = ZO_InstanceKickWarning_Alive:New(control)
end
    INSTANCE_KICK_WARNING_DEAD = ZO_InstanceKickWarning_Dead:New(control)
end