local Inviter = { started = false, message = "x", kickList = {} } function Inviter:Kick() if not Inviter.started then return end for name, data in pairs(Inviter.kickList) do if data ~= nil and (data.added == 0 or GetTimeStamp() - data.added > LeoDolmenRunner.settings.inviter.kickDelay) then for i = 1, GetGroupSize() do local tag = GetGroupUnitTagByIndex(i) if GetUnitName(tag) == name then LeoDolmenRunner.log("Kicking " .. name) GroupKick(tag) break end end Inviter.kickList[name] = nil end end end function Inviter:CheckOfflines() if not Inviter.started then return end for i = 1, GetGroupSize() do local unitTag = GetGroupUnitTagByIndex(i) local name = GetUnitName(unitTag) if not IsUnitOnline(unitTag) and Inviter.kickList[name] == nil then LeoDolmenRunner.debug("Adding " .. name .. " to kick list") Inviter.kickList[name] = { unitTag = unitTag, added = GetTimeStamp() } elseif IsUnitOnline(unitTag) and Inviter.kickList[name] ~= nil then LeoDolmenRunner.debug("Removing " .. name .. " from kick list, back online") Inviter.kickList[name] = nil end if self:IsPlayerInBlacklist(name) then Inviter.kickList[name] = { unitTag = unitTag, added = 0 } end end end function Inviter:Update(tick) if not Inviter.started or not IsUnitSoloOrGroupLeader("player") or tick ~= 5 then return end self:CheckOfflines() self:Kick() end function Inviter:ChatMessage(type, from, message) if not Inviter.started or not IsUnitSoloOrGroupLeader("player") then return end if GetGroupSize() >= LeoDolmenRunner.settings.inviter.maxSize then return end if type ~= CHAT_CHANNEL_SAY and type ~= CHAT_CHANNEL_YELL and type ~= CHAT_CHANNEL_ZONE and type ~= CHAT_CHANNEL_ZONE_LANGUAGE_1 and type ~= CHAT_CHANNEL_ZONE_LANGUAGE_2 and type ~= CHAT_CHANNEL_ZONE_LANGUAGE_3 and type ~= CHAT_CHANNEL_ZONE_LANGUAGE_4 then return end if message ~= Inviter.message or from == nil or from == "" then return end from = from:gsub("%^.+", "") if self:IsPlayerInBlacklist(from) then LeoDolmenRunner.log("Can't invite " .. from .. ": in the blacklist") return end LeoDolmenRunner.log(zo_strformat("Inviting <<1>>", from)) GroupInviteByName(from) end function Inviter:StartStop() if not Inviter.started then Inviter:Start() else Inviter:Stop() end end function Inviter:Stop() LeoDolmenRunner.log("Stopping auto invite") Inviter.started = false EVENT_MANAGER:UnregisterForEvent(LeoDolmenRunner.name, EVENT_CHAT_MESSAGE_CHANNEL) LeoDolmenRunnerWindowInviterPanelStartStopLabel:SetText("Start") end local orig_GroupListRow_OnMouseUp = ZO_GroupListRow_OnMouseUp function ZO_GroupListRow_OnMouseUp(control, button, upInside) orig_GroupListRow_OnMouseUp(control, button, upInside) if button == MOUSE_BUTTON_INDEX_RIGHT and upInside then AddMenuItem("LDR: Add to blacklist", function() local data = ZO_ScrollList_GetData(control) LeoDolmenRunner.log("Adding " .. data.characterName .. " to the blacklist") table.insert(LeoDolmenRunner.settings.inviter.blacklist, data.characterName) end) ShowMenu(control) end end function Inviter:DisplayBlacklist(name) LeoDolmenRunner.log("Blacklist:") for i, char in ipairs(LeoDolmenRunner.settings.inviter.blacklist) do d(tostring(i) .. ") " .. char) end end function Inviter:ClearBlacklist() LeoDolmenRunner.log("Clearing the blacklist") LeoDolmenRunner.settings.inviter.blacklist = {} end function Inviter:AddPlayerToBlacklist(name) if (self:IsPlayerInBlacklist(name)) then return end table.insert(LeoDolmenRunner.settings.inviter.blacklist, name) end function Inviter:RemovePlayerFromBlacklist(name) local pos = tonumber(name) if pos ~= nil and pos <= #LeoDolmenRunner.settings.inviter.blacklist then LeoDolmenRunner.log("Removing " .. LeoDolmenRunner.settings.inviter.blacklist[pos] .. " from the blacklist") table.remove(LeoDolmenRunner.settings.inviter.blacklist, pos) return end for i, char in pairs(LeoDolmenRunner.settings.inviter.blacklist) do if char == name then LeoDolmenRunner.log("Removing " .. char .. " from the blacklist") table.remove(LeoDolmenRunner.settings.inviter.blacklist, i) return end end end function Inviter:IsPlayerInBlacklist(name) for _, char in pairs(LeoDolmenRunner.settings.inviter.blacklist) do if char == name then return true end end return false end function Inviter:Start(message) if not IsUnitSoloOrGroupLeader("player") then LeoDolmenRunner.log("You need to be group leader to invite.") return end if message ~= nil then Inviter.message = message end LeoDolmenRunnerWindowInviterPanelMessage:SetText(Inviter.message) LeoDolmenRunner.log("Starting auto invite. Listening to " .. Inviter.message) Inviter.started = true LeoDolmenRunnerWindowInviterPanelStartStopLabel:SetText("Stop") EVENT_MANAGER:RegisterForEvent(LeoDolmenRunner.name, EVENT_CHAT_MESSAGE_CHANNEL, function(event,...) Inviter:ChatMessage(...) end) end function Inviter:Initialize() end LeoDolmenRunner.inviter = Inviter