Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Готовые скрипты для PtokaX _ Редирект или отключение v1.1, v2.1.1

Автор: MaxFox 12.12.2010, 3:36

Название скрипта: Редирект или отключение
Версия скрипта: 1.1, 2.1.1
Версия API:API2
Автор: http://mydc.ru/user3432.html

Описание скрипта: Данный скрипт позволяет редиректить или просто отключать пользователей, если их шара мала, в зависимости от того, какому сегменту сети они принадлежат. Стандартными методами хаба вы можете установить порог шары и решить глобально, что делать с теми кто не расшарил необходимого объема, просто отключать или же перенаправлять куда вы хотите.
Один минус так сказать... пингеры читают порог шары установленный стандартными методами хаба. но для меня это не принципиально. Вы можете добавить ники тех, кого не будет проверять на шару и будет пропускать на хаб в независимости от вашего ценза.

 RedirectorDisconnect_v1.1.lua ( 2.73 килобайт ) : 14


 RedirectorDisconnect_v2.1.1.lua ( 3.41 килобайт ) : 28


Примечание: Если не хотите видеть никаких сообщений в опчат, закомментируйте или удалите все Core.SendToOpChat

Дополнение:
2.1.1 Исправлен баг с промежутком времени пересекающим границу суток. Измене метод отключения от хаба.

2.1 Добавлено отключение юзеров в момент наступления новых ограничений. То есть, если в 9 утра, сидит человек с шарой меньше 1 гб, то его выключит или перенаправит в зависимости от его IP. Спасибо Nickolya, за идеи и небольшую оптимизацию кода.

2 - Добавлена динамическое ограничение по шаре, меняющееся в течении суток, используется время сервера, убедитесь в его правильности. В стандартных(моих) настройках скрипта
Ограничения на доступ к хабу по шаре:
с 2 до 9 - 0 Гб
с 9 до 12 - 1 Гб
с 12 до 15 - 3 Гб
с 15 до 18 - 5 Гб
с 18 до 23 - 10 ГБ
с 23 до 2 - 7 Гб

1.1 - пофикшен баг с обработкой профилей, редиректились только незарегистрированные. Добавлена возможность управление профилями.

Автор: Saymon 12.12.2010, 3:42

Тему по правилам оформи!

Автор: MaxFox 12.12.2010, 3:47

Цитата(Saymon @ 12.12.2010, 3:42) *
Тему по правилам оформи!

сори, сча исправлюсь

Автор: Tsd 13.12.2010, 16:36

К сожалению, у многих отключено автоматическое перенаправление. Поэтому редирект под вопросом.

Автор: MaxFox 13.12.2010, 17:16

Цитата(Tsd @ 13.12.2010, 16:36) *
К сожалению, у многих отключено автоматическое перенаправление. Поэтому редирект под вопросом.

Я это понимаю, цель, которую я ставил перед собой решена. За чужие настройки отвечать никто не может...

Автор: mishanspb 10.1.2011, 7:27

MaxFox
Макс, а можно отдельную версию без редиректов, диапазонов и проч..
Нужно только ограничение по шаре в зависимости от времени суток.
Ну не силен я в луа ))

Спасибо.

Автор: Nickolya 10.1.2011, 20:25

