myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
53 страниц V  « < 17 18 19 20 21 > »   
Ответить в данную темуНачать новую тему

> Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы)

vicious
сообщение 25.4.2009, 18:38
Сообщение #361


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




ога...именно так!!! собственно поэтому я с нее и слазию...! но все таки в ней много всякого а в моем не так уж много...! ну вообщем ладно...буду в памяти держать!...с мускулем пока не хочу связываться! надо так поднатаскаться
Go to the top of the page
+Quote Post
vicious
сообщение 28.4.2009, 15:33
Сообщение #362


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




День добрый! Вопрос.
Использую "Функция коррекции данных пользователя" Setuper-а.
встретил пару тегов которые эта функция не цепляет...задумываюсь возможно есть еще не мало таких:
<DCGUI V:0.3.22,M:A,H:2,S:6>
<++ V:0.75,M:P,H:2/0/0,S:14,O:11> (здесь так и не понял что такое O:)

писать для них отдельные захваты или может как нить универсальнее можно?

я просто использовал эту функцию, а потом делал ограничение по шаре, слотам и лимиту скорости...а получается ошибку выдает вот на таких юзерах...т.е. некоторые смогут обходить эти запреты, если захотят.
Неужели лучше будет без этой функции, а просто отлавливая S: и L: ???
Go to the top of the page
+Quote Post
Setuper
сообщение 28.4.2009, 15:42
Сообщение #363


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Это довольно редкий случай, однако, возможные ограничители описаны тут: http://mydc.ru/ipb.html?s=&showtopic=9...post&p=6721

У себя же я использую более сложную функция для разбора тэга, чем функция GetNormalValue big_smile.gif
Код
  local ParseTag = function(sData)
    local client, version = sData:match"^(.-) V:(.-),.*"
    if not client then
      client = sData:match"^(.-) .:"
      version = sData:match"V:(.-),"
      if client and (not version or version == '') then
        version = sData:match"V:(.-)$"
      end
      if not client or not version or version == '' then
        client, version = sData:match"^(.-) (.-),"
        if not client or version:match"(:)" then
          client, version = sData:match"^(.-) V:(.+)$"
          if not client then
            client, version = sData:match"^(.-) (.+)$"
            if not client or version:match"(:)" then
              client, version = sData:match"^(.*)(.*)$"
            end
          end
        end
      end
    end
    local mode = sData:match"M:(.-),"
    if not mode then
      mode = sData:match"M:(.-)$"
    end
    local hubs = sData:match"H:(.-),"
    if not hubs then
      hubs = sData:match"H:(.-)$"
    end
    local slots = sData:match"S:(.-),"
    if not slots then
      slots = sData:match"S:(.-)$"
    end
    local limitL = sData:match"(L:.-),"
    local limitO = sData:match"(O:.-),"
    local limitB = sData:match"(B:.-),"
    local limitD = sData:match"(D:.-),"
    local limitF = sData:match"(F:.-),"
    if not limitL then
      limitL = sData:match"(L:.-)$"
    end
    if not limitO then
      limitO = sData:match"(O:.-)$"
    end
    if not limitB then
      limitB = sData:match"(B:.-)$"
    end
    if not limitD then
      limitD = sData:match"(D:.-)$"
    end
    if not limitF then
      limitD = sData:match"(F:.-)$"
    end
    local s, p = ',', ''
    return client or p, version or p, mode or p, hubs or '0', slots or 0, (limitL and limitL..s or p)..(limitO and limitO..s or p)..(limitB and limitB..s or p)..(limitD and limitD..s or p)..(limitF and limitF..s or p)
  end
Go to the top of the page
+Quote Post
vicious
сообщение 28.4.2009, 15:46
Сообщение #364


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




ооо спс! А в ней тебе попадались редкие исключения которые она не отлавливала слоты и ограничение?
Go to the top of the page
+Quote Post
Setuper
сообщение 28.4.2009, 15:48
Сообщение #365


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




На данный момент она разбирает все известные тэги. Только она сложновата я думаю для тебя будет.
Функция возвращает 6 параметров, последний из которых содержит все ограничения сразу!
Go to the top of the page
+Quote Post
vicious
сообщение 28.4.2009, 15:58
Сообщение #366


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




ну вообще мельком глянул, впринципе мне в коде все понятно. Правда я не знаю все эти ограничители...но код понятен по большому счету. В sData посылать тогда что лучше? tUser.sDescription (если нету tUser.sTag) и tUser.sTag если он есть?
Подскажи как лучше использовать ее для того чтобы при подключении дисконектить юзеров не проходящих проверку каким-либо параметрам?

хм...или вообще просто вставить ее в ChatArrival и она будет отлавливать MyInfo ???
Go to the top of the page
+Quote Post
Setuper
сообщение 28.4.2009, 16:02
Сообщение #367


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Хехе.
Сейчас приведу все функции. Всё устроено так, что функции всегда что-то возвращают, каким бы ни был тэг пользователя.

