myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
53 страниц V  « < 35 36 37 38 39 > »   
Ответить в данную темуНачать новую тему

> Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы)

AirKobra45
сообщение 4.10.2010, 9:07
Сообщение #721


Активный участник
***

Группа: Пользователи
Сообщений: 94
Регистрация: 2.10.2010
Из: Якутия, г.Нерюнгри
Пользователь №: 7 820
Спасибо сказали: 21 раз




Быстрый ответ.. СПС
"Таймер на 1 секунду" посмотрим разберёмся.

"В дистрибутиве птоки есть файл scripting-interface.txt, в котором подробно описаны ВСЕ функции API2"
Про это знаю. Тут тоже тема есть описание функций с переводом big_smile.gif
Но тут ведь главное их правильно использовать...

"Получение случайного ника"
Набираю код:
Код
function OnStartup ()    
users = Core.GetOnlineUsers()
name = users[math.random(1,#users)].sNick
Core.SendToAll("<"..name.."> выбран случайным образом!")
end

Получаю это
Код
<Случайный ник> выбран случайным образом!

Всё работает отлично... теперь только к БОТу прикреплю и всё... СПС

Вот ещё такой вопрос возникает.. есть таблица:
Код
local TableN = {"Ник1","Ник2","Ник3",}

Нужно сравнить полученное значение name (см. выше код) со всеми значениями в таблице, и выполнить действие в зависимости от результатов сравнения (я понял что это к командам LUA относится...), но если можно напишите как.
Go to the top of the page
+Quote Post
Setuper
сообщение 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


Спасибо сказали:
Go to the top of the page
+Quote Post
AirKobra45
сообщение 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 секунд выдаётся сообщение.. как его остановьть, после выполнения команды?
Go to the top of the page
+Quote Post
Saymon21
сообщение 4.10.2010, 10:21
Сообщение #724


Site Reliability Engineer
*********

Группа: Модераторы
Сообщений: 1 772
Регистрация: 27.6.2009
Из: Чувашия, г. Чебоксары
Пользователь №: 3 719
Спасибо сказали: 479 раз




а TmrMan.RemoveTimer(Id) удаляет таймер. АПИ....
Go to the top of the page
+Quote Post
AirKobra45
сообщение 4.10.2010, 10:37
Сообщение #725


Активный участник
***

Группа: Пользователи
Сообщений: 94
Регистрация: 2.10.2010
Из: Якутия, г.Нерюнгри
Пользователь №: 7 820
Спасибо сказали: 21 раз




И как его в вышеупомянутом коде использовать? (команду я знаю, использовать не умею...)
Go to the top of the page
+Quote Post
Nickolya
сообщение 4.10.2010, 10:55
Сообщение #726


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




Код
function OnStartup ()
  n = 3
  function Func()
    Core.SendToAll(""..n.." секунды прошли!")
    TmrMan.RemoveTimer(id)
  end
  id = TmrMan.AddTimer(n*1000,"Func")
end


AirKobra45, необходимо думать над документацией, там все вполне четко написано!
Go to the top of the page
+Quote Post
AirKobra45
сообщение 4.10.2010, 14:34
Сообщение #727


Активный участник
***

Группа: Пользователи
Сообщений: 94
Регистрация: 2.10.2010
Из: Якутия, г.Нерюнгри
Пользователь №: 7 820
Спасибо сказали: 21 раз




Цитата(Nickolya @ 4.10.2010, 16:55) *
AirKobra45, необходимо думать над документацией, там все вполне четко написано!

Это над той что вместе с PtokaX идёт?
стараюсь.. на ошибках учусь.. big_smile.gif
Go to the top of the page
+Quote Post
Ksan
сообщение 4.10.2010, 15:38
Сообщение #728


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




Цитата
Это над той что вместе с PtokaX идёт?

Не только.
ЭТО тоже нужно изучать не менее внимательно:
Документация Lua на русском языке
Go to the top of the page
+Quote Post
AirKobra45
сообщение 4.10.2010, 16:12
Сообщение #729


Активный участник
***

Группа: Пользователи
Сообщений: 94
Регистрация: 2.10.2010
Из: Якутия, г.Нерюнгри
Пользователь №: 7 820
Спасибо сказали: 21 раз




Видел, но ещё не всё смотрел.. а хочится уже хоть что-то и чтоб работало!
big_smile.gif
Вот по мере и вопрос образовался.
Задача: Послать сообщение от любого ника (случайного из списка пользователей) выбранному пользователю, при этом (то что не могу сделать, весь день и 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
Go to the top of the page
+Quote Post
alex82
сообщение 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]
Если ники всех юзеров, сидящих на хабе, есть в таблице исключений, будет уходить в бесконечный цикл и вешать хаб
Go to the top of the page
+Quote Post
AirKobra45
сообщение 5.10.2010, 4:32
Сообщение #731


Активный участник
***

Группа: Пользователи
Сообщений: 94
Регистрация: 2.10.2010
Из: Якутия, г.Нерюнгри
Пользователь №: 7 820
Спасибо сказали: 21 раз




Я вообще запутался.. или не так вопрос поставил.
Нужно проверить 2 условия: чтобы случайного ника не было в таблице или/и (т.е либо одно из условий либо оба) случайный ник не был равен toWho? в иных случаях заного запрвшиваем name (случайно).
Или я как то задачу не так поставил, потому как я сам не могу понять под какие циклы "это" загнать!
Go to the top of the page
+Quote Post
Nickolya
сообщение 5.10.2010, 7:47
Сообщение #732


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




Код
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


Спасибо сказали:
Go to the top of the page
+Quote Post
AirKobra45
сообщение 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, его как коммент определяло) big_smile.gif
Go to the top of the page
+Quote Post
Setuper
сообщение 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

Так понятно?
Go to the top of the page
+Quote Post
AirKobra45
сообщение 5.10.2010, 9:32
Сообщение #735


Активный участник
***

Группа: Пользователи
Сообщений: 94
Регистрация: 2.10.2010
Из: Якутия, г.Нерюнгри
Пользователь №: 7 820
Спасибо сказали: 21 раз




Цитата(Setuper @ 5.10.2010, 15:00) *
мда... сразу видно "страшно далёк от программирования"...

Мне небо ближе...
И все мы учимся, всю жизнь, а те кто нет... мне их просто жаль!

Цитата(Setuper @ 5.10.2010, 15:00) *
мда... сразу видно "страшно далёк от программирования"...

А по поводу:
Цитата(Setuper @ 5.10.2010, 15:00) *
Код
function ChatArrival(tUser, sData)  sData = sData:sub(1, -2)  ...end

Как взял кусочек для изучения разобрался, так и оставил (понятно что надо красиво (эффективно, коротко и ясно), но пока так... исправлюсь!)
big_smile.gif

Цитата(Nickolya @ 5.10.2010, 13:47) *
Код
while (TableN[name] or name == toWho) do    -- Сюда же можно задать второе условие неравности toWho
end

Вот что получается: есть в таблице - циклим, совпадает с toWho - циклим, оба - циклим, если нет совпадений - выйдем. (это не считая счётчика)
Вот тут кроется ошибка (имхо):
Код
toWho

подумаю...
Цикл работает всё сравнивает, НО вот саму toWho почему то пропускает! и что с ней делать?!

Авсё так просто !!!
перед циклом всего то надо было поставить: toWho = toWho.sNick
Я так понял что мы данные юзера получили... а сам ник из них не вытащили... вот и не получалось у меня.. но теперь работает!!! Всегда рад выслушать поправки пояснения.
Go to the top of the page
+Quote Post
Nickolya
сообщение 5.10.2010, 12:30
Сообщение #736


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




Цитата(AirKobra45 @ 5.10.2010, 10:32) *
Авсё так просто !!!
перед циклом всего то надо было поставить: toWho = toWho.sNick
Я так понял что мы данные юзера получили... а сам ник из них не вытащили... вот и не получалось у меня.. но теперь работает!!! Всегда рад выслушать поправки пояснения.

Извиняюсь, мой косяк, хотя по-идее должна была вылететь ошибка в духе "вы пытаетесь сравнить строку и таблицу". Надеюсь по всем комментариям, что я тебе оставил выше, ты разобрался!
Спрашивай, если сам зашел в тупик, всегда помогут любители своего дела feel_good.gif
Go to the top of the page
+Quote Post
AirKobra45
сообщение 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,

какие ещё данные можно отправить?
и что самое главное есть ли такие параметры, ориентируясь на которые ДЦ клиент показывает значки например звёздочку в списке.. (от БОТа можно такое отправить чтоб разнообразие было?)
Go to the top of the page
+Quote Post
Nickolya
сообщение 5.10.2010, 13:21
Сообщение #738


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




AirKobra45, тебе сюда: $MyINFO
Go to the top of the page
+Quote Post
AirKobra45
сообщение 5.10.2010, 16:02
Сообщение #739


Активный участник
***

Группа: Пользователи
Сообщений: 94
Регистрация: 2.10.2010
Из: Якутия, г.Нерюнгри
Пользователь №: 7 820
Спасибо сказали: 21 раз




Вот всё сделал прикрепил файлик. big_smile.gif может кому ещё надо файлик ряд Фибоначчи смотрите что не так.. буду рад выслушать замечания (а вот в цикле ряда Фибоначчи не понял как образуются первые 0 и 1 в чат..) и вот не понятно почему число с чата (это всё в файлике ряд ) необходимо использовать tonumber???
1. Сообщение
2. Ряд Фибоначчи
Прикрепленные файлы
Прикрепленный файл  _________.lua ( 1.55 килобайт ) Кол-во скачиваний: 10
Прикрепленный файл  _________.lua ( 1.25 килобайт ) Кол-во скачиваний: 9
 
Go to the top of the page
+Quote Post
Ksan
сообщение 5.10.2010, 16:18
Сообщение #740


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




1. При вводе данных через команду скрипт их получает в виде строчных символов, а для математической обработки их надо перевести в числа, для этого и существует
Код
tonumber(N)
. Для обратного перевода (например, для выдачи в чат полученного результата), используется команда
Код
tostring(N)

2. Привыкайте скрипты обзывать латинскими символами! Иначе получится не название, а тупая линия.
Go to the top of the page
+Quote Post

53 страниц V  « < 35 36 37 38 39 > » 
Ответить в данную темуНачать новую тему
31 чел. читают эту тему (гостей: 31, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No new ВАЖНО: Topic has attachmentsМодули для скриптов RusHub
26 Setuper 45 124 21.3.2017, 17:31 Посл. сообщение: Alexey
No new ВАЖНО: Topic has attachmentsВаши Вопросы И Предложения По Поводу Форума
447 Svyat 319 605 20.10.2015, 19:39 Посл. сообщение: Ksan
No New Posts От: Вопросы Разработчикам Скриптов
От темы с ID: 173
0 MIKHAIL 4 305 23.1.2015, 0:56 Посл. сообщение: MIKHAIL
No new Topic has attachmentsВопросы по протоколу NMDC
Делаю программу
26 Master255 29 536 12.1.2015, 0:38 Посл. сообщение: Master255
No New Posts Вопросы к Phazeus по Экзекутору
Мастер может забанить мастера, как решить в Экзекуторе?
1 AndreiDC 5 338 31.10.2014, 19:20 Посл. сообщение: Ksan
No New Posts От: Установка скриптов
От темы с ID: 5657
0 MIKHAIL 4 772 29.7.2014, 23:37 Посл. сообщение: MIKHAIL
No New Posts Установка скриптов
Нужна помощь по установке
2 _wRz_ 7 263 29.7.2014, 16:11 Посл. сообщение: Артём
No new От: Вопросы Разработчикам Скриптов
От темы с ID: 173
29 Wariner 25 851 28.1.2014, 13:11 Посл. сообщение: Alexey
No new Topic has attachmentsВопросы по RusHub
Технические вопросы
316 Jaska 267 616 19.12.2013, 13:59 Посл. сообщение: mod
No new Topic has attachmentsМелкие вопросы
44 Wariner 50 666 19.9.2013, 12:34 Посл. сообщение: Alexey
No New Posts От: Ваши Вопросы И Предложения По Поводу Форума
От темы с ID: 753
3 anila 9 060 28.3.2013, 16:02 Посл. сообщение: настя
No New Posts Единая платформа для скриптов
Обсуждения вопроса создания единой платформы скриптов
5 Enyby 8 980 18.1.2012, 20:15 Посл. сообщение: Setuper
No new Topic has attachmentsПеределка скриптов
Прошу помощи
47 Fe(one)X 41 005 26.12.2011, 15:04 Посл. сообщение: Ksan
No new Topic has attachmentsВопросы Разработчикам Скриптов с SQL
вопросы по скриптам (мелкие вопросы)
101 Wariner 61 750 6.12.2011, 0:34 Посл. сообщение: Enyby
No New Posts От: Вопросы по RusHub
От темы с ID: 2902
4 Otshelnik-Fm 8 418 19.10.2011, 9:23 Посл. сообщение: Mangust

 



RSS Сейчас: 15.11.2024, 2:29