myDC.ru

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

 
53 страниц V  « < 28 29 30 31 32 > »   
Ответить в данную темуНачать новую тему

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

abra
сообщение 9.9.2009, 19:57
Сообщение #581


Абсолютный новичок


Группа: Пользователи
Сообщений: 2
Регистрация: 9.9.2009
Пользователь №: 4 403
Спасибо сказали: 0 раз




Цитата(Alexey @ 9.9.2009, 19:05) *
По логике, нужно смотреть на ту строку, ошибку в которой пишет птока. Так-же, по логике, нужно приводить полный код скрипта, а не проверенный рабочий кусок чужого кода. Ну и втретьих, опять-же, по логике, вышепреведённый кусок кода от Сетапера с дописанными ниже парой строк работает.
Код
DD = AnsiToUtf8('рыба')
Core.SendToAll(DD)

Что подтверждается выводом в общий чат хаба следующей ерунды: [19:14:52] рыба


Спасибо за ответ.

В общем, перекодировка мне нужна не для целей вывода в чат сообщения. Мне это нужно для одной цели: взять текст, перекодировать из УТФ в АНСИ и отправить по почте. Почему именно так - есть система класса Сервис Деск, при поступлении заявки в систему пользователю уходит письмо. Все это было на инглыше. Но появилась необходимость отправлять письма и на русском. Так вот, начинка системы написана на ЛУА. Скрипт коннектится к БД, вытягивает значения (они в УТФ), формирует и отправляет письмо. Но сабджект письма в Анси (он статичный, не из БД), и при получении письба в сабджекте - знаки вопроса.

По этому вот такой и вопрос - как сделать вышеизложенный код рабочим? Я в луа не разбираюсь, но знаком с другими скриптовыми языками типа Перла, подход везде один и тот же, но в данном случае в логах - ошибка. И скорее из-за тго, что в языке, как сказал, не разбираюсь.
Помогите, плз, нет времени (пока) его учить.
Go to the top of the page
+Quote Post
Wariner
сообщение 9.9.2009, 20:28
Сообщение #582


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




Предлагаю вам открыть отдельную тему в разделе Ваши проекты и описать вашу проблему с приложением кода
Go to the top of the page
+Quote Post
Tsd
сообщение 13.9.2009, 12:39
Сообщение #583


Продвинутый участник
****

Группа: Пользователи
Сообщений: 176
Регистрация: 11.7.2008
Пользователь №: 171
Спасибо сказали: 182 раза




Доброго времени суток.
Прошу помочь со скриптом. Суть проблемы такова: есть скрипт новостей. Выводит последние новости с http://lenta.ru
Там кодировка windows-1251. Всё прекрасно работает. Но если указать другой новостной сайт с кодировкой UTF-8, то при выводе сообщений получаю кракозябры типа Общество.
Возможно ли перекодировать в скрипте, и если да, то как?
P.S. Пробовал заменить функцией sMsg = string.gsub (sMsg, ("Р°"), "а") - не помогает.
Go to the top of the page
+Quote Post
Wariner
сообщение 13.9.2009, 12:43
Сообщение #584


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




http://mydc.ru/index.html?showtopic=334&am...post&p=2276


Спасибо сказали:
Go to the top of the page
+Quote Post
Tsd
сообщение 13.9.2009, 12:50
Сообщение #585


Продвинутый участник
****

Группа: Пользователи
Сообщений: 176
Регистрация: 11.7.2008
Пользователь №: 171
Спасибо сказали: 182 раза




Цитата(Wariner @ 13.9.2009, 12:43) *

Спасибо!
Go to the top of the page
+Quote Post
pashtet
сообщение 11.10.2009, 18:45
Сообщение #586


Начинающий
*

Группа: Пользователи
Сообщений: 15
Регистрация: 9.10.2009
Пользователь №: 4 667
Спасибо сказали: 0 раз




Я уже создавал тему по отключению чата. Но мне нужно немного другое. Возможность отключить только чат обычным зарегестрированным и простым пользователям (админы, випы и операторы должны иметть доступ к чату). Лички должны быть доступны всем. Возможно ли написать такой скрипт, с доступным включением/выключением функции через контекст меню хаба?
+ небольшой нюансик: сообщение о том, что чат отключен, должен видеть только пользователь, которому доступ запрещён.
Go to the top of the page
+Quote Post
Wariner
сообщение 11.10.2009, 21:18
Сообщение #587


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




снова открыл твою тему! http://mydc.ru/topic2552.html?gopid=21886&#entry21886
Go to the top of the page
+Quote Post
Gate001
сообщение 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].|")


Мне хочется, чтобы в меню создавался пункт "Действия", где и были доступны действия типа Сказать шёпотом и Для админов

На практике в данный момент у меня в меню создаются два совершенно одинаковых пункта Действия, в одном из которых я могу Сказать шёпотом, а во втором действия Для админов.
Go to the top of the page
+Quote Post
Setuper
сообщение 16.10.2009, 18:12
Сообщение #589


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

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




Код
Действия \\

