| 
 | 
Здравствуйте, гость ( Вход | Регистрация )
|   | 
| 
 | 
|  4.10.2010, 9:07 
				 Сообщение
					#721
					
				
			 | |
|  Активный участник    Группа: Пользователи Сообщений: 94 Регистрация: 2.10.2010 Из: Якутия, г.Нерюнгри Пользователь №: 7 820 Спасибо сказали: 21 раз  | 
				Быстрый ответ.. СПС  "Таймер на 1 секунду" посмотрим разберёмся. "В дистрибутиве птоки есть файл scripting-interface.txt, в котором подробно описаны ВСЕ функции API2" Про это знаю. Тут тоже тема есть описание функций с переводом  Но тут ведь главное их правильно использовать... "Получение случайного ника" Набираю код: Код function OnStartup ()     users = Core.GetOnlineUsers() name = users[math.random(1,#users)].sNick Core.SendToAll("<"..name.."> выбран случайным образом!") end Получаю это Код <Случайный ник> выбран случайным образом! Всё работает отлично... теперь только к БОТу прикреплю и всё... СПС Вот ещё такой вопрос возникает.. есть таблица: Код local TableN = {"Ник1","Ник2","Ник3",} Нужно сравнить полученное значение name (см. выше код) со всеми значениями в таблице, и выполнить действие в зависимости от результатов сравнения (я понял что это к командам LUA относится...), но если можно напишите как. | 
|  | |
|  4.10.2010, 9:13 
				 Сообщение
					#722
					
				
			 | |
|  RusHub team lead               Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз  | Код for i,v in ipairs(TableN) do if v == name then // ... end end Однако лучше сделать другую структуру таблицы: Код local TableN = {в этом случае не нужен будет цикл: ["Ник1"] = true, ["Ник2"] = true, ["Ник3"] = true, } Код if TableN[name] then // ... end | 
|  | |
|  4.10.2010, 10:15 
				 Сообщение
					#723
					
				
			 | |
|  Активный участник    Группа: Пользователи Сообщений: 94 Регистрация: 2.10.2010 Из: Якутия, г.Нерюнгри Пользователь №: 7 820 Спасибо сказали: 21 раз  | 
				Вот пробовал таймер: Код function OnStartup () n = 3 function Func() Core.SendToAll(""..n.." секунды прошли!") end TmrMan.AddTimer(n*1000,"Func") end Работает, НО... не останавливается. Каждые n секунд выдаётся сообщение.. как его остановьть, после выполнения команды? | 
|  | |
|  4.10.2010, 10:21 
				 Сообщение
					#724
					
				
			 | |
|  Site Reliability Engineer          Группа: Модераторы Сообщений: 1 772 Регистрация: 27.6.2009 Из: Чувашия, г. Чебоксары Пользователь №: 3 719 Спасибо сказали: 479 раз  | 
				а TmrMan.RemoveTimer(Id) удаляет таймер. АПИ....
				
				
				
			 | 
|  | |
|  4.10.2010, 10:37 
				 Сообщение
					#725
					
				
			 | |
|  Активный участник    Группа: Пользователи Сообщений: 94 Регистрация: 2.10.2010 Из: Якутия, г.Нерюнгри Пользователь №: 7 820 Спасибо сказали: 21 раз  | 
				И как его в вышеупомянутом коде использовать? (команду я знаю, использовать не умею...)
				
				
				
			 | 
|  | |
|  4.10.2010, 10:55 
				 Сообщение
					#726
					
				
			 | |
|  Главный ра******й тут...          Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 777 раз  | Код function OnStartup () n = 3 function Func() Core.SendToAll(""..n.." секунды прошли!") TmrMan.RemoveTimer(id) end id = TmrMan.AddTimer(n*1000,"Func") end AirKobra45, необходимо думать над документацией, там все вполне четко написано! | 
|  | |
|  4.10.2010, 14:34 
				 Сообщение
					#727
					
				
			 | |
|  Активный участник    Группа: Пользователи Сообщений: 94 Регистрация: 2.10.2010 Из: Якутия, г.Нерюнгри Пользователь №: 7 820 Спасибо сказали: 21 раз  | |
|  | |
|  4.10.2010, 15:38 
				 Сообщение
					#728
					
				
			 | |
|  Белый Волк          Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз  | Цитата Это над той что вместе с PtokaX идёт? Не только. ЭТО тоже нужно изучать не менее внимательно: | 
|  | |
|  4.10.2010, 16:12 
				 Сообщение
					#729
					
				
			 | |
|  Активный участник    Группа: Пользователи Сообщений: 94 Регистрация: 2.10.2010 Из: Якутия, г.Нерюнгри Пользователь №: 7 820 Спасибо сказали: 21 раз  | 
				Видел, но ещё не всё смотрел.. а хочится уже хоть что-то и чтоб работало!  Вот по мере и вопрос образовался. Задача: Послать сообщение от любого ника (случайного из списка пользователей) выбранному пользователю, при этом (то что не могу сделать, весь день и while и for мучал циклы но ничего нормального не придумал) ник от которого отправляется сообщение не должен быть в таблице исключений (это есть) и не должен быть ником получателя сообщения (toWho) если если это не так, то выбираем снова случайный ник и проверяем... Вот код: Код MyCmd = ( "!mes" or  "!мес" ) -- команда  Mess = "Внимание!! .... " -- сообщение (допустим реклама) TableN = { ["Ник1"] = true, ["Ник2"] = true, ["Ник3"] = true,} -- таблица ников исключений function ChatArrival(user,data) data = string.sub(data,1,-2) cmd,toWho = string.match(data, "%b<>%s+(%S*)%s*(%S*)") if (cmd == "!mes" or cmd == "!мес") then if not ( toWho == "") then if Core.GetUser(toWho,true) == nil then Core.SendToNick(user.sNick," Пользователя нет в сети, попробуйте позднее...") else toWho = Core.GetUser(toWho,true) ----Выбор случайного ника из списка юзеров: users = Core.GetOnlineUsers() name = users[math.random(1,#users)].sNick while TableN[name] do users = Core.GetOnlineUsers() name = users[math.random(1,#users)].sNick end if name ~= toWho then Core.SendToAll("<"..name.."> "..toWho.sNick..": "..Mess.."") end end else Core.SendToNick(user.sNick,"Вы не ввели имя пользователя!") end return true end end Как бы зациклить это чудо? (Вообще запутался...) while TableN[name] do users = Core.GetOnlineUsers() name = users[math.random(1,#users)].sNick end if name ~= toWho then Core.SendToAll("<"..name.."> "..toWho.sNick..": "..Mess.."") end | 
|  | |
|  4.10.2010, 21:30 
				 Сообщение
					#730
					
				
			 | |
|  Местный        Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз  | 
				Наверное так: Код TableN = {  ["Ник1"] = true,  ["Ник2"] = true,  ["Ник3"] = true,}Если ники всех юзеров, сидящих на хабе, есть в таблице исключений, будет уходить в бесконечный цикл и вешать хаб users = Core.GetOnlineUsers() repeat rand = math.random(1,#users) name1 = users[rand].sNick until TableN[name1] table.remove(users,rand) repeat name2 = users[math.random(1,#users)].sNick until TableN[name2] | 
|  | |
|  5.10.2010, 4:32 
				 Сообщение
					#731
					
				
			 | |
|  Активный участник    Группа: Пользователи Сообщений: 94 Регистрация: 2.10.2010 Из: Якутия, г.Нерюнгри Пользователь №: 7 820 Спасибо сказали: 21 раз  | 
				Я вообще запутался.. или не так вопрос поставил. Нужно проверить 2 условия: чтобы случайного ника не было в таблице или/и (т.е либо одно из условий либо оба) случайный ник не был равен toWho? в иных случаях заного запрвшиваем name (случайно). Или я как то задачу не так поставил, потому как я сам не могу понять под какие циклы "это" загнать! | 
|  | |
|  5.10.2010, 7:47 
				 Сообщение
					#732
					
				
			 | |
|  Главный ра******й тут...          Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 777 раз  | Код MyCmd = ( "!mes" or  "!мес" ) -- команда  Mess = "Внимание!! .... " -- сообщение (допустим реклама) TableN = { ["Ник1"] = true, ["Ник2"] = true, ["Ник3"] = true,} -- таблица ников исключений function ChatArrival(user,data) -- data = string.sub(data,1,-2) data = data:sub(1,-2) -- Лучше использовать методы! -- cmd,toWho = string.match(data, "%b<>%s+(%S*)%s*(%S*)") local cmd,toWho = data:match("^%b<>%s+(%S*)%s*(%S*)") -- Переменные надо объявлять локальными! if (cmd == "!mes" or cmd == "!мес") then -- if not ( toWho == "") then if toWho ~= "" then -- Так же наглядней и проще, чем выше!? local toWho = Core.GetUser(toWho,true) -- Чтобы несколько раз не вызывать функцию - выносим ее результат в локальную переменную -- if Core.GetUser(toWho,true) == nil then if not toWho then -- Вот так тоже короче и понятнее: отрицание равнозначно проверке на равенство nil или false Core.SendToNick(user.sNick," Пользователя нет в сети, попробуйте позднее...") else -- toWho = Core.GetUser(toWho,true) -- Это нам уже не надо ----Выбор случайного ника из списка юзеров: -- users = Core.GetOnlineUsers() local users = Core.GetOnlineUsers() -- опять же, зачем гадить в глобальное окружение? -- name = users[math.random(1,#users)].sNick local name = users[math.random(1,#users)].sNick -- тут аналогично -- while TableN[name] do local i = 0 -- Для нашей безопасности устанавливаем некоторый счетчик, когда он зашкалит - выходим из цикла чтобы не попасть в бесконечность while (TableN[name] or name == toWho) do -- Сюда же можно задать второе условие неравности toWho -- users = Core.GetOnlineUsers() -- Непонятно, зачем тебе заново эта таблица, выполнять какие-то функции в цикле вообще нежелательно! name = users[math.random(1,#users)].sNick i = i+1 if i == 10 then -- Счетчик зашаклил... break end end if i ~= 10 then -- Это своеобразная проверка, вышли мы по зашкаленному счетчику или нет, можно сделать и по-другому, но и так пойдет Core.SendToAll("<"..name.."> "..toWho.sNick..": "..Mess.."") else Core.SendToNick(user.sNick,"Не удалось создать случайный ник!") -- Иначе говорим что ничего не вышло end end else Core.SendToNick(user.sNick,"Вы не ввели имя пользователя!") end return true end end | 
|  | |
|  5.10.2010, 8:55 
				 Сообщение
					#733
					
				
			 | |
|  Активный участник    Группа: Пользователи Сообщений: 94 Регистрация: 2.10.2010 Из: Якутия, г.Нерюнгри Пользователь №: 7 820 Спасибо сказали: 21 раз  | 
				А вот ранее у меня это: Код while (TableN[name] or name == toWho) do ну никак не работало! и получалось сам себе некий ник слал сообщение! А сейчас и не знаю даже, тк теперь новое выдаёт: Код data = data:sub(1,-2)    -- Лучше использовать методы!   --Вот что пишет в ответ на эту строку: attempt to index global 'data' (a nil value)--- Вот думаю почему пустое значение.. смотрю а data то не запросил! Код function ChatArrival(user,data) надо же! такое пропустил...(оно там где надо.. но только переносом сработало а не на Enter, его как коммент определяло)   | 
|  | |
|  5.10.2010, 9:00 
				 Сообщение
					#734
					
				
			 | |
|  RusHub team lead               Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз  | 
				мда... сразу видно "страшно далёк от программирования"... Код function ChatArrival(user, data) data = data:sub(1, -2) ... end или Код function ChatArrival(tUser, sData) sData = sData:sub(1, -2) ... end Так понятно? | 
|  | |
|  5.10.2010, 9:32 
				 Сообщение
					#735
					
				
			 | |
|  Активный участник    Группа: Пользователи Сообщений: 94 Регистрация: 2.10.2010 Из: Якутия, г.Нерюнгри Пользователь №: 7 820 Спасибо сказали: 21 раз  | мда... сразу видно "страшно далёк от программирования"... Мне небо ближе... И все мы учимся, всю жизнь, а те кто нет... мне их просто жаль! мда... сразу видно "страшно далёк от программирования"... А по поводу: Код function ChatArrival(tUser, sData)  sData = sData:sub(1, -2)  ...end Как взял кусочек для изучения разобрался, так и оставил (понятно что надо красиво (эффективно, коротко и ясно), но пока так... исправлюсь!)  Код while (TableN[name] or name == toWho) do    -- Сюда же можно задать второе условие неравности toWho end Вот что получается: есть в таблице - циклим, совпадает с toWho - циклим, оба - циклим, если нет совпадений - выйдем. (это не считая счётчика) Вот тут кроется ошибка (имхо): Код toWho подумаю... Цикл работает всё сравнивает, НО вот саму toWho почему то пропускает! и что с ней делать?! Авсё так просто !!! перед циклом всего то надо было поставить: toWho = toWho.sNick Я так понял что мы данные юзера получили... а сам ник из них не вытащили... вот и не получалось у меня.. но теперь работает!!! Всегда рад выслушать поправки пояснения. | 
|  | |
|  5.10.2010, 12:30 
				 Сообщение
					#736
					
				
			 | |
|  Главный ра******й тут...          Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 777 раз  | Авсё так просто !!! перед циклом всего то надо было поставить: toWho = toWho.sNick Я так понял что мы данные юзера получили... а сам ник из них не вытащили... вот и не получалось у меня.. но теперь работает!!! Всегда рад выслушать поправки пояснения. Извиняюсь, мой косяк, хотя по-идее должна была вылететь ошибка в духе "вы пытаетесь сравнить строку и таблицу". Надеюсь по всем комментариям, что я тебе оставил выше, ты разобрался! Спрашивай, если сам зашел в тупик, всегда помогут любители своего дела   | 
|  | |
|  5.10.2010, 13:08 
				 Сообщение
					#737
					
				
			 | |
|  Активный участник    Группа: Пользователи Сообщений: 94 Регистрация: 2.10.2010 Из: Якутия, г.Нерюнгри Пользователь №: 7 820 Спасибо сказали: 21 раз  | 
				Вот ещё такой вопрос: Мой БОТ отправляет следующие данные о себе Код ["Аллачка"] = { ["sDescription"] = "[14]", ["sNeedClient"] = "pl++v5.95", ["sNeedVersion"] = "1.00", ["sNeedConnection"] = "100", ["sNeedHubs"] = "0/0/1", ["sIP"] = "10.222.22.78", ["sMode"] = "A", ["sEmail"] = "Allachka@yandex.ru", ["iShare"] = 268781204480, какие ещё данные можно отправить? и что самое главное есть ли такие параметры, ориентируясь на которые ДЦ клиент показывает значки например звёздочку в списке.. (от БОТа можно такое отправить чтоб разнообразие было?) | 
|  | |
|  5.10.2010, 13:21 
				 Сообщение
					#738
					
				
			 | |
|  Главный ра******й тут...          Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 777 раз  | 
				AirKobra45, тебе сюда: $MyINFO
				
				
				
			 | 
|  | |
|  5.10.2010, 16:02 
				 Сообщение
					#739
					
				
			 | |
|  Активный участник    Группа: Пользователи Сообщений: 94 Регистрация: 2.10.2010 Из: Якутия, г.Нерюнгри Пользователь №: 7 820 Спасибо сказали: 21 раз  | 
				Вот всё сделал прикрепил файлик.   может кому ещё надо файлик ряд Фибоначчи смотрите что не так.. буду рад выслушать замечания (а вот в цикле ряда Фибоначчи не понял как образуются первые 0 и 1 в чат..) и вот не понятно почему число с чата (это всё в файлике ряд ) необходимо использовать tonumber??? 1. Сообщение 2. Ряд Фибоначчи 
	Прикрепленные файлы
	  _________.lua ( 1.55 килобайт )
Кол-во скачиваний: 10  _________.lua ( 1.25 килобайт )
Кол-во скачиваний: 9 | 
|  | |
|  5.10.2010, 16:18 
				 Сообщение
					#740
					
				
			 | |
|  Белый Волк          Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз  | 
				1. При вводе данных через команду скрипт их получает в виде строчных символов, а для математической обработки их надо перевести в числа, для этого и существует  Код tonumber(N). Для обратного перевода (например, для выдачи в чат полученного результата), используется команда Код tostring(N) 2. Привыкайте скрипты обзывать латинскими символами! Иначе получится не название, а тупая линия. | 
|  | |
|   | 
 Похожие темы
 Похожие темы
|   | Сейчас: 30.10.2025, 18:42 |