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

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

MyDC.ru _ Помощь по скриптам для PtokaX _ меню

Автор: Saymon 8.2.2010, 2:35

Видел на хабе озерки такое меню захотел к себе прикрутить. Скажите пожалуйста как сделать его.

пример
Меню хаба\\Информация для "..user.sNick.."\\Прислать меню
Нажимаешь - приходит сообщение "Меню было выслано"
И потом без переподключения на хаб уже это меню
Меню хаба\\Информация для "..user.sNick.."\\Партнёры
Меню хаба\\Информация для "..user.sNick.."\\FAQ
И тд..

Автор: evg 8.2.2010, 6:56

поидее при нажатии на "Прислать меню" выполняется команда

Цитата
Core.SendToNick(user.sNick, "$UserCommand 1 3 Меню хаба\\Информация для "..user.sNick.."\\Партнёры"||"))
и так далее.
За правильность не отвечаю, не проверял

Автор: Setuper 8.2.2010, 12:43

Да. Всё верно именно так и сделано. Очень грамотно сделано - отсылка меню по востребованию, а не каждый раз при входе.

Автор: Saymon 8.2.2010, 13:19

Попробовал не получилось shame.gif
Парни обьясните плиз как к этому прикрутить

Раскрывающийся текст
Код
sBot = SetMan.GetString(21)
HubName = SetMan.GetString(0)
tProfile = {
[-1] = 1, [0] = 1, [1] = 1, [2] = 1, [3] = 1, [4] = 1,
}

function UserConnected(user)
    Core.GetUserAllData(user)
    if tProfile[user.iProfile] == 1 then
          Core.SendToNick(user.sNick,"$UserCommand 0 3|")
          Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\Поддержи наш проект\\Спонсоры$<%[mynick]> !спонсоры||")
          Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\Поддержи наш проект\\Реквизиты$<%[mynick]> !реквизиты||")
          Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\"..HubName.."\\Администрация хаба$<%[mynick]> !admins||")
          Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\"..HubName.."\\Благодарности юзерам$<%[mynick]> !благодарности||")
          Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\"..HubName.."\\О хабе$<%[mynick]> !хабинфо||")
          Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\"..HubName.."\\Сообщение от хаба$<%[mynick]> !meshub||")
          Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\"..HubName.."\\Правая оговорка$<%[mynick]> !pog||")
          Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\"..HubName.."\\Правила хаба$<%[mynick]> !правила||")
          Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\"..HubName.."\\История чата хаба$<%[mynick]> !weblog||")
          Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\"..HubName.."\\Статистика хаба$<%[mynick]> !webstat||")
          Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\"..HubName.."\\Сайт хаба$<%[mynick]> !сайт хаба||")
          Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\Партнёры / Друзья$<%[mynick]> !партнёры||")
    end
end
OpConnected = UserConnected
RegConnected = UserConnected

Автор: Nickolya 8.2.2010, 13:42

1. Прикладывайте код в виде файла, так он не искажается
2. Я так понимаю меню удаляется и отправлется новое, подумайте над этим
3. Банальное логическое задание
4. Нужен обработчик команды отсылки меню
5. И простая функция работающая по получению команды от юзеру, аналогичная отправке меню при входе
6. Все просто, попробуйте сами сделать, давно уже в этом деле, надо лишь подумать как сделать

Автор: Saymon 8.2.2010, 16:12

Nickolya, Не ругайся big_smile.gif

Повозился и вот что вышло  menu.lua ( 7.18 килобайт ) : 41

Вроде как работает big_smile.gif
К сожелению в каждом из нас есть такая зараза - лень.

Автор: Артём 8.2.2010, 16:37

Saymon всё бы хорошо, но если ещё пару раз отослать менюшку то получается матрёшка, а нужно чтоб только один раз отсылало, а во второй раз "Вы уже получили меню"

Автор: Saymon 8.2.2010, 16:45

оу.. а вот с этим... я честно говоря не знаю beat_plaster.gif shame.gif
С матрёшкой ты к сожелению прав. Не заметил но после нескольких отсылок белеберда

Раскрывающийся текст

Вот как бы теперь сделать чтобы нельзя было несколько раз тыкать или на последующие разы выходило типа "Ошибка, Меню уже было вам выслано."
Что бы снова можно было воспользоватся командой получить меню нужно переподключится на хаб.
И странно заметил что меню то высылается то нет.

Автор: ustas 8.2.2010, 20:24

пробуй
 tset1.lua ( 6.02 килобайт ) : 30

Автор: Saymon 8.2.2010, 20:36

Спасибо но это тоже самое что и пару постами выше.

Код
Core.SendToUser(user, "<"..sBot.."> Меню уже было отправлено.")
это сообщение не выводится
И меню несколько раз отправляется big_smile.gif

Автор: Wariner 8.2.2010, 22:01

ещё одна мазня на пробу)))

 menu.lua ( 6.01 килобайт ) : 32
 

Автор: Saymon 8.2.2010, 22:24

Wariner
на птоке 0412 ошибка big_smile.gif
[22:21] Синтаксис C:\SERVER\trance\scripts\menu.lua:12: attempt to index global 'user' (a nil value)

Автор: prapor 8.2.2010, 23:47

