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 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 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 LeoDolmenRunner.log(zo_strformat("Inviting <<1>>", from)) from = from:gsub("%^.+", "") 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 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