Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы) |
Здравствуйте, гость ( Вход | Регистрация )
Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы) |
25.4.2009, 18:38
Сообщение
#361
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
ога...именно так!!! собственно поэтому я с нее и слазию...! но все таки в ней много всякого а в моем не так уж много...! ну вообщем ладно...буду в памяти держать!...с мускулем пока не хочу связываться! надо так поднатаскаться
|
|
|
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: ??? |
|
|
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 Код 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 |
|
|
28.4.2009, 15:46
Сообщение
#364
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
ооо спс! А в ней тебе попадались редкие исключения которые она не отлавливала слоты и ограничение?
|
|
|
28.4.2009, 15:48
Сообщение
#365
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
На данный момент она разбирает все известные тэги. Только она сложновата я думаю для тебя будет.
Функция возвращает 6 параметров, последний из которых содержит все ограничения сразу! |
|
|
28.4.2009, 15:58
Сообщение
#366
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
ну вообще мельком глянул, впринципе мне в коде все понятно. Правда я не знаю все эти ограничители...но код понятен по большому счету. В sData посылать тогда что лучше? tUser.sDescription (если нету tUser.sTag) и tUser.sTag если он есть?
Подскажи как лучше использовать ее для того чтобы при подключении дисконектить юзеров не проходящих проверку каким-либо параметрам? хм...или вообще просто вставить ее в ChatArrival и она будет отлавливать MyInfo ??? |
|
|
28.4.2009, 16:02
Сообщение
#367
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Хехе.
Сейчас приведу все функции. Всё устроено так, что функции всегда что-то возвращают, каким бы ни был тэг пользователя. Ну держишь... Код --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. Она возвращает таблицу со всеми параметрами. Функции написаны таким образом, что какими бы ни были параметры пользователя функции что-то да вернут. Ошибки не будет никогда Функции написаны и оптимизированы под все известные на данный момент тэги. |
|
|
28.4.2009, 16:10
Сообщение
#368
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
Глянул))) Удержал! Код понятен...у них у всех оин и тот же принцип...и то что ошибки не будет это я сразу увидел, в случае если не отлавливает чет...то твои функции возвращают ' '...это я понял...единственно что...теперь как ее использовать, чтобы дисконектило юзера при подключении.
В моем случае достаточно функции, которую ты дал первой. Тока хочу узнать что в нее лучше посылать?как ее прилепить получше? я щас немного туплю...вот пытаюсь понять как лучше сам...и одновременно спрашиваю, пока ты тут))) |
|
|
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 -- ну и так далее... |
|
|
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 |
|
|
28.4.2009, 16:25
Сообщение
#371
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Бред написал!
|
|
|
28.4.2009, 16:26
Сообщение
#372
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
но это я с торопыги...надо отойти щас приду получше подумаю...
|
|
|
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. |
|
|
28.4.2009, 17:11
Сообщение
#374
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
да да да...я такой бред написал что самому стыдно)) Все понял вроде бы...единственное что...
не лучше ли писать не в ChatArrival а UserConnected ? напруга меньше же будет? |
|
|
28.4.2009, 17:48
Сообщение
#375
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Самый лучший вариант писать MyINFOArrival
|
|
|
28.4.2009, 18:30
Сообщение
#376
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
точно!...спс...кстати когда срабатывает эта функция при подключением? между какими двумя? и вроде она еще с интервалом срабатывает уже после того как юзер подключился да?
|
|
|
28.4.2009, 18:46
Сообщение
#377
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Она срабатывает каждый раз, когда клиент пользователя отсылает на хаб MyINFO строку.
|
|
|
28.4.2009, 20:18
Сообщение
#378
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
на что реагирует функция UnknownArrival? точнее что значит неизвестная команда?
т.к. не срабатывает на "!команда" значит на протокольные команды начинающиеся с $ ? |
|
|
28.4.2009, 20:31
Сообщение
#379
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Естественно протокольные. Например,
Код $Cmd
|
|
|
29.4.2009, 0:06
Сообщение
#380
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
А можно ли как нить определить очередь к скаче у юзера?...попадаются у нас иногда юзеры...у которых очередь к примеру 20 и больше..., у нас локалка 100 мегабит..и эти юзеры как правило - те кто сидят в две сети: в адсл и к нам по витой паре. Так вот эта очередь нафик нам не нужна...пусть такие юзеры добавляют в друзья подсетку нашу либо сидят на своем адсл. Вот может кто посоветует как таких ограничивать и отслеживать?
|
|
|
Похожие темы
|
Сейчас: 27.11.2024, 17:23 |