Версия для печати темы
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 работает только для зарегеных, для обычных невижу смысла делать випом
Автор: 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 с его ником клиенту, что и делает скрипт
Логика выбора юзеров находится здесь:
Код
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 килобайт )
: 14
Автор: 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
На тестах работает. В ближайшие дни опробирую на практике.
Автор: mod 23.2.2023, 7:16
Не работает 0.5.3.0 \ 5.1.5
[11:07:18] Нет синтаксических ошибок в скрипте share_vip_api2.lua
[11:07:18] Синтаксис C:\PtokaX\scripts\share_vip_api2.lua:79: bad argument #1 to 'RemoveTimer' (userdata expected, got number)
stack traceback:
[C]: in function 'RemoveTimer'
C:\PtokaX\scripts\share_vip_api2.lua:79: in function 'SendMadeOpList'
C:\PtokaX\scripts\share_vip_api2.lua:35: in function <C:\PtokaX\scripts\share_vip_api2.lua:27>
[11:07:18] Синтаксис C:\PtokaX\scripts\share_vip_api2.lua:105: bad argument #1 to 'RemoveTimer' (userdata expected, got number)
stack traceback:
[C]: in function 'RemoveTimer'
C:\PtokaX\scripts\share_vip_api2.lua:105: in function 'RemoveMadeOps'
C:\PtokaX\scripts\share_vip_api2.lua:52: in function <C:\PtokaX\scripts\share_vip_api2.lua:51>
[11:07:18] Критическая ошибка в скрипте share_vip_api2.lua ! Скрипт остановлен!
[11:07:18] Скрипт запущен.
[11:07:18] Синтаксис C:\PtokaX\scripts\share_vip_api2.lua:105: bad argument #1 to 'RemoveTimer' (userdata expected, got number)
stack traceback:
[C]: in function 'RemoveTimer'
C:\PtokaX\scripts\share_vip_api2.lua:105: in function 'RemoveMadeOps'
C:\PtokaX\scripts\share_vip_api2.lua:52: in function <C:\PtokaX\scripts\share_vip_api2.lua:51>
[11:07:18] Синтаксис C:\PtokaX\scripts\share_vip_api2.lua:105: bad argument #1 to 'RemoveTimer' (userdata expected, got number)
stack traceback:
[C]: in function 'RemoveTimer'
C:\PtokaX\scripts\share_vip_api2.lua:105: in function 'RemoveMadeOps'
C:\PtokaX\scripts\share_vip_api2.lua:52: in function <C:\PtokaX\scripts\share_vip_api2.lua:51>
[11:07:18] Критическая ошибка в скрипте share_vip_api2.lua ! Скрипт остановлен!
Может кто-нибудь подправит