лишний пробел!
Код
Действия\\


Спасибо сказали:
Go to the top of the page
+Quote Post
Alexey
сообщение 17.10.2009, 8:25
Сообщение #590


7 квадратиков
*******

Группа: Модераторы
Сообщений: 793
Регистрация: 21.1.2009
Пользователь №: 1 895
Спасибо сказали: 301 раз




Цитата(Gate001 @ 16.10.2009, 16:19) *
Мой вопрос связан с формированием меню.
Меня интересует, какие директивы после UserCommand за что отвечают.
Например, что конкретно обозначает "$UserCommand 1 2 Действия \\"

В поиске забанили?
http://mydc.ru/topic915s20.html?p=6892&#entry6892
Go to the top of the page
+Quote Post
district
сообщение 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)
?
Go to the top of the page
+Quote Post
Setuper
сообщение 18.10.2009, 17:56
Сообщение #592


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

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




Локальные функции и переменные используются для экономии памяти. Память освобождается после использования.
Говорить о том эффективно ли использовать локальную функцию, вообще говоря не корректно. Под разные задачи разное использование. Однако именно в языке lua обращение к локальным переменным и функциям происходит быстрее, чем к глобальным. Поэтому там, где это возможно, следует использовать локальные переменные.

Использовать оператор вместо функции всегда преимущественно. Поэтому ответ на второй вопрос: x%y.


Спасибо сказали:
Go to the top of the page
+Quote Post
district
сообщение 18.10.2009, 18:44
Сообщение #593


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Цитата
Говорить о том эффективно ли использовать локальную функцию, вообще говоря не корректно.

Попробую переформулировать вопрос.
(Насчет переменных - давно и прозрачно, вопросов нет, вопрос именно про функции).
Есть центральный модуль, и есть куча подключаемых модулей. В подключаемых модулях есть функции, которые нигде более как в этих конкретных модулях не используются. Коль скоро функции тоже можно объявлять локальными, не логично ли именно эти узкоспециальные функции локальными и объявить? Это послужит оптимизации (в широком смысле), ведь так?
Go to the top of the page
+Quote Post
Setuper
сообщение 18.10.2009, 19:05
Сообщение #594


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

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




Да. Это будет некой оптимизацией, и не только оптимизацией, но и в принципе правильным стилем программирования - своего рода подобие принципа инкапсуляции.

Как я понял, ты подключаешь файлы, в которых используются эти локальные функции только внутри этих файлов.
В данном контексте не надо употреблять слово МОДУЛЬ! Модуль в LUA - это отдельное "пространство", которое имеет своё собственное ОКРУЖЕНИЕ. В данном случае у тебя просто подключаемые файлы, а не модули. Модули в языке lua создаются при помощи функции module.
О том что такое модули можно прочитать тут: http://www.lua.ru/doc/5.3.html

Если пишешь на языке LUA, то будь добр избегать употребления общий понятий, которые перекликаются с теми или иными понятиями LUA языка. Это в частности касается понятий модуля и метаданных.
Go to the top of the page
+Quote Post
district
сообщение 18.10.2009, 19:18
Сообщение #595


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Цитата
избегать употребления общий понятий, которые перекликаются с теми или иными понятиями LUA языка.

не вопрос, принято ))))
И совсем для полного счастья хотелось бы осветить вот какой вопросик. Есть ли какой-нибудь сравнительно простой способ ускорить вызов функции, идущий из одного подключаемого файла, а расположенной в другом подключаемом файле (и стоит ли вообще акцентировать на этом внимание)?
Есть интуитивное желание "прорисовать вертикаль власти", что ли. Как-то направлять этот вызов через центральный файл, где, может быть, хранилась бы в каком-то виде ссылка на вызываемую функцию?.
Уж не знаю, понятно ли сформулировал big_smile.gif
Go to the top of the page
+Quote Post
Setuper
сообщение 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
и именно эта оптимизация является максимальной, а не та, что рассмотрена в начале поста. Однако, оптимизировать таким образом каждую глобальную функцию слишком нудно, да и код сильно возрастает при большом количестве функций, поэтому обычно делают так как я описал в начале поста.


Спасибо сказали:
Go to the top of the page
+Quote Post
district
сообщение 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 и т.д. и какие еще бывают эти "переменные" (?) и, простым языком, "что делает эта функция".
Go to the top of the page
+Quote Post
Setuper
сообщение 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 (http://ru.wikipedia.org/wiki/Printf). Почему урезанный? Да потому, что форматы данных в lua не столь разнообразны как в СИ.


Спасибо сказали:
Go to the top of the page
+Quote Post
Jaska
сообщение 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>'
Go to the top of the page
+Quote Post
Wariner
сообщение 3.11.2009, 12:56
Сообщение #600


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




я в этом не силён но может всё таки:
Код
require"test2.lua"

Go to the top of the page
+Quote Post

53 страниц V  « < 28 29 30 31 32 > » 
Ответить в данную темуНачать новую тему
27 чел. читают эту тему (гостей: 27, скрытых пользователей: 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, 21:25