Ну держишь... big_smile.gif

Код
  --nick, desc, conn, email, share
  local ParseInfo = function(sData)
    nick, desc, conn, email, share = sData:match"^%$MyINFO %$ALL (%S+) (.-)%$ %$(.-)%$(.-)%$(.-)%$"
    return nick, desc or '', conn or '', email or '', share and _G.tonumber(share) or 0
  end
    
  --desc, tag
  local ParseDesc = function(sData)
    local desc, tag = sData:match"^(.-)<(.-)>$"
    if desc then
      return desc, tag
    else
      return sData, ''
    end
  end
    
  --conn, status
  local ParseConnection = function(sData)
    if sData:len() > 0 then
      local status = sData:sub(-1)
      status = status:byte()
      if status > 31 then
        return sData, 1
      end
      return sData:sub(1, -2), status
    end
    return '', '\1'
  end
    
  --client, version, mode, hubs, slots, limit
  local ParseTag = function(sData)
    local client, version = sData:match"^(.-) V:(.-),.*"
    if not client then
      client = sData:match"^(.-) .:"
      version = sData:match"V:(.-),"
      if client and (not version or version == '') then
        version = sData:match"V:(.-)$"
      end
      if not client or not version or version == '' then
        client, version = sData:match"^(.-) (.-),"
        if not client or version:match"(:)" then
          client, version = sData:match"^(.-) V:(.+)$"
          if not client then
            client, version = sData:match"^(.-) (.+)$"
            if not client or version:match"(:)" then
              client, version = sData:match"^(.*)(.*)$"
            end
          end
        end
      end
    end
    local mode = sData:match"M:(.-),"
    if not mode then
      mode = sData:match"M:(.-)$"
    end
    local hubs = sData:match"H:(.-),"
    if not hubs then
      hubs = sData:match"H:(.-)$"
    end
    local slots = sData:match"S:(.-),"
    if not slots then
      slots = sData:match"S:(.-)$"
    end
    local limitL = sData:match"(L:.-),"
    local limitO = sData:match"(O:.-),"
    local limitB = sData:match"(B:.-),"
    local limitD = sData:match"(D:.-),"
    local limitF = sData:match"(F:.-),"
    if not limitL then
      limitL = sData:match"(L:.-)$"
    end
    if not limitO then
      limitO = sData:match"(O:.-)$"
    end
    if not limitB then
      limitB = sData:match"(B:.-)$"
    end
    if not limitD then
      limitD = sData:match"(D:.-)$"
    end
    if not limitF then
      limitD = sData:match"(F:.-)$"
    end
    local s, p = ',', ''
    return client or p, version or p, mode or p, hubs or '0', slots or 0, (limitL and limitL..s or p)..(limitO and limitO..s or p)..(limitB and limitB..s or p)..(limitD and limitD..s or p)..(limitF and limitF..s or p)
  end
    
  --unreg, reg, op
  local ParseHubs = function(sData)
    local unreg, reg, op = sData:match"^(%d+)/(%d+)/(%d+)$"
    if unreg then
      return unreg, reg, op
    else
      unreg = sData:match"^(%d+)$"
      return unreg and _G.tonumber(unreg) or 0, 0, 0
    end
  end

ParseMyINFO = function(sData)
  local t = {}
  t.sNick, t.sDesc, t.sConn, t.sEmail, t.iShare = ParseInfo(sData)
  t.sDesc, t.sTag = ParseDesc(t.sDesc)
  t.sConn, t.iStatus = ParseConnection(t.sConn)
  t.sClient, t.sVersion, t.sMode, t.iHubs, t.iSlots, t.sLimits = ParseTag(t.sTag)
  t.iUnreg, t.iReg, t.iOp = ParseHubs(t.iHubs)
  t.iHubs = t.iUnreg + t.iReg + t.iOp
  return t
end;


Основная тут функция ParseMyINFO. Она возвращает таблицу со всеми параметрами.
Функции написаны таким образом, что какими бы ни были параметры пользователя функции что-то да вернут. Ошибки не будет никогда big_smile.gif
Функции написаны и оптимизированы под все известные на данный момент тэги.
Go to the top of the page
+Quote Post
vicious
сообщение 28.4.2009, 16:10
Сообщение #368


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