Цитата(Saymon @ 8.2.2010, 22:24) *
Wariner
на птоке 0412 ошибка big_smile.gif
[22:21] Синтаксис C:\SERVER\trance\scripts\menu.lua:12: attempt to index global 'user' (a nil value)

Исправь все строчки с user.sNick на tUser.sNick

Автор: Saymon 9.2.2010, 0:15

Это я изначально пробовалbig_smile.gif
[00:15] Синтаксис C:\SERVER\trance\scripts\menu.lua:12: attempt to index global 'tUser' (a nil value)

Автор: prapor 9.2.2010, 0:43

Я убрал tUser.sNick из меню, скрипт заработал, меню присылается, но после переподключения к хабу меню не присылается, пишет мол уже выслано)

думаю к нему нужно прикрепить функцию OnExit

Автор: Saymon 9.2.2010, 0:47

Странно, я сразу изменил и ошибка!

Автор: Wariner 9.2.2010, 9:41

дубль два

 menu.lua ( 5.89 килобайт ) : 22
 

Автор: Артём 9.2.2010, 12:35

и второй дубль не удачный big_smile1.gif , команду в чат пропускает, а ошибок нет. big_smile.gif

Автор: Nickolya 9.2.2010, 12:54

1. Спецсимволы в регулярках надо экранировать:

Код
    local sCmd = sData:match"^%b<>%s+[!+-/*](%S+)"
потом действие
Код
    local sData = sData:sub(1,-2)
немного лишнее если все учесть в регулярке, а вообще надо бы написать проще:
Код
function ChatArrival(tUser, sData)
    local sCmd = sData:match"^%b<>%s+%p(%S+).*|"
    if sCmd == "usermenu" then

Мое замечание о команде удаления меню было проигнорировано, а зряbig_smile.gif
На сколько я помню это команда
Код
$UserCommand 255 15

Единственное, это снесет все меню, но на озерках это грамотно учтено т.к. меню не разбросано по скриптам а все в 1 боте big_smile.gif
Можно попробовать указать меню как аргумент, но не знаю получится ли, протестируйте, потом отпишите как, к примеру
Код
$UserCommand 255 15 Информация для "..tUser.sNick.."\\$|"
или
Код
$UserCommand 255 15 Информация для "..tUser.sNick.."$|"

Автор: Wariner 9.2.2010, 21:28

насчёт регулярок, просто когда на скорую руку пишешь не углубляешься так))))
а по поводу команды очистки так это надо все скрипты перерывать.....

не знаю почему у вас не работает... у меня всё пашет. подправил вывод ника в меню и проверил работу. двигайте в списке скриптов)))

 menu.lua ( 5.77 килобайт ) : 90
 

Автор: Saymon 9.2.2010, 22:11

Wariner, Спасибо огромнейшее. Отлично работает big_smile.gif

Автор: Nickolya 10.2.2010, 12:27

Wariner, я тоже над этим думал, а команда удаления конкретного меню не протестирована? А то у меня пока нет возможности попробовать.
Мне пришло в голову вот что: можно переделать все скрипты под эту технологию, и при получении этой команды не возвращать true чтобы команда шла по всем скриптам, а в самом конце списка скриптов сделать скрипт-заглушку которая будет блокировать вывод команды в чат, но это так, идея для тех кто знает как делать, в практику я думаю на птоке это не войдет.

Автор: DrakonSP 13.2.2010, 15:03

Не плохо было бы если меню "Прислать меню" исчезало после отправки меню.

Автор: Wariner 13.2.2010, 17:41

Цитата(Nickolya @ 9.2.2010, 12:54) *
Мое замечание о команде удаления меню было проигнорировано, а зряbig_smile.gif
На сколько я помню это команда
Код
$UserCommand 255 15

Единственное, это снесет все меню, но на озерках это грамотно учтено т.к. меню не разбросано по скриптам а все в 1 боте big_smile.gif
Можно попробовать указать меню как аргумент, но не знаю получится ли, протестируйте, потом отпишите как, к примеру
Код
$UserCommand 255 15 Информация для "..tUser.sNick.."\\$|"
или
Код
$UserCommand 255 15 Информация для "..tUser.sNick.."$|"

она стирает все меню или я что то не правильно сделал.....

PS: поэтому убрать меню для получении менюшки нельзя!

Автор: *FoxMalder* 28.2.2010, 11:53

помогите скрестить этот скрипт  332.txt ( 1.27 килобайт ) : 21
с http://mydc.ru/ipb.html?act=attach&type=post&id=4050 который сделал Wariner )

Автор: TiGRpp 1.3.2010, 22:21

Цитата(Wariner @ 9.2.2010, 22:28) *
насчёт регулярок, просто когда на скорую руку пишешь не углубляешься так))))
а по поводу команды очистки так это надо все скрипты перерывать.....

не знаю почему у вас не работает... у меня всё пашет. подправил вывод ника в меню и проверил работу. двигайте в списке скриптов)))

Спасибо, работает на Птохе 4.1.2 .
В отношении удаления меню - пока не накопил опыта использования того, что есть...

Но вот потребовалось сделать вариант отсылки одного и того же меню, но на разных языках...полагаю тупо поставить пару этих скриптов параллельно. Возьметесь доработать этот, чтобы не городить ничего?