myDC.ru

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

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

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

AirKobra45
сообщение 5.10.2010, 17:58
Сообщение #741


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

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




Цитата(Ksan @ 5.10.2010, 22:18) *
2. Привыкайте скрипты обзывать латинскими символами! Иначе получится не название, а тупая линия.

Спасибо за пояснение.. я уже "подозревал" т.е. понял на тяжком опыте! я и так делал N=N+0 и получалось обрабатывать!
А вот для вывода не знал, что делать!
Люблю я нашу кириллицу! и у себя всё на ней "обзываю". Просто когда прикреплял хотел поменять.. но уже лень стало так и дописал где что. Но учту впредь.
Go to the top of the page
+Quote Post
AirKobra45
сообщение 7.10.2010, 14:08
Сообщение #742


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

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




Вот ещё такой вопрос:
Код
N = 13            
        Core.SendToAll (" \n \n Ряд ФИБОНАЧЧИ: \n")
                    A = 0
                    B = 1
                    while  ( B <= N or A <=N ) do
                        if  A <= N  then
                            A = A + B ,
                            Core.SendToAll (""..A.."")
                        end
                        if  B <= N  then
                            B = A + B ,
                            Core.SendToAll (""..B.."")
                        end
                    end

и получаем ряд:
0
1
1
2
3
5
8
13
почему прописываются первые 0 и 1 ?? вроде не должны... (т.е. как это в цикле выполняется сразу вывод, если сперва сложение идёт?)
Go to the top of the page
+Quote Post
Nickolya
сообщение 7.10.2010, 16:31
Сообщение #743


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

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




AirKobra45, убери вот тут запятые и все будет как надо big_smile.gif
Код
                            A = A + B ,
Код
                            B = A + B ,

А вывод у тебя неверный т.к. из-за запятой, вычисляется сначала все что стоит после равно, а потом уже идет присвоение переменным значений. Из-за подобной хитрости работает
Код
A, B = B, A
Go to the top of the page
+Quote Post
AirKobra45
сообщение 7.10.2010, 16:53
Сообщение #744


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

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




Блин ты меня опередил... тока прочёл 2.4.3 - Присваивание (сделал одним циклом!)
и поменял вот так:
Код
A = 0
B = 1
    while A <=N do
        A = A + B ,
        Core.SendToAll (""..A.."")
        A, B = B, A
    end

а то что с запятой хорошо! так и надо! просто я не знал что так получается.. но ряд правильно выводится... big_smile.gif
Чучтвую мои мысли втекают в нужное русло...

Вот ещё с функцией ipairs разобраться!
Код
for i,v in ipairs(t) do
body
end

В скриптах, идёт перебор от 1 (автоматом присваивается к i ) до первого отсутствующего ключа.
А V присваивается перебераемые значения из таблицы t. (Я правильно понял?)
А вот в некоторых случаях вместо i использовали key (в чём разница?)
И вот ещё такое:
Код
for i = 1, #Tablica do
body
end

(Это как в ipairs перебор тоже?)
#Tablica - это как? это я так понимаю подобие table.getn(Tablica) (получение количества индексов) или до первого отсутствующего ключа?
Прикрепленные файлы
Прикрепленный файл  FIBONACHI.lua ( 1.12 килобайт ) Кол-во скачиваний: 10
 
Go to the top of the page
+Quote Post
Nickolya
сообщение 7.10.2010, 18:03
Сообщение #745


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

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




Опять же всё есть в документации, но если тебе надо, поясню: ipairs перебирает таблицу по порядку, но если только индексы таблицы целочисленны и непрерывны, т.е. перебор идет от 1 до первой дырки. #tTable аналогично table.getn(tTable). pairs перебирает всю таблицу, но беспорядочно. i,v - условные обозначения ключа и значения таблицы по этому ключу, таким образом при проходе в цикле for i,v in ipairs(t) do ты получаешь 2 локальные переменные - ключ и значение таблицы соответственно. Написать можно и for sKeyHere, diffTypesValue in pairs(tTable) do как обзывать переменные - твое дело. Что касается конструкции for i = 1, #Tablica do то по некоторым исследованиям, она работает в разы быстрее, но в самом цикле ты не имеешь локальных переменных и к таблице приходится обращаться из окружений выше.
Go to the top of the page
+Quote Post
Setuper
сообщение 7.10.2010, 19:39
Сообщение #746


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Цитата
Что касается конструкции for i = 1, #Tablica do то по некоторым исследованиям, она работает в разы быстрее, но в самом цикле ты не имеешь локальных переменных и к таблице приходится обращаться из окружений выше.