Глянул))) Удержал! Код понятен...у них у всех оин и тот же принцип...и то что ошибки не будет это я сразу увидел, в случае если не отлавливает чет...то твои функции возвращают ' '...это я понял...единственно что...теперь как ее использовать, чтобы дисконектило юзера при подключении.
В моем случае достаточно функции, которую ты дал первой. Тока хочу узнать что в нее лучше посылать?как ее прилепить получше? я щас немного туплю...вот пытаюсь понять как лучше сам...и одновременно спрашиваю, пока ты тут)))
Go to the top of the page
+Quote Post
Setuper
сообщение 28.4.2009, 16:18
Сообщение #369


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Функция ParseTag разбирает по частям тэг, поэтому в качестве параметра нужно ставить тэг.
Зачем дисконнектит пользователей, когда данные функции направлены наоборот на сохранение пользователей на хабе, возвращая параметры по умолчанию.

Для отлова ограничителей нужно получить шестой параметр функции ParseTag и работать с ним.
Шестой параметр максимально содержит все 5 ограничителей (на практике все пять ограничителей не встречаются никогда, обычно их не более 2)
Возможные конфигурации шестого параметра:
Код
L:x,O:x,B:x,D:x,F:x
L:x,B:x,D:x,F:x
O:x,B:x
L:x
-- ну и так далее...
Go to the top of the page
+Quote Post
vicious
сообщение 28.4.2009, 16:23
Сообщение #370


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




пока что я понял так:

Код
function ChatArrival(tUser,sData)
local ParseTag = func(sData)
if tonumber(slots) <= N then Core.Disconect(tUser) end
if limitL ~= p then
if tonumber(limitL) <= N then Core.Disconect(tUser)
end
end
function func(sData)
local client, version = sData:match"^(.-) V:(.-),.*"
    if not client then
      client = sData:match"^(.-) .:"
      version = sData:match"V:(.-),"
      if client and (not version or version == '') then
        version = sData:match"V:(.-)$"
      end
      if not client or not version or version == '' then
        client, version = sData:match"^(.-) (.-),"
        if not client or version:match"(:)" then
          client, version = sData:match"^(.-) V:(.+)$"
          if not client then
            client, version = sData:match"^(.-) (.+)$"
            if not client or version:match"(:)" then
              client, version = sData:match"^(.*)(.*)$"
            end
          end
        end
      end
    end
    local mode = sData:match"M:(.-),"
    if not mode then
      mode = sData:match"M:(.-)$"
    end
    local hubs = sData:match"H:(.-),"
    if not hubs then
      hubs = sData:match"H:(.-)$"
    end
    local slots = sData:match"S:(.-),"
    if not slots then
      slots = sData:match"S:(.-)$"
    end
    local limitL = sData:match"(L:.-),"
    local limitO = sData:match"(O:.-),"
    local limitB = sData:match"(B:.-),"
    local limitD = sData:match"(D:.-),"
    local limitF = sData:match"(F:.-),"
    if not limitL then
      limitL = sData:match"(L:.-)$"
    end
    if not limitO then
      limitO = sData:match"(O:.-)$"
    end
    if not limitB then
      limitB = sData:match"(B:.-)$"
    end
    if not limitD then
      limitD = sData:match"(D:.-)$"
    end
    if not limitF then
      limitD = sData:match"(F:.-)$"
    end
    local s, p = ',', ''
    return client or p, version or p, mode or p, hubs or '0', slots or 0, (limitL and limitL..s or p)..(limitO and limitO..s or p)..(limitB and limitB..s or p)..(limitD and limitD..s or p)..(limitF and limitF..s or p)
  end
end
Go to the top of the page
+Quote Post
Setuper
сообщение 28.4.2009, 16:25
Сообщение #371


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Бред написал!
Go to the top of the page
+Quote Post
vicious
сообщение 28.4.2009, 16:26
Сообщение #372


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




но это я с торопыги...надо отойти щас приду получше подумаю...
Go to the top of the page
+Quote Post
Setuper
сообщение 28.4.2009, 16:45
Сообщение #373


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Я же сказал, что в качестве параметра функции ParseTag нужно ставить тэг пользователя, а тэг пользователя не всегда определён в переменной tUser.sTag, для этого и делается полный разбор всей строки MyINFO, и одной только функцией ParseTag не обойтись. Поэтому написав все 6 выше предложенных функций, использование такое:
Код
function ChatArrival(tUser, sData)
  local tMyINFO = ParseMyINFO(tUser.sMyINFO)
  local LimitL = tMyINFO.sLimits:match"L:(%d)"
  if LimitL and tonumber(LimitL) < N then
    tUser:Disconnect()
  end
end


L: Upload Bandwidth Limit
O: If the current total upload speed of a user is lower than the number after O:, DC++ will automatically Open another slot.
B: Upload Bandwidth Limit in kb/s
D: Download Bandwidth Limit in kb/s [rmDC++ mode]
F: Bandwidth Limiting DC:Pro (optional and only shown in the description when using DC++ mode) F:x/y. x = Download limit, y = Upload limit.
Go to the top of the page
+Quote Post
vicious
сообщение 28.4.2009, 17:11
Сообщение #374


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




