Меню - "использовать Ник", API 2 |
Здравствуйте, гость ( Вход | Регистрация )
Меню - "использовать Ник", API 2 |
21.3.2009, 16:38
Сообщение
#1
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
Предлагаю идею!
Есть так назаываемый сэйскрипт, который дает возможность писать от любого ника, но команду приходится использовать каждый раз...частенько это неудобно... Предлагаю сделать такое меню: Использовать ник -> : 1)- Использовать ник для общего чата 2)- Использовать ник для ПМ 3)- Использовать ник для всего 4)- отключить ник При нажатии 1 и 2 или 3 в файл для того или иного юзера (в частности для админов) записывается соответсвующий выбранный им ник с параметром (1 or 2 or 3), и последующие сообщения этого юзера идут от этого ника, до тех пор пока он не обнулит запись (4) -Отключить ник) Вроде все! Идею предложил...кто что думает? ГОТОВО. Название скрипта: Saynick (писал в дополнение скрипту "Сказать от любого имени") Версия скрипта: 1.0 Версия API: API2 Автор: Vicious - Возможность зарезервировать любой ник для общего чата(через меню), после чего все сообщения в общий чат будут идти от этого ника, до тех пор пока вы не обнулите записи ников. (так же через меню) - Возможность зарезервировать ник для ЛС, причем ответы, направленные зарезервированному вами пользователю, теперь будут приходить вам. |
|
|
21.3.2009, 16:54
Сообщение
#2
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Была такая идея. До практической реализации дело не дошло.
|
|
|
22.3.2009, 21:00
Сообщение
#3
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Идея не плохая, однако она требует структурированного и универсального написания.
|
|
|
23.3.2009, 8:06
Сообщение
#4
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
|
|
|
24.3.2009, 23:11
Сообщение
#5
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
мучаюсь -мучаюсь ...нефига не получается! надо учить матчасть с нуля видать...никак не вьеду по нормальному как работать с текстовыми файлами...записывать, в них то что мне нужно и потом извлекать из них то что мне нужно.
Тобишь хочу чтобы при нажатии в меню "использовать ник" в текстовый файл записывалось что такому нику присвоилось такое-то имя....и дальше при ChatArrival смотрелось присвоен ли в этом текстовом файле данному нику какое-нибудь имя или нет...! ну вообщем вы поняли о чем я....но нефига не получается! Может все таки луа -мастеры отзовутся? |
|
|
24.3.2009, 23:18
Сообщение
#6
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
я не мастер... но проще всего будет инфу в файле хранить в виде таблицы. функции сохранения можно найти в разделе для разработчииков ==>> склад функций. пример работы с таблицами можешь взять из любого скрипта. например из этой темы http://mydc.ru/topic602.html
|
|
|
24.3.2009, 23:48
Сообщение
#7
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
я не мастер... но проще всего будет инфу в файле хранить в виде таблицы. функции сохранения можно найти в разделе для разработчииков ==>> склад функций. пример работы с таблицами можешь взять из любого скрипта. например из этой темы http://mydc.ru/topic602.html Да согласен, вообщем то я и пробовал в виде таблицы...по примеру скрипта одного...но у меня каждый раз перезаписывается текстовый файл, а не добавляется...хотя код скопирован со скрипта в котором добавлялось и кроме значений того, ЧТО добавлять я там не менял...(вроде бы) Вот код на данном этапе: Код sBot = SetMan.GetString(21) -- Имя бота tNickam = {} tNickpm = {} function OnStartup() sFileam = Core.GetPtokaXPath().."scripts/Saynick/Nickam.tbl" sFilepm = Core.GetPtokaXPath().."scripts/Saynick/Nickpm.tbl" if loadfile(sFileam) and loadfile(sFilepm) then dofile(sFileam) dofile(sFilepm) end TmrMan.AddTimer(1800000,"OnExit") end function OnExit() --WriteTable(tNicks, "saynick", sFile) end function UserConnected(tUser) --if tUser.iProfile == 0 then local sMsg = "$UserCommand 1 1 **УПРАВЛЕНИЕ\\*Сказать\\Использовать ник для AM$<%[mynick]> !addamnick %[line:Введите ник для AM]||".. "$UserCommand 1 1 **УПРАВЛЕНИЕ\\*Сказать\\Использовать ник для PM$<%[mynick]> !addpmnick %[line:Введите ник для PM]||".. "$UserCommand 1 1 **УПРАВЛЕНИЕ\\*Сказать\\Сбросить ники$<%[mynick]> !remnicks||".. "$UserCommand 1 2 **УПРАВЛЕНИЕ\\*Сказать\\Использовать этот ник для AM$<%[mynick]> !addamnick %[nick]||".. "$UserCommand 1 2 **УПРАВЛЕНИЕ\\*Сказать\\Использовать этот ник для PM$<%[mynick]> !addpmnick %[nick]||" Core.SendToUser(tUser, sMsg) --end end OpConnected = UserConnected RegConnected = UserConnected function ChatArrival(tUser, sData) sData = string.sub(sData,1,-2) nick = tUser.sNick local _,_,cmd = string.find(sData, "%b<>%s+(%S+)") if cmd == "!addamnick" then local _,_,sNick = string.find(sData, "%b<>%s+%S+%s+(%S+)") if not sNick then else if sNick ~= tUser.sNick then tNickam[tUser.sNick] = {} table.insert(tNickam[tUser.sNick], sNick) WriteTable(tNickam, "Nickam", sFileam) else Core.SendToUser(tUser, "<"..sBot.."> Этот ник у вас по умолчанию в настройках DC") end end return true end end function WriteTable(tTable, tablename, file) local handle = io.open(file, "w") Serialize(tTable, tablename, handle) handle:close() end function Serialize(tTable, sTableName, hFile, sTab) sTab = sTab or ""; hFile:write(sTab..sTableName.." = {\n" ); for key, value in pairs(tTable) do local sKey = (type(key) == "string") and string.format("[%q]",key) or string.format("[%d]",key); if(type(value) == "table") then Serialize(value, sKey, hFile, sTab.."\t"); else local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value); hFile:write(sTab..'\t["'..nick..'"] = '..sValue); end hFile:write(",\n"); end hFile:write(sTab.."}"); end Сразу говорю, скорее всего тут и оишбки и вообще попытка написать скрипт "по русски"...но увы как могу...я тока начинающий... |
|
|
25.3.2009, 0:10
Сообщение
#8
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Переменные должны быть одинаковы
Код WriteTable(tNickam, "tNickam", sFileam)
|
|
|
25.3.2009, 0:53
Сообщение
#9
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
|
|
|
25.3.2009, 8:06
Сообщение
#10
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
заменить это
Код WriteTable(tNickam, "Nickam", sFileam) на Код WriteTable(tNickam, "tNickam", sFileam) зачем под ник вводить подтаблицу? Код tNickam[tUser.sNick] = {} table.insert(tNickam[tUser.sNick], sNick) всё равно он не сможет писать с нескольких ников одновременно! Код tNickam[tUser.sNick] = sNick и всё)))) |
|
|
25.3.2009, 12:36
Сообщение
#11
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
Спасибо, поменял. Уже гораздо лучше, но теперь вот что...
К примеру юзер№1 присваивает себе ник "maxim"...в таблицу записывает: Код tNickam = { ["юзер№1"] = "maxim", } Теперь юзер№2 присваивает себе ник "cooler" таблица примет вид: Код tNickam = { ["юзер№2"] = "maxim", ["юзер№2"] = "cooler", } Т.е. каждый новый ник записывается для всех зарезервированных имен. Проверял открывая два разных клиента. |
|
|
25.3.2009, 12:44
Сообщение
#12
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Ключи таблиц уникальны и не могут совпадать, то есть
Код tNickam = { это не правильно. Такого не может быть.
["юзер№2"] = "maxim", ["юзер№2"] = "cooler", } |
|
|
25.3.2009, 12:57
Сообщение
#13
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
Ключи таблиц уникальны и не могут совпадать, то есть Код tNickam = { это не правильно. Такого не может быть.["юзер№2"] = "maxim", ["юзер№2"] = "cooler", } Ну как так не может? Проверь попробуй код на деле, я говорю то что есть. У меня именно так и записывает, как описал выше! Вот еще раз весь код который щас имею: (правда пока что он имеет меня) Код --[[
Название скрипта: Saynick Версия скрипта: 1.0 Версия API: API2 Автор: Vicious ]]-- sBot = SetMan.GetString(21) -- Имя бота tNickam = {} tNickpm = {} function OnStartup() sFileam = Core.GetPtokaXPath().."scripts/Saynick/Nickam.tbl" sFilepm = Core.GetPtokaXPath().."scripts/Saynick/Nickpm.tbl" if loadfile(sFileam) and loadfile(sFilepm) then dofile(sFileam) dofile(sFilepm) end TmrMan.AddTimer(1800000,"OnExit") end function OnExit() --WriteTable(tNicks, "saynick", sFile) end function UserConnected(tUser) --if tUser.iProfile == 0 then local sMsg = "$UserCommand 1 1 **УПРАВЛЕНИЕ\\*Сказать\\Использовать ник для AM$<%[mynick]> !addamnick %[line:Введите ник для AM]||".. "$UserCommand 1 1 **УПРАВЛЕНИЕ\\*Сказать\\Использовать ник для PM$<%[mynick]> !addpmnick %[line:Введите ник для PM]||".. "$UserCommand 1 1 **УПРАВЛЕНИЕ\\*Сказать\\Сбросить ники$<%[mynick]> !remnicks||".. "$UserCommand 1 2 **УПРАВЛЕНИЕ\\*Сказать\\Использовать этот ник для AM$<%[mynick]> !addamnick %[nick]||".. "$UserCommand 1 2 **УПРАВЛЕНИЕ\\*Сказать\\Использовать этот ник для PM$<%[mynick]> !addpmnick %[nick]||" Core.SendToUser(tUser, sMsg) --end end OpConnected = UserConnected RegConnected = UserConnected function ChatArrival(tUser, sData) sData = string.sub(sData,1,-2) nick = tUser.sNick local _,_,cmd = string.find(sData, "%b<>%s+(%S+)") if cmd == "!addamnick" then local _,_,sNick = string.find(sData, "%b<>%s+%S+%s+(%S+)") if not sNick then Core.SendToUser(tUser, "<"..sBot.."> Вы не ввели ник!") else if sNick ~= tUser.sNick then tNickam[tUser.sNick] = sNick WriteTable(tNickam, "tNickam", sFileam) else Core.SendToUser(tUser, "<"..sBot.."> Этот ник у вас по умолчанию в настройках DC") end end return true end end function WriteTable(tTable, tablename, file) local handle = io.open(file, "w") Serialize(tTable, tablename, handle) handle:close() end function Serialize(tTable, sTableName, hFile, sTab) sTab = sTab or ""; hFile:write(sTab..sTableName.." = {\n" ); for key, value in pairs(tTable) do local sKey = (type(key) == "string") and string.format("[%q]",key) or string.format("[%d]",key); if(type(value) == "table") then Serialize(value, sKey, hFile, sTab.."\t"); else local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value); hFile:write(sTab..'\t["'..nick..'"] = '..sValue); end hFile:write(",\n"); end hFile:write(sTab.."}"); end |
|
|
25.3.2009, 14:12
Сообщение
#14
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Хаха.
Ну конечно у тебя будет повторяться, так как у тебя неправильно написана функция Serialize. Это что за самодеятельность: Код hFile:write(sTab..'\t["'..nick..'"] = '..sValue); Должно быть так: Код hFile:write(sTab.."\t"..sKey.." = "..sValue); Функция Serialize предназначена для рекурсивной записи в файл. Её никогда нельзя изменять. |
|
|
25.3.2009, 14:58
Сообщение
#15
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
Спс!
Да я догадывался что все дело в ней, просто чес говоря вообще не знаю принцип работы этой функции, не дадите ссылку где есть описалово (желательно на русс, но если нет то и на англ сойдет)... Заранее спасибо! |
|
|
25.3.2009, 15:14
Сообщение
#16
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
зачем новичку забивать себе этим голову. Для начало надо узнать структура таблиц и правильно научится с ними работать!
|
|
|
25.3.2009, 15:19
Сообщение
#17
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
ссылка
|
|
|
26.3.2009, 18:57
Сообщение
#18
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
Все...сделал вроде как, работает норм, хотя думаю не все в нем идеально))) . Спасибо всем, кто помогал. Скрипт выкладываю, проверяйте, говорите где недоработки и оишибки еще остались, буду исправлять.
|
|
|
27.3.2009, 1:42
Сообщение
#19
|
|
Начинающий Группа: Пользователи Сообщений: 14 Регистрация: 10.1.2009 Пользователь №: 1 752 Спасибо сказали: 0 раз |
5+ Работает...пока нормал )) Спс!
|
|
|
27.3.2009, 12:38
Сообщение
#20
|
|
Продвинутый участник Группа: Пользователи Сообщений: 173 Регистрация: 26.1.2009 Из: Saratov Пользователь №: 1 965 Спасибо сказали: 7 раз |
Хм...вопросик вот, хочу улучшить скрипт.
Код tNickam = { ["[len]vicious"] = "ухаха", } В данном коде tNickam["[len]vicious"] возвращает "ухаха" Как мне получить само "[len]vicious"? (ессно это не tUser.sNick) |
|
|
Похожие темы
|
Сейчас: 27.11.2024, 6:51 |