При появлении нового ника, ему отправляется заготовленный текст |
Здравствуйте, гость ( Вход | Регистрация )
При появлении нового ника, ему отправляется заготовленный текст |
15.10.2009, 15:10
Сообщение
#21
|
|
Постоялец Группа: Пользователи Сообщений: 454 Регистрация: 17.10.2008 Из: Новосибирск Пользователь №: 825 Спасибо сказали: 90 раз |
... а начать героическую борьбу за бюрократическое складирование ников в таблицу можно вот с чего :
Код -------------------------- Стандартная функция сохранения таблицы ------------------------------------------------------ function SaveToFile(sFileWay, tTable, sTableName) local sHandle = io.open(sFileWay,"w+") Serialize(tTable, sTableName, sHandle) sHandle:flush() sHandle:close() end function Serialize(tTable, sTableName, sHandle, sTab) local sTab = sTab or '' if sTableName ~= '' then sHandle:write(sTab..sTableName.." = {\n") else sHandle:write(sTab.."return {\n"); end for key, value in pairs(tTable) do local sKey = (type(key) == "string") and ("[%q]"):format(key) or ("[%d]"):format(key) if type(value) == "table" then Serialize(value, sKey, sHandle, sTab.."\t") else local sValue = (type(value) == "string") and ("%q"):format(value) or tostring(value) sHandle:write(sTab.."\t"..sKey.." = "..sValue) end sHandle:write(",\n") end sHandle:write(sTab.."}") end При вызове SaveToFile(sFileWay, tTable, sTableName) нужно указать соответственно путь к файлу-таблице, саму переменную-таблицу, которую будем сохранять, и имя, с которым таблица будет сохранена в файл. Если вместо имени указать пустую строку Код '' то таблица сохранится как Код return { ... } а имя ей будет присваиваться при подключении, которое ( если не нужна доп. проверка существования и синтаксиса таблицы) может выглядеть так : Код tTable = dofile(sFileWay) Если нужна такая проверка, то перед подключением нужно делать вызов loadfile: Код if loadfile(sFileWay) then tTable = dofile(sFileWay) ... Функция Serialize формирует внутритабличные данные и записывает их в строки файла в удобном для глаза виде, с учетом типа данных, которые могут быть числами, строками, или опять же таблицами. Но вообще говоря, думаю, рано или поздно встанет проблема оценки актуальности данных в таблице и автоочистки таблицы от данных, утративших актуальность. Т.к. до бесконечности раздувать таблицу, наверное, неразумно. |
|
|
15.10.2009, 20:29
Сообщение
#22
|
|
Активный участник Группа: Пользователи Сообщений: 89 Регистрация: 9.6.2008 Из: Крым Пользователь №: 23 Спасибо сказали: 5 раз |
Спасибо конечно... Если бы ещё кто на русский язык перевёл.
А нельзя ли из этого сделать готовый скрипт? Я например, не знаю как это складывать. |
|
|
19.10.2009, 14:41
Сообщение
#23
|
|
Абсолютный новичок Группа: Пользователи Сообщений: 9 Регистрация: 11.10.2009 Пользователь №: 4 695 Спасибо сказали: 0 раз |
Добрый день, тут нужна помощь по данному скрипту а собственно можно ли сюда както добавить ип адреса исключения которые попадают в диапазон но сообщение им не отправляется.
local sDiap = "10.31.%d+.%d+" -- шаблон диапазона local sBot = nil -- ник бота или nil для использования ника главного бота local sMsg = [[ Здесь пишем текст сообщения, отсылаемый в приват пользователям из диапазона ]] function OnStartup() if not sBot then sBot = SetMan.GetString(21) end end function UserConnected(tUser) if tUser.sIP:find(sDiap) then Core.SendPmToUser(tUser, sBot, sMsg) end end RegConnected = UserConnected OpConnected = UserConnected |
|
|
19.10.2009, 15:03
Сообщение
#24
|
|
Постоялец Группа: Пользователи Сообщений: 454 Регистрация: 17.10.2008 Из: Новосибирск Пользователь №: 825 Спасибо сказали: 90 раз |
Нужно добавить таблицу исключений :
Код local tExcept = { ["10.31.255.255"] = true, ... } И изменить функцию : Код function UserConnected(tUser)
if tUser.sIP:find(sDiap) and not tExcept[tUser.sIP] then Core.SendPmToUser(tUser, sBot, sMsg) end end |
|
|
20.10.2009, 10:52
Сообщение
#25
|
|
Абсолютный новичок Группа: Пользователи Сообщений: 9 Регистрация: 11.10.2009 Пользователь №: 4 695 Спасибо сказали: 0 раз |
Код local sDiap = "10.5.%d+.%d+" -- шаблон диапазона local tExcept = { "10.5.1.253" = true, "10.5.1.252" = true } local sBot = nil -- ник бота или nil для использования ника главного бота local sMsg = [[ Текст ]] function OnStartup() if not sBot then sBot = SetMan.GetString(21) end end function UserConnected(tUser) if tUser.sIP:find(sDiap) and not tExcept[tUser.sIP] then Core.SendPmToUser(tUser, sBot, sMsg) end end RegConnected = UserConnected OpConnected = UserConnected Не работает, говорит такое [10:50] Синтаксис C:\Program Files\PtokaX4\scripts\PM.lua:3: '}' expected (to close '{' at line 2) near '=' |
|
|
20.10.2009, 12:12
Сообщение
#26
|
|
Постоялец Группа: Пользователи Сообщений: 454 Регистрация: 17.10.2008 Из: Новосибирск Пользователь №: 825 Спасибо сказали: 90 раз |
Пардон, умудрился я забыть квадратные скобки ))))
Вот так надо : Код local tExcept = { ["10.5.1.253"] = true, ["10.5.1.252"] = true, } |
|
|
20.10.2009, 16:10
Сообщение
#27
|
|
7 квадратиков Группа: Модераторы Сообщений: 793 Регистрация: 21.1.2009 Пользователь №: 1 895 Спасибо сказали: 301 раз |
Есть еще одна ошибка. Строку сообщения нужно заключить в кавычки : ... А квадратные скобки в сообщении может быть как раз таки и не нужны. И давно |
|
|
20.10.2009, 16:24
Сообщение
#28
|
|
Постоялец Группа: Пользователи Сообщений: 454 Регистрация: 17.10.2008 Из: Новосибирск Пользователь №: 825 Спасибо сказали: 90 раз |
Виноват, не знал такой фишки.
Пост поправлен. P.S. А какой именно смысл в использовании Код [[ text ]] вместо Код "text" ? |
|
|
20.10.2009, 16:50
Сообщение
#29
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
многострочная надпись в квадратных скобках будет представлена пользователю в том виде в котором она занесена в скрипт, а "" придётся вносить \t \r \n и т.д.
|
|
|
20.10.2009, 16:54
Сообщение
#30
|
|
Постоялец Группа: Пользователи Сообщений: 454 Регистрация: 17.10.2008 Из: Новосибирск Пользователь №: 825 Спасибо сказали: 90 раз |
О! Вот это - классная фишка.
|
|
|
Похожие темы
|
Сейчас: 23.11.2024, 1:09 |