Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы) |
Здравствуйте, гость ( Вход | Регистрация )
Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы) |
9.9.2009, 19:57
Сообщение
#581
|
|
Абсолютный новичок Группа: Пользователи Сообщений: 2 Регистрация: 9.9.2009 Пользователь №: 4 403 Спасибо сказали: 0 раз |
По логике, нужно смотреть на ту строку, ошибку в которой пишет птока. Так-же, по логике, нужно приводить полный код скрипта, а не проверенный рабочий кусок чужого кода. Ну и втретьих, опять-же, по логике, вышепреведённый кусок кода от Сетапера с дописанными ниже парой строк работает. Код DD = AnsiToUtf8('рыба') Core.SendToAll(DD) Что подтверждается выводом в общий чат хаба следующей ерунды: [19:14:52] рыба Спасибо за ответ. В общем, перекодировка мне нужна не для целей вывода в чат сообщения. Мне это нужно для одной цели: взять текст, перекодировать из УТФ в АНСИ и отправить по почте. Почему именно так - есть система класса Сервис Деск, при поступлении заявки в систему пользователю уходит письмо. Все это было на инглыше. Но появилась необходимость отправлять письма и на русском. Так вот, начинка системы написана на ЛУА. Скрипт коннектится к БД, вытягивает значения (они в УТФ), формирует и отправляет письмо. Но сабджект письма в Анси (он статичный, не из БД), и при получении письба в сабджекте - знаки вопроса. По этому вот такой и вопрос - как сделать вышеизложенный код рабочим? Я в луа не разбираюсь, но знаком с другими скриптовыми языками типа Перла, подход везде один и тот же, но в данном случае в логах - ошибка. И скорее из-за тго, что в языке, как сказал, не разбираюсь. Помогите, плз, нет времени (пока) его учить. |
|
|
9.9.2009, 20:28
Сообщение
#582
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
Предлагаю вам открыть отдельную тему в разделе Ваши проекты и описать вашу проблему с приложением кода
|
|
|
13.9.2009, 12:39
Сообщение
#583
|
|
Продвинутый участник Группа: Пользователи Сообщений: 176 Регистрация: 11.7.2008 Пользователь №: 171 Спасибо сказали: 182 раза |
Доброго времени суток.
Прошу помочь со скриптом. Суть проблемы такова: есть скрипт новостей. Выводит последние новости с Там кодировка windows-1251. Всё прекрасно работает. Но если указать другой новостной сайт с кодировкой UTF-8, то при выводе сообщений получаю кракозябры типа Общество. Возможно ли перекодировать в скрипте, и если да, то как? P.S. Пробовал заменить функцией sMsg = string.gsub (sMsg, ("Р°"), "а") - не помогает. |
|
|
13.9.2009, 12:43
Сообщение
#584
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
|
|
|
13.9.2009, 12:50
Сообщение
#585
|
|
Продвинутый участник Группа: Пользователи Сообщений: 176 Регистрация: 11.7.2008 Пользователь №: 171 Спасибо сказали: 182 раза |
|
|
|
11.10.2009, 18:45
Сообщение
#586
|
|
Начинающий Группа: Пользователи Сообщений: 15 Регистрация: 9.10.2009 Пользователь №: 4 667 Спасибо сказали: 0 раз |
Я уже создавал тему по отключению чата. Но мне нужно немного другое. Возможность отключить только чат обычным зарегестрированным и простым пользователям (админы, випы и операторы должны иметть доступ к чату). Лички должны быть доступны всем. Возможно ли написать такой скрипт, с доступным включением/выключением функции через контекст меню хаба?
+ небольшой нюансик: сообщение о том, что чат отключен, должен видеть только пользователь, которому доступ запрещён. |
|
|
11.10.2009, 21:18
Сообщение
#587
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
снова открыл твою тему! http://mydc.ru/topic2552.html?gopid=21886&#entry21886
|
|
|
16.10.2009, 15:19
Сообщение
#588
|
|
Активный участник Группа: Пользователи Сообщений: 52 Регистрация: 10.10.2009 Пользователь №: 4 687 Спасибо сказали: 3 раза |
Мой вопрос связан с формированием меню.
Меня интересует, какие директивы после UserCommand за что отвечают. Например, что конкретно обозначает "$UserCommand 1 2 Действия \\" На всяк случай объясню что мне нужно сделать: Есть 2 скрипта. Один стоит ниже в списке, другой выше. Оба создают пункт меню "Действия" Тот что выше: Код UserConnected = function(user) if user.Profile ~= -1 then local Uc = "$UserCommand 1 2 Действия\\Сказать шёпотом$<%[mynick]> ".. SetMan.GetString(29):sub(1,1).."whisper %[nick] %[line:Что скажем?]||" Core.SendToUser(user,Uc) end end Тот что ниже: Код Core.SendToNick(user.sNick,"$UserCommand 1 2 Действия \\") Core.SendToNick(user.sNick,"$UserCommand 1 2 Действия \\ Для админов\\ Предупреждение$<%[mynick]> +me вынес предупреждение %[nick].|") Мне хочется, чтобы в меню создавался пункт "Действия", где и были доступны действия типа Сказать шёпотом и Для админов На практике в данный момент у меня в меню создаются два совершенно одинаковых пункта Действия, в одном из которых я могу Сказать шёпотом, а во втором действия Для админов. |
|
|
16.10.2009, 18:12
Сообщение
#589
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Код Действия \\ лишний пробел! Код Действия\\
|
|
|
17.10.2009, 8:25
Сообщение
#590
|
|
7 квадратиков Группа: Модераторы Сообщений: 793 Регистрация: 21.1.2009 Пользователь №: 1 895 Спасибо сказали: 301 раз |
Мой вопрос связан с формированием меню. Меня интересует, какие директивы после UserCommand за что отвечают. Например, что конкретно обозначает "$UserCommand 1 2 Действия \\" В поиске забанили? http://mydc.ru/topic915s20.html?p=6892&#entry6892 |
|
|
18.10.2009, 11:45
Сообщение
#591
|
|
Постоялец Группа: Пользователи Сообщений: 454 Регистрация: 17.10.2008 Из: Новосибирск Пользователь №: 825 Спасибо сказали: 90 раз |
Цитата Локальными могут быть и функции: local function foo () print ( "Hello" ) end (http://steps3d.narod.ru/tutorials/lua-tutorial.html) ВОПРОС. Насколько актуален может быть этот прием (объявление локальными функций внутри подключаемых модулей так же, как объявление локальными переменных), если общее количество функций в скрипте - несколько сотен? И актуален ли такой прием вообще? ЕЩЕ ВОПРОС. Насколько актуальным может быть использование Код x%y вместо Код math.fmod(x,y) ?
|
|
|
18.10.2009, 17:56
Сообщение
#592
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Локальные функции и переменные используются для экономии памяти. Память освобождается после использования.
Говорить о том эффективно ли использовать локальную функцию, вообще говоря не корректно. Под разные задачи разное использование. Однако именно в языке lua обращение к локальным переменным и функциям происходит быстрее, чем к глобальным. Поэтому там, где это возможно, следует использовать локальные переменные. Использовать оператор вместо функции всегда преимущественно. Поэтому ответ на второй вопрос: x%y. |
|
|
18.10.2009, 18:44
Сообщение
#593
|
|
Постоялец Группа: Пользователи Сообщений: 454 Регистрация: 17.10.2008 Из: Новосибирск Пользователь №: 825 Спасибо сказали: 90 раз |
Цитата Говорить о том эффективно ли использовать локальную функцию, вообще говоря не корректно. Попробую переформулировать вопрос. (Насчет переменных - давно и прозрачно, вопросов нет, вопрос именно про функции). Есть центральный модуль, и есть куча подключаемых модулей. В подключаемых модулях есть функции, которые нигде более как в этих конкретных модулях не используются. Коль скоро функции тоже можно объявлять локальными, не логично ли именно эти узкоспециальные функции локальными и объявить? Это послужит оптимизации (в широком смысле), ведь так? |
|
|
18.10.2009, 19:05
Сообщение
#594
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Да. Это будет некой оптимизацией, и не только оптимизацией, но и в принципе правильным стилем программирования - своего рода подобие принципа инкапсуляции.
Как я понял, ты подключаешь файлы, в которых используются эти локальные функции только внутри этих файлов. В данном контексте не надо употреблять слово МОДУЛЬ! Модуль в LUA - это отдельное "пространство", которое имеет своё собственное ОКРУЖЕНИЕ. В данном случае у тебя просто подключаемые файлы, а не модули. Модули в языке lua создаются при помощи функции module. О том что такое модули можно прочитать тут: Если пишешь на языке LUA, то будь добр избегать употребления общий понятий, которые перекликаются с теми или иными понятиями LUA языка. Это в частности касается понятий модуля и метаданных. |
|
|
18.10.2009, 19:18
Сообщение
#595
|
|
Постоялец Группа: Пользователи Сообщений: 454 Регистрация: 17.10.2008 Из: Новосибирск Пользователь №: 825 Спасибо сказали: 90 раз |
Цитата избегать употребления общий понятий, которые перекликаются с теми или иными понятиями LUA языка. не вопрос, принято )))) И совсем для полного счастья хотелось бы осветить вот какой вопросик. Есть ли какой-нибудь сравнительно простой способ ускорить вызов функции, идущий из одного подключаемого файла, а расположенной в другом подключаемом файле (и стоит ли вообще акцентировать на этом внимание)? Есть интуитивное желание "прорисовать вертикаль власти", что ли. Как-то направлять этот вызов через центральный файл, где, может быть, хранилась бы в каком-то виде ссылка на вызываемую функцию?. Уж не знаю, понятно ли сформулировал |
|
|
18.10.2009, 19:48
Сообщение
#596
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Можно.
Это называется оптимизацией глобальных переменных. Почему переменных? Потому что в lua функция - это тип переменной. То есть переменной мы можем присвоить как строку или таблицу так и функцию. Например: Код local p = "str" -- инициализация переменной с присвоением ей строки p = {} -- присвоение таблицы p = 5 -- присвоение числа p = function() return "fff" end -- присвоение функции Например, у нас есть глобальная функция MyFunc, которая объявлена в файле 1.lua. Мы её вызываем из файла 2.lua. В самом начале файла 2.lua мы прописываем строку Код local _G = _G после этого вызываем нашу функцию, которая уже будет локальной:Код _G.MyFunc Тут код local _G = _G означает создание локальный ссылки на глобальную таблицу глобального окружения. Переменная является локальной ссылкой на уже существующие данные.Вообще говоря таким способом следует оптимизировать и такие функции: Код local tbl_maxn = table.maxn local tbl_insert = table.insert local math_sin = math.sin local os_date = os.date local os_execute = os.execute и так далее... И вызываем уже, например, функцию tbl_insert(tTable, 5), а не table.insert(tTable, 5), как мы это обычно делаем. Однако, например string.find таким образом оптимизировать не стоит, так как можно просто воспользоваться уже локальным методом: ("строка"):find(...). Метод уже локален. Единственную функцию из таблицы string, которую нужно оптимизировать это функцию string.char, так как к ней нельзя применить локальный метод. Кстати говоря, функцию MyFunc можно оптимизировать и так: Код local MyFunc = _G.MyFunc и именно эта оптимизация является максимальной, а не та, что рассмотрена в начале поста. Однако, оптимизировать таким образом каждую глобальную функцию слишком нудно, да и код сильно возрастает при большом количестве функций, поэтому обычно делают так как я описал в начале поста.
|
|
|
19.10.2009, 4:49
Сообщение
#597
|
|
Постоялец Группа: Пользователи Сообщений: 454 Регистрация: 17.10.2008 Из: Новосибирск Пользователь №: 825 Спасибо сказали: 90 раз |
ЕЩЕ ВОПРОС, пришло время уточнить и разобраться.
Думаю, не только мне, но и другим осваивающим луа-программирование полезно будет. Верно ли я понял, что вместо конкатенации со значением, возвращаемым функцией Код function MoreBla() return "BLABLABLA"; end local s = "блабла"..MoreBla() предпочтительнее использование Код local s = ("блабла %s"):format(MoreBla()) ? Если да, то в каких еще случаях, кроме этого частного случая, предпочтительнее использовать string.format ? Пытался понять комментарий насчет выделения памяти - тут один байт, там - четыре, изложенный в посте о скрипте-калькуляторе полгода назад, но тут надо, что называется, "от печки". Хотелось бы поподробнее вообще о string.format - начиная с того, как правильно называть %s, %d и т.д. и какие еще бывают эти "переменные" (?) и, простым языком, "что делает эта функция". |
|
|
19.10.2009, 12:13
Сообщение
#598
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Нет. Не так. В простых случаях нужно использовать конкатенацию:
Код local s = "блабла"..MoreBla() В сложных случаях - метод format. Рассмотрим случай: Код local s = "блабла"..MoreBla() Итак, как работает конкатенация? Память выделяется под строку "блабла" и под результат функции MoreBla(). Эти значения будут занимать 2 ячейки в lua стеке. После конкатенации по адресу "блабла" запишется результат конкатенации, по во второй же ячейке стека останется мусор. Если же к этому случаю мы применим метод формат: local s = ("блабла%s"):format(MoreBla()), то произойдёт следующее: сначала в стек отправится сам метод format, потом отправится первый его аргумент, то есть строка "блабла%s", потом отправится второй аргумент, то есть MoreBla(). После выполнения метода, результат выполнения запишется на верх стека. То есть стек будет выглядеть так: 1: "блаблаBLABLABLA", 2: "блабла%s", 3: "BLABLABLA". Получили, что глубина стека равна 3. В случае конкатенации глубина стека у нас была равна 2. (1: "блаблаBLABLABLA", 2: "BLABLABLA"). Поэтому при простой конкатенации метод формат проигрывает, так как выделяет больше памяти. Рассмотрим случай: Код local a = 123 local b = 456 local s1 = "блабла"..a..b local s2 = ("блабла%s%s"):format(a, b) 1) Содержимое стека при конкатенации: 1: "блабла", 2: "123", 3: "456" 2) Содержимое стека при формате: 1: FUNC, 2: "блабла%s%s", 3: "123", 4: "456" Опять имеем проигрыш. Случай: Код local a = 123 local b = 456 local s1 = "блабла"..a.."hihi"..b local s2 = ("блабла%shihi%s"):format(a, b) Тут я выписывать содержимое стека не буду, но скажу, что тут конкатенация и метод формат идентичны. Однако, дабы не делать лишний вызов, использовать лучше конкатенацию. Ещё один пример: Код local a = 123 local b = 456 local s1 = "блабла"..a.."hihi"..b.."qwerty" local s2 = ("блабла%shihi%sqwerty"):format(a, b) Тут уже выигрывает метод формат. Делаем вывод: метод формат выгодно использовать при конкатенации трёх и более временных строк (Временные строки: "блабла", "hihi", "qwerty")! Вообще говоря, метод format - это урезанный аналог сишной функции sprintf ( |
|
|
3.11.2009, 11:52
Сообщение
#599
|
|
Освоившийся участник Группа: Администраторы Сообщений: 344 Регистрация: 2.6.2008 Из: RB,Ufa Пользователь №: 8 Спасибо сказали: 106 раз |
Столкнулся вот с такой непоняткой:
test.lua Код require"test2" local tSettings = { [1] = { ["Name"] = "iNumber", ["Description"] = "Номер", }, [2] = { ["Name"] = "sString", ["Description"] = "Строка", }, } getsettings(tSettings) test2.lua Код function getsettings(tSettings) for i,v in pairs(tSettings) do Core.SendToAll(tostring(i).." "..tostring(v)) end end В результате запуска получаю: Код [12:50] Синтаксис error loading module 'test2' from file 'E:\Server\DCServer\PtokaX 0.4.1.1\test2.lua':
E:\Server\DCServer\PtokaX 0.4.1.1\test2.lua:1: '=' expected near '<eof>' |
|
|
3.11.2009, 12:56
Сообщение
#600
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
я в этом не силён но может всё таки:
Код require"test2.lua" |
|
|
Похожие темы
|
Сейчас: 14.11.2024, 9:51 |