Если в цикле нету обращений к элементам таблицы, то да, этот цикл работает быстрее, в противном случае лучше юзать итерационные функции ipairs и pairs. Итерационная функция сразу кладёт значение в стек, таким образом, получаем оптимизацию не на уровне lua, а на уровне СИ, что всегда быстрее.
Go to the top of the page
+Quote Post
alex82
сообщение 7.10.2010, 21:57
Сообщение #747


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Цитата
#tTable аналогично table.maxn(tTable)

Не аналогично. Оператор длины работает до первого пропущенного индекса, а функция table.maxn - до наибольшего числа в таблице.
Go to the top of the page
+Quote Post
Setuper
сообщение 8.10.2010, 8:45
Сообщение #748


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Ага. Вот точная цитата с lua.ru.

http://www.lua.ru/doc/7.2.html :
Цитата
Функция table.getn соответствует новому оператору длины (#); испольщуйте оператор вместо функции.
Go to the top of the page
+Quote Post
Nickolya
сообщение 8.10.2010, 10:34
Сообщение #749


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

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




Спасибо за разбор полетов, надо почаще так собираться big_smile.gif Поправился выше... Цитата с http://www.lua.ru/doc/5.5.html
Цитата
table.maxn (table)

Возвращает наибольший положительный числовой индекс заданной таблицы, или zero если таблица не имеет положительных числовых индексов. (Для выполнения запроса эта функция перебирает все индексы таблицы.)


Хотя лучший вариант - все-таки знать что у тебя индекс таблицы без дыр и применять к ней соответствующие функции, любо же работать с ней как с таблицей, в которой индексы не целочисленны.
Go to the top of the page
+Quote Post
Setuper
сообщение 8.10.2010, 14:08
Сообщение #750


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Цитата
Для выполнения запроса эта функция перебирает все индексы таблицы.

Именно поэтому, если в таблице только целочисленные индексы (с дырами или без), то лучше использовать цикл:
Код
for k, v in pairs(tTable) do
  ...
end

а не цикл:
Код
for i = 1, table.maxn(tTable) do
  ...
end

Так как в последнем случае мы фактически пробегаемся по циклу 2 раза.


Спасибо сказали:
Go to the top of the page
+Quote Post
AirKobra45
сообщение 8.10.2010, 15:42
Сообщение #751


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

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




Я получил значение (число до этого вытащил из строки)
Код
iCmdId = tonumber(iCmdId)

Мне выдаёт такую ошибку, в нижеследующей строке:
Код
function ComplGen()
--[[Вот в этой строке:]]-- local Result1 = MatTable.[iCmdId][2][math.random(1, #MatTable.[iCmdId][2])]
--[[Даже так пробовал!]]-- "local Result1 = MatTable.["..iCmdId.."][2][math.random(1, #MatTable.["..iCmdId.."][2])]"
----
end

Всё одно! Не работает!
Подскажите пожалуйста в чём ошибка? Что не так?
Go to the top of the page
+Quote Post
Nickolya
сообщение 8.10.2010, 15:51
Сообщение #752


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

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




AirKobra45, а сами ошибки показать не судьба? Экстрасенсорика уже устала...
Есть предположение, что переменная iCmdId у тебя локальная, а вызывая другую функцию, ты не передаешь ее, тем самым она просто пропадает.
Go to the top of the page
+Quote Post
AirKobra45
сообщение 8.10.2010, 18:35
Сообщение #753


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

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




Цитата(Nickolya @ 8.10.2010, 21:51) *
AirKobra45, а сами ошибки показать не судьба? Экстрасенсорика уже устала...
Есть предположение, что переменная iCmdId у тебя локальная, а вызывая другую функцию, ты не передаешь ее, тем самым она просто пропадает.

Сейчас посмотрю...
Вот вроде всё аккуратно писал, старался обдумать, а всё же ошибочка есть! Файлик сейчас прикреплю.

Нашёл! точка стояла! перед [ (Table.[---])
Всё работает!
Остался такой вопрос:
Код
function OnStartup()
--------------------
sCmd = "compl" --Команда, сокращение, от compliment.
sStartMenu = "Меню хаба\\Действия" --Расположение в Меню
--------------------
sMenu = ""
    for i = 1, #Table do
        sMenu = sMenu.."$UserCommand 1 3 "..sStartMenu.."\\"..Table[i][1].."$<%[mynick]> !"..sCmd.." "..i.." %[nick]||"
--        Table[i][1] = nil  ???
    end
--------------------
function UserConnected(tUser)
    Core.SendToUser(tUser, sMenu)
end
OpConnected,RegConnected = UserConnected,UserConnected
end

Без sMenu = "" и sMenu.. в меню не показывает первый комплимент из таблицы . Почему?
Table[i][1] = nil и зачем эта строка? Какой от неё прок? видел в скриптах.. но без неё прекрасно всё работает!

************************************************************
Вот всё почти сделал. Файлик прикрепил посмотрите может что не так или можно эффективнее сделать.
Вот повторюсь:
Без sMenu = "" и sMenu.. в меню не показывает первый комплимент из таблицы . Почему?
Table[i][1] = nil и зачем эта строка? Какой от неё прок? видел в скриптах.. но без неё прекрасно всё работает!
и вот в таком цикле:
Код
for 1, 4 do
d@= "мат выражение"
--как сделать, чтобы переменная d после себя заместо @ меняла значения  от 1 до 4 (создавались новые переменные d1 d2 d3 d4)
end

Прикрепленные файлы
Прикрепленный файл  Compliment.lua ( 7.33 килобайт ) Кол-во скачиваний: 13
 
Go to the top of the page
+Quote Post
Nickolya
сообщение 9.10.2010, 12:09
Сообщение #754


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

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




Цитата(AirKobra45 @ 8.10.2010, 19:35) *
Без sMenu = "" и sMenu.. в меню не показывает первый комплимент из таблицы . Почему?

Без этого ты заменяешь строку, поэтому показывается только последняя, а дополняя ее, показывается всё.

Цитата(AirKobra45 @ 8.10.2010, 19:35) *
Table[i][1] = nil и зачем эта строка? Какой от неё прок? видел в скриптах.. но без неё прекрасно всё работает!

Убирает поля из таблицы, если подумать, то они больше нигде не используются в скрипте, т.к. меню уже сгенерировано, поэтому можно удалить эти поля и очистить немного памяти, хотя это уже извращения, однако от лишних больших массивов данных лучше избавляться big_smile.gif

Цитата(AirKobra45 @ 8.10.2010, 19:35) *
и вот в таком цикле:
Код
for 1, 4 do
d@= "мат выражение"
--как сделать, чтобы переменная d после себя заместо @ меняла значения  от 1 до 4 (создавались новые переменные d1 d2 d3 d4)
end

Проще всего тебе сделать так и пока над такими извратами не заморачиваться:
Код
local t = {}
for i = 1, 4 do
    t["d"..i] = "мат выражение"
end


И сам скрипт, немного его переделал...
Прикрепленные файлы
Прикрепленный файл  Compliment.lua ( 7.11 килобайт ) Кол-во скачиваний: 17
 
Go to the top of the page
+Quote Post
AirKobra45
сообщение 29.10.2010, 16:47
Сообщение #755


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

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




Вот появилась новая идея вывести всем попрошайкам КОНТЕР СТРАЙКА в ДЦ из файла текст с серверами.. Вот что есть:
Код
function OnStartup()
--------------------
sCmd = "CSS" --Команда, сокращение.
sStartMenu = "Меню хаба\\Игры" --Расположение в Меню
--------------------
sMenu = "$UserCommand 1 3 "..sStartMenu.."\\Counter Strike$<%[mynick]> !"..sCmd.."||"
--------------------
function UserConnected(tUser)
    Core.SendToUser(tUser, sMenu)
end
OpConnected,RegConnected = UserConnected,UserConnected
end
--------------------
sBot = SetMan.GetString(21)
sFile = Core.GetPtokaXPath().."scripts/Games/CSS_SERVERS.txt"
function ChatArrival(tUser, sData)
    sData = string.sub(sData,1,-2)    
local sCmd = sData:match"%b<>%s*!(%S+).*"
    if sCmd == "CSS" or sCmd == "КСС" then
    Core.SendToNick(tUser, "<"..sBot.."> "..LoadText(sFile))
    return true
    end
end
--------------------
function LoadText(sFile)
    local message = ""
    local f = io.open( Core.GetPtokaXPath().."scripts/Games/CSS_SERVERS.txt" , "r" )
        if f then
        message = f:read("*all")
        message = string.gsub(message,"|","")
        f:close()
        end
    return
    message
end

вот создал менюшку.. по одной из тем пытался вывести.. ничего не получилось.. в итоге всё перемешано...
Объясните что делает function LoadText(sFile).. и вообще как правильно вывести текст многострочный из файла в чат..
Go to the top of the page
+Quote Post
Setuper
сообщение 29.10.2010, 16:57
Сообщение #756


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




вместо
Код
Core.SendToNick(tUser,
нужно написать
Код
Core.SendToUser(tUser,
или
Код
Core.SendToNick(tUser.sNick,


Функция LoadText читает всё из файла и возвращает всё считанное из файла, удаляя по ходу символы |, так как они являются разделителями протокола

и ещё...

вместо
Код
local f = io.open( Core.GetPtokaXPath().."scripts/Games/CSS_SERVERS.txt" , "r" )
нужно бы написать так:
Код
local f = io.open(sFile , "r" )
Go to the top of the page
+Quote Post
AirKobra45
сообщение 29.10.2010, 17:05
Сообщение #757


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

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




Сейчас попробую...
а вот с послать нику.. да там мой косяк.. сам исправил а уже подзабыл... как правильно!
Теперь значит так... 1 строчка выводится без проблем а вот текстовый файл не хочет показывать
Код
10.222.21.6  -   ReservoirDogs        
10.222.53.195               -     Pioneer Server (ssClient)
10.222.1.234:27015        -  Wcs Rpg Server

это содержимое.. что сделать не пойму... \n в конце тоже не помогло...

А всё! моя ошибка... имена чуток не совпадали ... в скрипте и самого файла...
Go to the top of the page
+Quote Post
Ksan
сообщение 29.10.2010, 17:53
Сообщение #758


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

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




А не проще подавать юзеру обычный текстовый файл по команде, соответствующей названию текстового файла из папки texts?
Не нужно никаких скриптов, а строку вызова можно сунуть в любой скрипт, в тот же ХабМеню, например..
Go to the top of the page
+Quote Post
AirKobra45
сообщение 30.10.2010, 17:53
Сообщение #759


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

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




Возможно всё... но не обо всём мы знаем.. big_smile.gif
Вот такой ещё вопрос:
В чате пользователи применяют друг к другу команды. вот мне нужно знать кто какую применил и к кому как можно это сделать? (у нас все юзеры... нет опов и прочего)
Вот Core.SendToNick(tUser.sNick) не подходит! я так понял.. вот даже не знаю что применить...
Go to the top of the page
+Quote Post
Nickolya
сообщение 30.10.2010, 19:24
Сообщение #760


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

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




Если в команде фигурирует ник юзера - можно брать оттуда, если нет - никак, меню появляется просто по клику мыши и если в команде не указан параметр %[nick] то и ник передаваться не будет. В общем запрос очень странный и вряд ли выполнимый. Ты хочешь следить вообще за всем на хабе?))
Go to the top of the page
+Quote Post

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

Collapse

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

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

 



RSS Сейчас: 23.11.2024, 14:22