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

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

MyDC.ru _ Kорзина _ Nolimit

Автор: ustas 2.1.2009, 18:53

Есть такой скрипт, автор кажется Nickolya, я только добавил функцию GetNormalValue (спс Setuper)
работает, отключает, но спотыкается на Авалинке (я так понимаю, из-за нестандартного тэга)
NoLimit_1.1.lua:29: attempt to compare nil with number

 NoLimit_1.1.lua ( 2.12 килобайт ) : 34

Автор: Nickolya 2.1.2009, 20:31

Код
function CheckLimit(tCurUser)
    local Limit = tCurUser.iLlimit or 0

С этим исправлением ошибки быть не должно, но обрабатываться тег не будет...
Тег клиента в студию и будем дорабатывать функцию GetNormalValue big_smile.gif

Автор: Setuper 2.1.2009, 20:51

Тег авалинка отличается тем, что в теге нет идентификатора версии: <AvaLink 1.3,M:A,H:1/0/0,S:2> Обычно тег выглядит так: <++ V:0.707,M:A,H:1/0/0,S:2>

Автор: ustas 2.1.2009, 20:57

у последней версии тэг нормальный <AvaDC V:1.55,M:A,H:0/1/0,S:20,L:2048>
обрабатывается корректно

<AvaLink 1.3,M:A,H:7/0/0,S:10,L:30> не хотит

понаблюдал немного
Лимит авалинка скрипт ловит, но почему-то обрабатывает не как число
attempt to compare string with number
есть какие-нибудь идеи?

исправил local Limit = tonumber(tCurUser.iLlimit)
и заработало )
осталось сделать так, чтобы для инетчиков и локальщиков ограничения были разные

Автор: Setuper 4.1.2009, 20:48

Для инетчиков и локальщиков надо проверять диапазоны ip адресов. Используй для проверки функцию IsLocal(tUser):

Код
local tLocalIPs = {
  {"10.0.0.0", "10.255.255.255"},
  {"192.168.0.0", "192.168.255.255"},
  {"172.16.0.0", "172.31.255.255"},
}

function OnStartup()
  SetToNum()
end

function SetToNum()
  for i, v in ipairs(tLocalIPs) do
    tLocalIPs[i][1] = Ip2Num(tLocalIPs[i][1])
    tLocalIPs[i][2] = Ip2Num(tLocalIPs[i][2])
  end
end

function Ip2Num(sIP)
    local _,_,a,b,c,d=sIP:find"^(%d+)%.(%d+)%.(%d+)%.(%d+)$"
    return tonumber(a)*16777216+tonumber(b)*65536+tonumber(c)*256+tonumber(d)
end

function IsLocal(tUser)
  tUser.iIP = Ip2Num(tUser.sIP)
  for i, v in ipairs(tLocalIPs) do
    if tUser.iIP > v[1] and tUser.iIP < v[2] then
      return true
    end
  end
end

Автор: ustas 4.1.2009, 22:55

блин, весь кайф испортил, сам хотел написать )))
Благодарю
так не работает

Код
local tLocalIPs = {
  {10.0.0.0, 10.255.255.255},
  {192.168.0.0, 192.168.255.255},
  {172.16.0.0, 172.31.255.255},
}


а так работает
Код
local tLocalIPs = {
  {"10.0.0.0", "10.255.255.255"},
  {"192.168.0.0", "192.168.255.255"},
  {"172.16.0.0", "172.31.255.255"},
}

Автор: Angel_D 29.1.2009, 20:55

Прошу прощения, но так и не понял как скрипт должен выглядеть в конечном итоге...
И можно придумать, чтоб различным диапозонам IP можно было различные лимиты выставлять?

Автор: ustas 30.1.2009, 9:06

Вот пример скрипта, набросал на работе. Тут ограничение можно установить для конкретных ников.
тег Авалинка обрабатываетя некорректно, ошибка NoLimit.lua:41: attempt to compare nil with number
на сервере я что-то изменял в функции GetNormalValue, но не помню что именно.
Ошибки возникают, но тег обрабатывает, авалинковцев выкидывает
 NoLimit.lua ( 3.38 килобайт ) : 16

Автор: Setuper 30.1.2009, 13:11

http://mydc.ru/ipb.html?s=&showtopic=334&view=findpost&p=9085