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

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

MyDC.ru _ Запросы скриптов для PtokaX _ Нерабочий скрипт ВИПа по шаре

Автор: Damaks 25.8.2010, 9:19

Пробовал не так давно скрипт http://mydc.ru/topic1186.html. Из подобных выбрал именно его, т.к. другие устраивали ещё меньше. Критерии были такие: випа должны получать и реги, и анреги. Статус не прописывается в настройках птохи, он должен сохраняться лишь либо во время работы скрипта, либо в время нахождения юзера на хабе. Это как раз должно дать возможность создавать временного випа из незарегистрированного юзера. Иначе придётся либо вписывать ему пароль, что не так удобно, либо под его ником сможет зайти каждый, и при любой шаре будет випом.

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

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

Если есть другой аналогичный скрипт, буду рад. Но на этом форуме я такого не нашёл, чтобы удовлетворял описанным условиям. А скрипты повышения профиля на 1 не подходят по причине слегка запутанной таблицы профилей, хаб не на моём компьютере. Если кто сможет исправить этот скрипт, буду благодарен.

P.S. Не надо спрашивать "а зачем тебе енто надо?" Такие вопросы есть уже в других темах.

Автор: Strannik 25.8.2010, 21:26

Попробуй этот повышает профель на 1 или уменьшает работает как часы без проблем выставлен порог 1000Gb работает только для зарегеных, для обычных невижу смысла делать випом

 ShareCheck.rar ( 1.73 килобайт ) : 12
 

Автор: Damaks 26.8.2010, 8:04

В том-то и дело, что этот скрипт повышает профиль на постоянной основе, к тому же только для зарегенных. На хабе не так много юзеров с шарой более 3 ТБ, преференции не напрягают.

Автор: Артём 26.8.2010, 14:02

Цитата(Damaks @ 26.8.2010, 8:04) *
к тому же только для зарегенных.

а как ты хочешь чтобы UnReg стал VIP , чтобы его скрипт сам регистрировал и пароль в лс отправлял?
Скрипт выше только повышает профиль.

Автор: Damaks 26.8.2010, 14:22

Цитата(Артём @ 26.8.2010, 15:02) *
а как ты хочешь чтобы UnReg стал VIP , чтобы его скрипт сам регистрировал и пароль в лс отправлял?
Скрипт выше только повышает профиль.

Скрипт в шапке ставит профиль випа даже незарегенным, при этом они не регятся в птохе.

Автор: Артём 26.8.2010, 14:26

да ну... такого быть не может...

Код
RegMan.ChangeReg(tUser.sNick, tUserProf.sPassword, iVipProfile)

Автор: Damaks 26.8.2010, 18:21

Артём,
Пользователь является випом лишь при нахождении на хабе и работе скрипта, нигде не прописываясь. Заходя на хаб, он проверяется и делается випом (если удовлетворяет условиям). При выключении скрипта он становится тем, кем был до этого (рег/анрег). При перезапуске он опять проверяется. В этом суть дела. Во время работы скрипта и нахождения в випах даже незарегенный в юзерах не прописыватся никаким способом, его там вообще нет.
Но становится випом лишь юзер с самой большой шарой, а не все выше определённой. Тут вся загвоздка.

Автор: Ksan 26.8.2010, 18:22

1. Судя по скрипту, он даёт випа только регенным. Прочитай его внимательнее.

Код
local tUserProf = RegMan.GetReg(tUser.sNick)
        if tUserProf then
            RegMan.ChangeReg(tUser.sNick, tUserProf.sPassword, tMadeVIPs[tUser.sNick])
        end
и
Код
local tUserProf = RegMan.GetReg(tUser.sNick)
        if tUserProf and tMakableProfiles[tUserProf.iProfile] then
            tMadeVIPs[tUser.sNick] = tUserProf.iProfile
            RegMan.ChangeReg(tUser.sNick, tUserProf.sPassword, iVipProfile)
        end
Тут в обоих участках проверка на принадлежность к зарегенным и далее при положительном результате дается ему вип с использованием его пароля из таблицы зарегенных.
2. Что до изначальной твоей проблемы, она должна решаться манипулированием результатов сравнений больше, больше или равно, меньше, меньше или равно...Думаю, тебе это по силам, насколько я знаю