да да да...я такой бред написал что самому стыдно)) Все понял вроде бы...единственное что...
не лучше ли писать не в ChatArrival а UserConnected ? напруга меньше же будет?
Go to the top of the page
+Quote Post
Setuper
сообщение 28.4.2009, 17:48
Сообщение #375


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Самый лучший вариант писать MyINFOArrival
Go to the top of the page
+Quote Post
vicious
сообщение 28.4.2009, 18:30
Сообщение #376


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




точно!...спс...кстати когда срабатывает эта функция при подключением? между какими двумя? и вроде она еще с интервалом срабатывает уже после того как юзер подключился да?
Go to the top of the page
+Quote Post
Setuper
сообщение 28.4.2009, 18:46
Сообщение #377


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Она срабатывает каждый раз, когда клиент пользователя отсылает на хаб MyINFO строку.
Go to the top of the page
+Quote Post
Wariner
сообщение 28.4.2009, 20:18
Сообщение #378


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




на что реагирует функция UnknownArrival? точнее что значит неизвестная команда?
т.к. не срабатывает на "!команда" значит на протокольные команды начинающиеся с $ ?
Go to the top of the page
+Quote Post
Setuper
сообщение 28.4.2009, 20:31
Сообщение #379


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Естественно протокольные. Например,
Код
$Cmd
Go to the top of the page
+Quote Post
vicious
сообщение 29.4.2009, 0:06
Сообщение #380


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




А можно ли как нить определить очередь к скаче у юзера?...попадаются у нас иногда юзеры...у которых очередь к примеру 20 и больше..., у нас локалка 100 мегабит..и эти юзеры как правило - те кто сидят в две сети: в адсл и к нам по витой паре. Так вот эта очередь нафик нам не нужна...пусть такие юзеры добавляют в друзья подсетку нашу либо сидят на своем адсл. Вот может кто посоветует как таких ограничивать и отслеживать?
Go to the top of the page
+Quote Post

53 страниц V  « < 17 18 19 20 21 > » 
Ответить в данную темуНачать новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No new ВАЖНО: Topic has attachmentsМодули для скриптов RusHub
26 Setuper 45 397 21.3.2017, 17:31 Посл. сообщение: Alexey
No new ВАЖНО: Topic has attachmentsВаши Вопросы И Предложения По Поводу Форума
447 Svyat 322 700 20.10.2015, 19:39 Посл. сообщение: Ksan
No New Posts От: Вопросы Разработчикам Скриптов
От темы с ID: 173
0 MIKHAIL 4 338 23.1.2015, 0:56 Посл. сообщение: MIKHAIL
No new Topic has attachmentsВопросы по протоколу NMDC
Делаю программу
26 Master255 29 798 12.1.2015, 0:38 Посл. сообщение: Master255
No New Posts Вопросы к Phazeus по Экзекутору
Мастер может забанить мастера, как решить в Экзекуторе?
1 AndreiDC 5 378 31.10.2014, 19:20 Посл. сообщение: Ksan
No New Posts От: Установка скриптов
От темы с ID: 5657
0 MIKHAIL 4 800 29.7.2014, 23:37 Посл. сообщение: MIKHAIL
No New Posts Установка скриптов
Нужна помощь по установке
2 _wRz_ 7 309 29.7.2014, 16:11 Посл. сообщение: Артём
No new От: Вопросы Разработчикам Скриптов
От темы с ID: 173
29 Wariner 26 070 28.1.2014, 13:11 Посл. сообщение: Alexey
No new Topic has attachmentsВопросы по RusHub
Технические вопросы
316 Jaska 269 777 19.12.2013, 13:59 Посл. сообщение: mod
No new Topic has attachmentsМелкие вопросы
44 Wariner 51 032 19.9.2013, 12:34 Посл. сообщение: Alexey
No New Posts От: Ваши Вопросы И Предложения По Поводу Форума
От темы с ID: 753
3 anila 9 134 28.3.2013, 16:02 Посл. сообщение: настя
No New Posts Единая платформа для скриптов
Обсуждения вопроса создания единой платформы скриптов
5 Enyby 9 064 18.1.2012, 20:15 Посл. сообщение: Setuper
No new Topic has attachmentsПеределка скриптов
Прошу помощи
47 Fe(one)X 41 477 26.12.2011, 15:04 Посл. сообщение: Ksan
No new Topic has attachmentsВопросы Разработчикам Скриптов с SQL
вопросы по скриптам (мелкие вопросы)
101 Wariner 62 537 6.12.2011, 0:34 Посл. сообщение: Enyby
No New Posts От: Вопросы по RusHub
От темы с ID: 2902
4 Otshelnik-Fm 8 476 19.10.2011, 9:23 Посл. сообщение: Mangust

 



RSS Сейчас: 27.11.2024, 17:23