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

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

MyDC.ru _ Kорзина _ От: Функции Для Разработчиков

Автор: Nickolya 23.9.2008, 22:48

Цитата
return type(t)=="teble"

Это очепятка или я уже забыл как программировать на луа? big_smile.gif

Автор: Setuper 23.9.2008, 23:08

Опечатка при переносе на форум. Вырезал функции из скрипта, что иногда проблемно)))
Просто у меня в скриптах немного по-другому. Все lua функции переопределены. Тогда в случае смены синтаксиса функций lua достаточно будет переписать всеголишь 1 файл скрипта, а не лазить по всем файлам огромного скрипта и изменять во всех файлах с не одной тысячью строк)))

файл lua.lua:

Код
function tLua:Table(t)                return type(t)=="table" end


файл sys.lua:
Код
function tSys:Table(t)                return tLua:Table(t) and t end

Автор: Setuper 9.2.2009, 23:03

Есть функция, которая выполняется ещё раньше http://mydc.ru/topic915.html

Автор: alex82 9.2.2009, 23:10

Ну, тады так:

Код
function SupportsArrival(user,data)
    Core.SendToUser(user, "Здесь пишем наше сообщение")
end

В этом случае сообщение будет отправлено даже если юзер не смог войти на хаб. big_smile.gif

PS. Жаль что нету LockArrival(), а то можно было бы ещё раньше. bad_smile.gif

Автор: Setuper 9.2.2009, 23:18

Разные функции - разное назначение. Функция SupportsArrival выполняется раньше, однако в этой функции определён только ip адрес пользователя, поэтому отправка по нику (Core.SendToNick) не возможна. Оптимально именно в этой функции проверять бан по ip, но к сожалению стандартный бан ptokax проверяется позже, что является недостатком данного хаба.

Автор: alex82 9.2.2009, 23:22

Цитата
но к сожалению стандартный бан ptokax проверяется позже, что является недостатком данного хаба.

А что это меняет? (в плане безопасности)

Автор: Setuper 9.2.2009, 23:24

Что за LockArrival()? Функция SupportsArrival - это первая функция, которая ловит первую команду пришедшую с клиента.

Цитата(alex82 @ 9.2.2009, 23:22) *
А что это меняет? (в плане безопасности)

Это влияет на быстродействие. Зачем получать от клиента другие команды, когда можно "послать" его при первой же команде.

Автор: alex82 9.2.2009, 23:25

Цитата
Что за LockArrival()?

Ну дык я и говорю - жаль что такой нету. big_smile.gif

Автор: Setuper 9.2.2009, 23:29

А такой функции и не может быть. Ты имеешь ввиду ловить команду $Lock? Так это бесполезно делать, ведь эта команда отсылается хабом клиенту. Хаб должен получить от клиента команду, тогда он будет уверен, что на другой стороне действительно кто-то есть - это предусматривает случай мгновенного отключения клиента по собственному желанию.

Автор: alex82 9.2.2009, 23:39

Цитата
Это влияет на быстродействие. Зачем получать от клиента другие команды, когда можно "послать" его при первой же команде.

Типа так:
Код
function SupportsArrival(user,data)
    if GetBan(user.sIP) then Core.Disconnect(user) end
end

?

Автор: Setuper 9.2.2009, 23:42

Но только в функции SupportsArrival

Автор: sphinx 10.2.2009, 0:54

А можно подробнее? Я из этого обсуждения не понял, возможно ли проверить бан юзера в ValidateNickArrival.

И второе, возможно ли отправить сообщение юзеру, если он предоставил неверный пароль. Вот такой код почему-то не работает:

Код
function PasswordArrival(sUser, sData)
    local _,_,password = sData:find("^$MyPass%s(%S+)|$")
    local pass = RegMan.GetReg(sUser.sNick).sPassword
    local msg="Wrong password for "..sUser.sNick
    if password ~= pass then
            Core.SendToOpChat("<"..SetMan.GetString(21).."> "..msg)
    end
end

Автор: Setuper 10.2.2009, 1:16

В том то и дело, что нельзя - это недостатки ptokax.

Автор: district 10.6.2009, 4:11

Сравнительно простой способ улучшения сортировки чисел в таблицах, а точнее - числовых выражений IP-адресов и значений os.time. Было замечено, что функция table.sort хорошо сортирует строки, и не очень хорошо - числа. Поэтому на период сортировки к строке, содержащей нуждающийся в сортировке числовой параметр, спереди добавляется через какой-то разделительный символ, например, $, составная строка, содержащая а)букву, соответствующую разрядности сортируемого числа и б)непосредственно буквенное выражение сортируемого числа. После сортировки, для непосредственного показа, эта добавленная строка и разделительный символ - отрезаются.
В приведенном примере разрядность ограничена цифрой 10, этого достаточно для работы с IP-адресами и современными значениями os.time, если потребуется увеличить охват, нужно просто добавить в таблицу соответствующие числа и буквы.

Код
-- Таблица и функция для улучшенной сортировки чисел в таблицах :
local tNums = { ["0"] = "A", ["1"] = "B", ["2"] = "C", ["3"] = "D", ["4"] = "E", ["5"] = "F",
["6"] = "G", ["7"] = "H", ["8"] = "I", ["9"] = "J", ["10"] = "K",}

function NumToLetter(n)
local str = tostring(n)
local r = tNums[tostring(str:len())]
    for S in string.gmatch(str, "%S") do
        r = r..tNums[S]
    end
return r
end

Автор: Setuper 10.6.2009, 11:58

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

Вот накатал код. Всё отлично сортируется. Не понимаю какие у тебя проблемы:

Код
tTbl = {
  {
    168460408,
    "param_1",
  },
  {
    168460288,
    "param_2"
  },
  {
    172883967,
    "param_3"
  },
  {
    168460543,
    "param_4",
  },
}

Core.SendToAll"До сортировки:"

for k, v in ipairs(tTbl) do
  Core.SendToAll(tostring(v[1])..", "..v[2])
end

table.sort(tTbl, function(a, b) return a[1] > b[1] end)

Core.SendToAll"После сортировки по убыванию:"

for k, v in ipairs(tTbl) do
  Core.SendToAll(tostring(v[1])..", "..v[2])
end

Автор: district 10.6.2009, 17:38

Речь шла о сортировке чисел в строковом виде, как элементов индексированных таблиц, такой вот частный случай. Буду разбираться дальше, а предыдущий мой пост и этот пост прошу удалить.

Автор: Ksan 6.5.2010, 13:30

[Тут мышь погрызла часть сообщения...]

Написал ответ, отправил и удалил, чтоб не продолжать эту уже не очень актуальную тему. big_smile.gif А то получается оффтопик уже.

Автор: PomanoB 14.7.2010, 21:32

Такая тема уже есть в разделе про PtokaX, может быть перенести её в этот раздел, как и похожие темы, например http://mydc.ru/topic266.html, http://mydc.ru/topic1429.html и тд

Автор: Ksan 15.7.2010, 0:44

Есть тема 1 в 1 с предложенной - http://mydc.ru/topic334.html
Думаю, лучше первое сообщение отсюда перетащить туда, а не плодить темы, чтоб потом не искать там-сям..

Автор: Ksan 22.2.2014, 15:22

del