Автор: Damaks 26.8.2010, 18:39

Цитата(Ksan @ 26.8.2010, 19:22) *
1. Судя по скрипту, он даёт випа только регенным. Прочитай его внимательнее.

Сделал скрин списка юзеров и окна зарегистрированных юзеров.
ВИП-шара задана на 10 ГБ. Test-nik незарегистрирован. это не мешает ему быть в випах.


Автор: Ksan 26.8.2010, 18:50

Так, вопрос - а как ты узнаешь, что он в випах?

Автор: Damaks 26.8.2010, 19:11

Хороший вопрос. Проверил профиль через скрипт - не зарегистрирован. Проверил скриптом, получает ли возможности профиля ВИП - нет. Однако находится наверху. В чём же дело тогда.

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

Автор: Nickolya 26.8.2010, 19:48

Любой ник можно сделать красным (ОПом) отправив $OpList с его ником клиенту, что и делает скрипт big_smile.gif
Логика выбора юзеров находится здесь:

Код
        iShare = tOnlineNonOps[1].iShareSize
        for i = 1, #tOnlineNonOps do
            if tOnlineNonOps[i].iShareSize == iShare then
                tUsers[tOnlineNonOps[i].sNick] = true
            else
                break
            end
        end

Берется самая большая шара и еще смотрится есть ли юзеры с такой же шарой (вдруг таких два или больше) и они заносятся в таблицу. Плюс по всему скрипту идут проверки на то что превышена лучшая шара. Для занесения всех юзеров с шарой для випов надо изменить условие
Код
if tOnlineNonOps[i].iShareSize == iShare then
на
Код
if tOnlineNonOps[i].iShareSize >= iVipShare then
И дальше по всему коду еще пройтись и посмотреть на проверки, поправить их там, пробуйте...

Автор: Damaks 26.8.2010, 19:59

Nickolya,
Спасибо за разъяснения. На днях буду кромсать.

Автор: Damaks 29.8.2010, 18:17

Справился. Работает правильно, за исключением одной мелочи: когда юзеру меняется профиль (или просто перемещается вверх), то все випы и уже помеченные пользователи становятся на какое-то время обычными, затем обратно согласно статусу и шаре. Мигает список. Как с этим можно справиться?

После редактирования скрипт получился такой:
 best_share_to_vip_api2.lua ( 4.81 килобайт ) : 11

Автор: Nickolya 29.8.2010, 18:52

Во всем виновата эта строчка, попробуй ее убрать:

Код
        iRemoveTimer = TmrMan.AddTimer(2000, "RemoveMadeOps") or iRemoveTimer

Автор: Damaks 30.8.2010, 13:43

Если убрать эту строчку, то из випов обратно в реги при уменьшении шары не переносит.
Нужно было всего лишь слегка изменить местами строчки. Делал так до вопроса, но тогда ничего не получилось, возможно невнимательность.

Заменил это:

Код
    if iShare >= iVipShare then
        iSendTimer2 = TmrMan.AddTimer(3000, "SendNewMadeOpList") or iSendTimer2
        iRemoveTimer = TmrMan.AddTimer(2000, "RemoveMadeOps") or iRemoveTimer
    elseif iShare >= iVipShare then
        if not tBest[tUser.sNick] then
            tBest[tUser.sNick] = true
            iSendTimer = TmrMan.AddTimer(2000, "SendMadeOpList") or iSendTimer
        end
    end

на это:
Код
    if iShare >= iVipShare then
        if not tBest[tUser.sNick] then
            tBest[tUser.sNick] = true
            iSendTimer = TmrMan.AddTimer(2000, "SendMadeOpList") or iSendTimer
        else
        iSendTimer2 = TmrMan.AddTimer(3000, "SendNewMadeOpList") or iSendTimer2
        end
    elseif iShare < iVipShare then
        iRemoveTimer = TmrMan.AddTimer(2000, "RemoveMadeOps") or iRemoveTimer
    end

На тестах работает. В ближайшие дни опробирую на практике.