Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы) |
Здравствуйте, гость ( Вход | Регистрация )
Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы) |
11.1.2011, 18:54
Сообщение
#801
|
|
Продвинутый участник Группа: Пользователи Сообщений: 104 Регистрация: 1.4.2009 Из: Россия Пользователь №: 2 871 Спасибо сказали: 42 раза |
Если значение:
Код if #sMsg != 0 then то при старте скрипта ошибка: Если исправить на Код if #sMsg ~= 0 then То все работает отлично Вы просто наверно ошиблись клавишей. Простите. |
|
|
11.1.2011, 20:21
Сообщение
#802
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
хехе.
Да да, я не клавишей ошибся, я языком ошибся. Написал как в с++ |
|
|
16.1.2011, 18:26
Сообщение
#803
|
|
Активный участник Группа: Пользователи Сообщений: 94 Регистрация: 2.10.2010 Из: Якутия, г.Нерюнгри Пользователь №: 7 820 Спасибо сказали: 21 раз |
Вроде всё норм, код:
Код function ChatArrival(tUser, sData) sData = sData:sub(1,-2) for g1, data1 in sData:gmatch"<g1 name=\"(.-)\">(.-)</g1>" do Core.SendToNick(tUser.sNick, "{\""..g1.."\",") for count1, g2, data2 in data1:gmatch"<g2 elementsCount=\"(%d-)\" name=\"(.-)\">(.-)</g2>" do Core.SendToNick(tUser.sNick, "{\""..g2.."\", {") for address, c1, c2, c3, city, name, t1, t2, t3 in data2:gmatch"<e address=\"(.-)\" c1=\"(.-)\" c2=\"(.-)\" c3=\"(.-)\" city=\"(.-)\" name=\"(.-)\" t1=\"(.-)\" t2=\"(.-)\" t3=\"(.-)\"/>" do Core.SendToNick(tUser.sNick, "{\""..address.."\", \""..c1.."\", \""..c2.."\", \""..c3.."\", \""..city.."\", \""..name.."\", \""..t1.."\", \""..t2.."\", \""..t3.."\",},") end Core.SendToNick(tUser.sNick,"},\n},") end Core.SendToNick(tUser.sNick,"},") end end работает (я сделал так) только приходится по немногу перебирать БД (вводить в чат значения из БД на XML и получать ответ в чате), что не устраивает. А такая конструкция не сработала: Код sFile = Core.GetPtokaXPath().."scripts/Games/BIS.txt" function ChatArrival(tUser, sData) sData = LoadText(sFile) for g1, data1 in sData:gmatch"<g1 name=\"(.-)\">(.-)</g1>" do Core.SendToNick(tUser.sNick, "{\""..g1.."\",") for count1, g2, data2 in data1:gmatch"<g2 elementsCount=\"(%d-)\" name=\"(.-)\">(.-)</g2>" do Core.SendToNick(tUser.sNick, "{\""..g2.."\", {") for address, c1, c2, c3, city, name, t1, t2, t3 in data2:gmatch"<e address=\"(.-)\" c1=\"(.-)\" c2=\"(.-)\" c3=\"(.-)\" city=\"(.-)\" name=\"(.-)\" t1=\"(.-)\" t2=\"(.-)\" t3=\"(.-)\"/>" do Core.SendToNick(tUser.sNick, "{\""..address.."\", \""..c1.."\", \""..c2.."\", \""..c3.."\", \""..city.."\", \""..name.."\", \""..t1.."\", \""..t2.."\", \""..t3.."\",},") end Core.SendToNick(tUser.sNick,"},\n},") end Core.SendToNick(tUser.sNick,"},") end end -------------------- function LoadText(sFile) local message = "" local f = io.open( sFile , "r" ) if f then message = f:read("*all") message = message:gsub("|","") f:close() end return message end Не пойму почему (просто .txt в файл выводило). И как можно загрузив и обработав данные с файла, вывести их в файл? (это нужно, т.к. БД может меняться и соответственно в справочнике должны быть новые данные) Пока так, дальше буду меню делать под справочник.. P.S: Для Nickolya _ БД меняется и мне необходимо единожды преобразовать её в мета таблицу желательно прям в ДЦ и потом просто ею пользоваться. Столько дней тишина... где все? |
|
|
18.1.2011, 22:22
Сообщение
#804
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Как обычно, вы объясняете абстрактно, получаете абстрактный код... Можно было бы приложить твой справочник и тогда всё было бы намного очевидней, еще надо было всё рассказать и разжевать. Вообще зачем что-то выводить в чат? И зачем сохранять в файл? Потом этот файл прямо так и выводится через текстовые команды? Но там же таблица луа...
Не знаю, поможет ли этот код, но смотрите, пробуйте дальше... Код sFile = Core.GetPtokaXPath().."scripts/Games/BIS.txt"
sFile2 = Core.GetPtokaXPath().."scripts/Games/BIS_out.txt" function ChatArrival(tUser, sData) Load() end function Load() sData = LoadText(sFile) local sStr = "" for g1, data1 in sData:gmatch"<g1 name=\"(.-)\">(.-)</g1>" do sStr = sStr.."{\""..g1.."\"," for count1, g2, data2 in data1:gmatch"<g2 elementsCount=\"(%d-)\" name=\"(.-)\">(.-)</g2>" do sStr = sStr.."{\""..g2.."\", {" for address, c1, c2, c3, city, name, t1, t2, t3 in data2:gmatch"<e address=\"(.-)\" c1=\"(.-)\" c2=\"(.-)\" c3=\"(.-)\" city=\"(.-)\" name=\"(.-)\" t1=\"(.-)\" t2=\"(.-)\" t3=\"(.-)\"/>" do sStr = sStr.."{\""..address.."\", \""..c1.."\", \""..c2.."\", \""..c3.."\", \""..city.."\", \""..name.."\", \""..t1.."\", \""..t2.."\", \""..t3.."\",}," end sStr = sStr.."},\n}," end sStr = sStr.."}," end local f = io.open( sFile2 , "w+" ) f:write(sStr) f:flush() f:close() end function LoadText(sFile) local message = "" local f = io.open( sFile , "r" ) if f then message = f:read("*all") f:close() end return message end |
|
|
19.1.2011, 17:18
Сообщение
#805
|
|
Активный участник Группа: Пользователи Сообщений: 94 Регистрация: 2.10.2010 Из: Якутия, г.Нерюнгри Пользователь №: 7 820 Спасибо сказали: 21 раз |
Как обычно, вы объясняете абстрактно, получаете абстрактный код... Можно было бы приложить твой справочник и тогда всё было бы намного очевидней, еще надо было всё рассказать и разжевать. Вообще зачем что-то выводить в чат? И зачем сохранять в файл? Потом этот файл прямо так и выводится через текстовые команды? Но там же таблица луа... Всё работает. См. в прикреплённом файле (часть БД для наглядно-показательного примера).. можете посмотреть. а ввод-вывод используется только когда меняется БД для создания таблицы LUA. А пока хочу получить разрешение на использование базы на хабе.. (у соответствующей организации) В конце циклов сделал так: Код end sStr = sStr.." },\n },\n" end sStr = sStr.." },\n" end sStr = sStr.."}\n" sStr = sStr:gsub(""","\\\"") просто в базе кавычки идут как " И спасибо огромное за помощь. P.S: В приложенный скрипт я вставляю базу ручками. а как можно загрузить эту табличку из файла? А вот и сам отвечу! Почитал мануал и вот что вышло: Код sFile = Core.GetPtokaXPath().."scripts/Games/BiS_Out.txt"
function LoadBase() if not loadfile(sFile) then Core.SendToOpChat("Не загрузили базу данных справочника BiS") else dofile(sFile) end end
Прикрепленные файлы
|
|
|
26.1.2011, 19:25
Сообщение
#806
|
|
Активный участник Группа: Пользователи Сообщений: 94 Регистрация: 2.10.2010 Из: Якутия, г.Нерюнгри Пользователь №: 7 820 Спасибо сказали: 21 раз |
Есть такой вопрос: в некоторых скриптах использую такое меню
Код Core.SendToUser(user,"$UserCommand 1 3 Меню хаба\\Действия$<%[mynick]> !me %[line:Сообщение]|") Видел как после ответа в таком окошке появляется такое же с новым вопросом. Пробовал сделать также высылая юзеру команду.. но не получается. Подскажите как правильно такое осуществить. Сам отвечу: оказалось всё так просто... допишем так Код Core.SendToUser(user,"$UserCommand 1 3 Меню хаба\\Действия$<%[mynick]> !me %[line:Сообщение] %[line:Сообщение 2] %[line:Сообщение 3]|") хоть сотню окошек.. |
|
|
26.1.2011, 19:27
Сообщение
#807
|
|
Site Reliability Engineer Группа: Модераторы Сообщений: 1 772 Регистрация: 27.6.2009 Из: Чувашия, г. Чебоксары Пользователь №: 3 719 Спасибо сказали: 479 раз |
Код $<%[mynick]> !me %[line:Сообщение] %[line:Сообщение2] если правильно понял....
|
|
|
26.1.2011, 19:45
Сообщение
#808
|
|
Активный участник Группа: Пользователи Сообщений: 94 Регистрация: 2.10.2010 Из: Якутия, г.Нерюнгри Пользователь №: 7 820 Спасибо сказали: 21 раз |
Код $<%[mynick]> !me %[line:Сообщение] %[line:Сообщение2] если правильно понял....Да вот сам только увидел что ответили, а тут уж и мне светлая мысль пришла! Только отписался и увидел.. 1. И тогда сразу такой вопрос: строка получается только после ответа на все вопросы как я понял и нет возможности проверить первое условие (в 1-м окошке) и уж если не соответствует не выдавать второе и т.д. ? 2. И куда это сообщение Core.SendToOpChat(sData) отправляется? описание скудное и никак не заработало. |
|
|
26.1.2011, 21:23
Сообщение
#809
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
1 - так и есть
2 - в оп-чат; предварительно опчат должен быть включен и доступен тебе (твоему профилю) |
|
|
26.1.2011, 22:29
Сообщение
#810
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
Можно сделать проверку на пустые ответы...
Если не ответил на первый или ответил отрицательно (ну я не знаю, что там за вопросы и условия), то следующие просто пропускаешь нажатием ОК на пустое окошко.. |
|
|
27.1.2011, 0:20
Сообщение
#811
|
|
Активный участник Группа: Пользователи Сообщений: 94 Регистрация: 2.10.2010 Из: Якутия, г.Нерюнгри Пользователь №: 7 820 Спасибо сказали: 21 раз |
1.
Можно сделать проверку на пустые ответы... Если не ответил на первый или ответил отрицательно (ну я не знаю, что там за вопросы и условия), то следующие просто пропускаешь нажатием ОК на пустое окошко.. Такс это уже интересно примерно есть какой вариант (самый общий) разберёмся 2. 2 - в оп-чат; предварительно опчат должен быть включен и доступен тебе (твоему профилю) Вот и проблемка: Я не нашёл где и как включить, а как сделать доступным профилю? Код if (tUser.iProfile == 0 or tUser.iProfile == 1) then "Что надо тут написать?" end |
|
|
27.1.2011, 2:41
Сообщение
#812
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
AirKobra45, окошки будут всё равно, их содержание начинает проверяться только когда все окошки проходишь, неважно, писал там или нет. Но задачу можно облегчить пропусканием пустых окошек (в смысле ОК при пустом окошке), а далее уже проверка содержания каждого окошка, далее действия в зависимости от этих содержаний...Можно проверить наличие хоть чего-то, наличие отпределённых слов (ДА/НЕТ, 0/1/2 и т.д.), фиксация отсутствия вообще никаких символов, и в зависимости от всего этого строить дальнейшие действия скрипта.
Вот пример скрипта (тут только не заданы сами вопросы, на которые юзер должен ответить): Пример скрипта (клацнуть сюда изо всей силы): Код -- Юзер должен на все три вопроса ответить "да" (без кавычек), иначе - отказ -- Подачу вопросов, думаю, организуете сами local sBot = SetMan.GetString(21) local sMsgToUser1 = "*** Хорошо, уговорил, вот тебе база.." local sMsgToUser2 = "*** Эээ, мы пошутили, нет у нас никакой базы!" local sMsgToOpchat1 = " *** Юзер %s принимает все наши условия и достоин допуска к телу базы." local sMsgToOpchat2 = " *** Юзер %s не согласен с некоторыми или всеми нашими условиями и не может быть допущен к телу нашей базы!" function UserConnected(tUser) Core.SendToUser(tUser,"$UserCommand 1 3 Меню хаба\\Действия$<%[mynick]> !me 0%[line:Сообщение] 0%[line:Сообщение 2] 0%[line:Сообщение 3]|") end RegConnected = UserConnected OpConnected = UserConnected function ChatArrival(tUser, sData) local sData = sData:sub(1,-2) local sCmd, sAnsw1, sAnsw2, sAnsw3 = sData:match("^%b<>%s+(%S+)%s+(%d%S*)%s+(%d%S*)%s+(%d%S*)") local bYes1, bYes2, bYes3 = true, true, true if sCmd and sCmd == "!me" then bYes1 = YesNo(sAnsw1) bYes2 = YesNo(sAnsw2) bYes3 = YesNo(sAnsw3) -- Тут варианты в зависимости от ответов юзера if bYes1 and bYes2 and bYes3 then Core.SendToOpChat(sMsgToOpchat1:format(tUser.sNick)) Core.SendToUser(tUser, "<"..sBot.."> "..sMsgToUser1) -- тут ваши дальнейшие действия относительно юзера (у него все ответы положительные). Например, открываете ему вход в базу :) else Core.SendToOpChat(sMsgToOpchat2:format(tUser.sNick)) Core.SendToUser(tUser, "<"..sBot.."> "..sMsgToUser2) -- тут что ещё сами добавите end collectgarbage() return true end end function YesNo(answ) local b = true if answ ~= "0" then answ = answ:match"^%d(%S+)" if answ ~= "да" then b = false end else b = false end return b end UPD: Скрипт исправлен и передобавлен. |
|
|
30.1.2011, 13:29
Сообщение
#813
|
|
Активный участник Группа: Пользователи Сообщений: 94 Регистрация: 2.10.2010 Из: Якутия, г.Нерюнгри Пользователь №: 7 820 Спасибо сказали: 21 раз |
Какие есть ещё команды (работающие без скрипта?) подобные !me !passwd и прочие, как именно работают? Но лучше всего бы литературу ссылки.
Вот спасибки (за сообщение ниже) всё понял.. профиль в птоке настроил и ты видешь только то что доступно отлично! Всё ясно |
|
|
30.1.2011, 15:24
Сообщение
#814
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
Вот вся литература:
!help - в чат отправь. |
|
|
22.2.2011, 12:23
Сообщение
#815
|
|
Активный участник Группа: Пользователи Сообщений: 94 Регистрация: 2.10.2010 Из: Якутия, г.Нерюнгри Пользователь №: 7 820 Спасибо сказали: 21 раз |
смотрю тут по чужим скриптам такие записи:
Код f,e = io.open(Core.GetPtokaXPath().."scripts/Hider/HiddenUsers.lst", "w" ) или такое local chandle,e = io.open(Core.GetPtokaXPath().."scripts/asciiclock/"..cfileh, "r") и не пойму что это ",e" значит. Зачем оно? |
|
|
22.2.2011, 15:51
Сообщение
#816
|
|
7 квадратиков Группа: Модераторы Сообщений: 793 Регистрация: 21.1.2009 Пользователь №: 1 895 Спасибо сказали: 301 раз |
Сообщение об ошибке.
|
|
|
22.2.2011, 19:03
Сообщение
#817
|
|
Активный участник Группа: Пользователи Сообщений: 94 Регистрация: 2.10.2010 Из: Якутия, г.Нерюнгри Пользователь №: 7 820 Спасибо сказали: 21 раз |
Сообщение об ошибке. Если бы понял, то не спросил бы.. да и вообще у них данные поменять надо на такие (3 нижние строки): Код "r+": режим изменения, все ранее записанные данные сохраняются; "w+": режим изменения, все ранее записанные данные стираются; "a+": режим изменения с дозаписью в конец, все ранее записанные данные сохраняются, запись разрешена только в конец файла. (Им уже написал) А то у них там "+" нету, да ещё "w+" чего написали в нижней строке где должно быть почитайте! Зато в .chm файле о LUA у меня есть. Вопрос открыт. |
|
|
22.2.2011, 19:58
Сообщение
#818
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
Хмм...интересно, а какая разница тогда между "r+" и "a+" ?
Ведь по сути одно и то же...неужели в первом случае запись производится не в конец, а в начало? |
|
|
22.2.2011, 20:25
Сообщение
#819
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
На lua.ru плохо написано.
"r" - открыть файл для чтения. Файл должен существовать. "w" - создать пустой файл для записи. Если файл с таким именем уже существует, то его содержание будет удалено, а файл будет рассматриваться как новый пустой файл. "a" - добавить в файл. Дописывает данные в конец файла. Файл создается, если он не существует. "r+" - открыть файл как для чтения, так и для записи. Файл должен существовать. "w+" - создать пустой файл для чтения и записи. Если файл с таким именем уже существует, то его содержание будет удалено, а файл будет рассматриваться как новый пустой файл. "a+" - открыть файл для чтения и добавления. Все операции записи выполняются в конец файла. Файл создается, если он не существует. Кроме этого, для работы с бинарными файлами существуют моды: "rb", "wb", "ab", "r+b", "w+b", "a+b", то есть теже самые моды но с буквой b на конце. Буква b может также находится и в середине: "rb+", "wb+", "ab+". |
|
|
22.2.2011, 20:32
Сообщение
#820
|
|
Активный участник Группа: Пользователи Сообщений: 94 Регистрация: 2.10.2010 Из: Якутия, г.Нерюнгри Пользователь №: 7 820 Спасибо сказали: 21 раз |
на ответ ниже... всё понял.. если ошибка присваиваем второму значению отчёт так.. Нр: " **директория файла ** No such file or directory"
|
|
|
Похожие темы
|
Сейчас: 23.11.2024, 1:27 |