Код
---------------------------------------------------------------
-- Скрипт редиректа всех, кроме IP внесенных ниже              --
-- v1.1 Пофикшен небольшой баг с обработкой профилей,        --
-- добавлена возможность исключение профилей из редиректа    --
--                  created by MaxFox                        --
---------------------------------------------------------------
--Ники Исключения
tAviableNicks = {
    ["Ник"] = true,
}
---------------------------------------------------------------
function UserConnected(tUser)
    local iHour = tonumber(os.date"%H")
    if iHour >= 2 and iHour < 9 then
        iMinShare = 0
    elseif iHour >= 9 and iHour < 12 then
        iMinShare = 1024^3
        lMinShare = 1              --    эта переменная необходима для корректного вывода сообщений, дабы не менять везде одно и тоже.
    elseif iHour >= 12 and iHour < 15 then
        iMinShare = 3*1024^3
        lMinShare = 3
    elseif iHour >= 15 and iHour < 18 then
        iMinShare = 5*1024^3
        lMinShare = 5
    elseif iHour >= 18 and iHour <= 23 then
        iMinShare = 10*1024^3
        lMinShare = 10
    elseif iHour >= 23 and iHour <= 2 then
        iMinShare = 7*1024^3
        lMinShare = 7
    end
    if not tAviableNicks[tUser.sNick] and ((Core.GetUserValue(tUser, 16) or 0) < iMinShare) then
        Core.SendToUser(tUser, " *** Внимание!!! У вас мало шары. На данный момент необходимо от "..lMinShare.." Гб шары. Для того, что-бы ее увеличить зайдите Фаил->Настройки->Шара. Время сервера "..os.date("%X")..""")
        Core.Disconnect(tUser)
        -- Core.SendToOpChat("Юзер "..tUser.sNick.." IP "..tUser.sIP.." пытался войти на хаб.")
    end    
end
RegConnected = UserConnected
OpConnected = UserConnected

Автор: mishanspb 11.1.2011, 18:17

Nickolya
Благодарю !
Последний вопрос, а операторов и выше он с любой шарой пропускает или нужно вбивать их ники тоже в список исключений ?

Автор: Nickolya 11.1.2011, 20:40

mishanspb, проверки по профилю в скрипте нет, поэтому будет ловить всех, кроме таблицы с никами-исключениями. Убрать проверку на пользователей с ключами можно просто удалив строку

Код
OpConnected = UserConnected

А удаление
Код
RegConnected = UserConnected
приведет к отсутствию проверки у всех зарегистрированных юзеров без ключа.
Если надо именно по профилям, то смотрим http://mydc.ru/index.html?showtopic=1164&view=findpost&p=22528.

Автор: mishanspb 13.1.2011, 11:46

А реально ли сделать так, чтобы при наступлении нужного часа он сам отрубал малошарных пользователей ?
Сейчас они так и висят до перезахода.

Автор: Nickolya 15.1.2011, 4:56

Реально,

всё реально
Код
---------------------------------------------------------------
-- Скрипт редиректа всех, кроме IP внесенных ниже              --
-- v1.1 Пофикшен небольшой баг с обработкой профилей,        --
-- добавлена возможность исключение профилей из редиректа    --
--                  created by MaxFox                        --
---------------------------------------------------------------
-- Ники-исключения из проверки:
tAviableNicks = {
    ["Ник"] = true,
}
-- Профили для проверки:
tCheckProfiles = {
    [0] = false,
    [1] = false,
    [2] = false,
    [3] = true,
    [-1] = true,
}
---------------------------------------------------------------
function OnStartup()
    TmrMan.AddTimer(60000, "MakeLimit")
    sBot = SetMan.GetString(21)
end

function MakeLimit()
    local iHour = tonumber(os.date"%H")
    local gb = 1024^3
    local was = iMinShare or false
    if iHour >= 2 and iHour < 9 then
        iMinShare = 0
    elseif iHour >= 9 and iHour < 12 then
        iMinShare = 1*gb
    elseif iHour >= 12 and iHour < 15 then
        iMinShare = 3*gb
    elseif iHour >= 15 and iHour < 18 then
        iMinShare = 5*gb
    elseif iHour >= 18 and iHour <= 23 then
        iMinShare = 10*gb
    elseif iHour >= 23 or iHour <= 2 then    -- поправил условие, а то "elseif iHour >= 23 and iHour <= 2 then" не будет true никогда
        iMinShare = 7*gb
    end
    if was and iMinShare ~= was then
        local t = Core.GetOnlineUsers() or {}
        for _, tUser in ipairs(t) do
            UserConnected(tUser)
        end
    end
    lMinShare = iMinShare/gb
end
MakeLimit()

function UserConnected(tUser)
    if not tAviableNicks[tUser.sNick] and tCheckProfiles[tUser.iProfile] and ((Core.GetUserValue(tUser, 16) or 0) < iMinShare) then
        Core.SendToUser(tUser, "<"..sBot.."> *** Внимание!!! У вас мало шары. На данный момент необходимо от "..lMinShare.." Гб шары. Для того, что-бы ее увеличить зайдите Фаил->Настройки->Шара. Время сервера "..os.date("%X")..""")
        -- Core.SendToOpChat("<"..sBot.."> *** Юзер "..tUser.sNick.." IP "..tUser.sIP.." пытался войти на хаб.")
        Core.Disconnect(tUser)
    end    
end
RegConnected = UserConnected
OpConnected = UserConnected

Автор: mishanspb 16.1.2011, 15:10

Nickolya
Спасибо, о мудрый человек, пока полет нормальный
Кстати почему-то 5-10 юзеров все равно не отключается, хоть и должны.. но это уже совсем мелочи

Автор: Ksan 16.1.2011, 16:46

Возможно, тут сочетание нескольких моментов...
1. У них отключено автоматическое перенаправление.
2. У них Грейлинк.
3. В Грейлинке стоит галочка "Нет пауз между попытками подключения к хабу"
Их скрипт дисконнектит и они сразу же вновь заскакивают на хаб, и ты не успеваешь даже заметить, что они были скинуты.

Автор: Nickolya 16.1.2011, 21:11

mishanspb, Должны отключаться все, надеюсь ты ничего не менял big_smile.gif И ты уверен, что те юзеры, что остались, имеют профиль, попадающий под работу скрипта?
Ksan, последняя редакция только с отключением, никаких редиректов. А подключение без пауз тоже не должно играть роли, если только хаб не глючит от этого.

Автор: MaxFox 17.1.2011, 12:37

Цитата(Nickolya @ 16.1.2011, 21:11) *
mishanspb, Должны отключаться все, надеюсь ты ничего не менял big_smile.gif И ты уверен, что те юзеры, что остались, имеют профиль, попадающий под работу скрипта?
Ksan, последняя редакция только с отключением, никаких редиректов. А подключение без пауз тоже не должно играть роли, если только хаб не глючит от этого.

В общем, спасибо Nickolya, за идею и небольшую отимизацию, по его мотивам модифицировал свой сткрипт с редиректом и отключением, в течении дня выложу. Пока у себя проверил все работает.

Кстати.. вопрос... Товарисчи из цыфры, переписывали исходники птоки, так как у них явно это реализовано методами хаба. или специально обученный человек меняет шару по времени? XD

Автор: Артём 17.1.2011, 13:24

MaxFox, задай лучше этот вопрос Яdmin aka sphinx big_smile.gif

Автор: MaxFox 14.4.2011, 18:07

Долго мучился в раздумьях, почему все же бывают те кто проскакивают фильтр... о чем Миша писал, у себя наблюдая тоже самое... и заметил, что ежели использовать не Core.Disconnect(tUser), а Core.Disconnect(sNick), тоетсь дисконектить по нику, то проскачивших можно считать по пальцам одной-двух рук, учитывая, что на хаб пытается проскочить эжак 6000-8000 юзеров... в случае Core.Disconnect(tUser), проскакивало на много больше... 30-50... может и еще больше...
Спрашивается, как так?