-
Число публикаций
618 -
Регистрация
-
Последнее посещение
-
Дней в топе
1 -
AMKoin
37 [Подарить AMKoin]
Весь контент пользователя Nazgool
-
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
На самом деле в этом примере итерации будет две. Вроде и знаю что две, но понять почему - не могу. Где-то тут зарыто : local s = 'abc' print(s:match('^()a()b()c()$')) -- 1 2 3 4 При "gmatch"-е с шаблоном ".-" находятся места символов (не сами символы) - 4 шт. При "gmatch"-е с шаблоном ".*" находится вся строка до нуль-символа. Вот тут думаю, что эта строка находится до последнего шаблона пустых скобок перед нуль-символом. А при следующей итерации определяется и сам нуль-символ (почему-то ???). Не пойму, короче. -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Ага. Понятно что тебе не понятно Действительно, в приведённом тобою примере смысла меньше, чем мало. Например в строке нужно найти слова, начинающиеся со строчной и заглавной буквы: local tRet = {} local sStr = "ab Ab aB AB" sPattern = '%l%S+' -- {'ab','aB'} sPattern = '%u%S+' -- {'Ab','AB'} for sValue in sStr:gmatch(sPattern) do table.insert(tRet, sValue) end -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Если есть некая строка "sDiv", то шаблон "sPattern" будет иметь вид - '[^%s%'..sDiv..']+' (иначе, наверное, другой ?) В строке "sStr" будет происходить поиск всех вхождений шаблона "sPattern" Каждое найденное вхождение такого шаблона записывается в переменную "sValue" и заноситься в таблицу "tRet". Думаю что объяснение не очень. Но и вопрос не лучше. Полнее пожалуйста. Что именно не ясно? -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Callisto, ну это смотря с чем ты работаешь. Для чистого lua можно сменить кодировку. У меня (Win7 rus) сработала эта: s = "строка" os.setlocale("Russian_Russia.10007") -- или "Russian_Russia.10017" (Ukraine) print(s:upper()) -- СТРОКА -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Dennis_Chikin, Именно к такой функции не бессмысленно. В отличии от модулей lua, в Сталкере, для функций каждого из файлов(т.е. модулей), окружением устанавливается не данный модуль, а глобальное окружение (_G) ! При вызове функций (использовании не локальных переменных), их поиск будет происходить в таблице _G. Поэтому, если вызвать функцию из примера просто как is_wounded(...), то эта функция будет и запрашиваться из таблицы _G. Там такой нет. Вылет. Функции с такими названиями есть в нескольких файлах (модулях). Напр. в xr_conditions, xr_wounded ну и в dialogs. Вот, как известно, и вызывается как имя_модуля.имя_функции : xr_wounded.is_wounded , dialogs.is_wounded ... Имена то загруженных модулей в _G есть. Также для каждого модуля устанавливается поле с именем - this (типа _М в lua) и значением - сам модуль (таблица, юзердата не важно) Теперь, если функция из модуля, должна вызвать другую функцию из этого же модуля, то нужно писать(из указанного примера) dialogs.is_wounded(...). Но поскольку есть переменная this (синоним dialogs), то можно писать и this.is_wounded(...) что одно и то же в рамках одного модуля. -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
abramcumner Спасибо за исследования.. Полезная информация. Но...Ни фига не понимаю в том, что не касается Lua(т.е. код С, С++), но из того что ты привёл (даже я понял принцип), действительно - вопрос закрыт. -
Artos
-
Очень интересная реализация Lua OOP представлена в комплекте Lua for Windows (для тех у кого есть) по адресу ...\5.1\lua\loop Там есть чему поучиться.
-
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Наконец-то появился НЕТ. Dennis_Chikin Да мне-то по большому барабану как там устроено в Сталке. Проповедую чистый lua. И то, что я выяснил - будет в пользу мне же. Жалею что высказался тут. Непонимание - бич нашего времени. Объясните мне, дураку, почему так получилось? Ведь закономерность в моих исследованиях очевидна?! Это всё просто ради спортивного интереса. -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Заинтересовал пост malandrinus-а по теме составления таблиц и оператора длины #. Провёл кое-какие исследования, и выяснил интересные вещи. Составил таблицу вида : t={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25} t[28] = 28 t[26] = 26 t[32] = 32 t[30] = 30 t[27] = 27 t[33] = 33 t[29] = 29 t[31] = 31 А теперь занилю некоторые значения : t[2] = nil t[4] = nil t[8] = nil t[16] = nil t[32] = nil И к чему я пришел? (использую оператор #) В показанном примере длина таблицы будет равна 1 Удаляемые поля в таблице до боли напоминают старшинство битов. Т.е. если удалить в вышеуказанной таблице только поле с индексом ("битом") 32, то оператор длины увидит всеполя до него. т.е. длина будет равна 31 Удалив поля с битами 32 и 16 (типа старшие биты в длине таблицы) оператор прочитает поля до меньшего(16-го бита), и длина будет равна 15. Интересно то, что для подобного эффекта нужно нилить поля с битами от старшего с меньшему по-порядку. t[4] = nil t[8] = nil t[16] = nil t[32] = nil покажет длину 3 t[8] = nil t[16] = nil t[32] = nil покажет длину 7 Если заниление будет происходить не по порядку, то длина определяется до старшего бита. t[8] = nil t[32] = nil определит длину 31 Удаление полей с другими битами ни к чему подобному не приводит. Ну или пока не докопался. Хотя...Нашел ещё такое t[32] = nil t[30] = nil длина 29 t[32] = nil t[28] = nil 27 t[32] = nil t[24] = nil 23 t[32] = nil t[16] = nil 15 Зависимость похожа, только как это понять? В обратную сторону тоже работает? Не пользоваться одновременно заниливанием и оператором #. Есть table.remove Наверное так и понимать. -
[SoC] Ковыряемся в файлах
Nazgool ответил на тему форума автора Halford в Скрипты / конфиги / движок
Buusty В топике "Язык Lua. Общие вопросы программирования." на страницах 10-20 где-то что-то было. -
[SoC] Ковыряемся в файлах
Nazgool ответил на тему форума автора Halford в Скрипты / конфиги / движок
CoIR_iT О подобном ветвлении и говорил Artos. Довесок совершенно правильный, но мы не знаем что человеку может понадобиться через некоторое время, т.к. полный замысел логики, и то что написано в коде, не всегда соответствует друг другу. Поэтому я, например, не рискую прибавлять что-то своё, выходящее за рамки заданного вопроса. -
[SoC] Ковыряемся в файлах
Nazgool ответил на тему форума автора Halford в Скрипты / конфиги / движок
Buusty Дык поставь обычный таймер на 5 минут. По окончании его времени выдай инфопорцию. А уже по ней в логике можешь написать : on_info = {+эта_самая_инфопорция} walker2 -
Я и не знал, что в lua появился новый оператор =~ (наверное "примерного присваивания" что ли?) Я бы мог понять это : if time_m =~ 59 then Так : Если переменной time_m присвоено значение примерно 59, то... :-)
-
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Да ничего толком не было сказано об условии задачи. Снова из раздела "Догадайся сам". Было сказано чтобы сообщения из таблицы не повторялись ("но не тоже самое, другое сообщение"), пока все не закончатся. А потом "все началось по новому кругу". Ничего о пересечении кругов не говорилось. Теперь выясняются дополнительные условия. Завтра может быть ещё что-то ... На данный момент могу предложить альтернативный вариант. Так, для разнообразия -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
proger_Dencheek Так не должно вылетать local table_messages = {} function random_message() table_messages = next(table_messages) and table_messages or {"msg_1","msg_2","msg_3","msg_4","msg_5"} local rnd = math.random(#table_messages) den.sms(table_messages[rnd]) table.remove(table_messages,rnd) end -
ColR_iT, можно ещё чуток "подкрутить"
-
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Эх. Крутил я, вертел... Есть совершенно замечательный способ имитации luabind от xStream _G.class = function (cls_name) if type(cls_name)~='string' then return function() end end local cls = {} local cls_mt = {} cls_mt.__call = function(...) local cls_obj = {parent = cls_mt.__index} -- imitate parent class, allows call parent's methods local cls_obj_mt = { __index = cls, __gc = function () if cls_obj.__finalize then cls_obj:__finalize() -- imitate destructor end end } setmetatable(cls_obj, cls_obj_mt) if cls_obj.__init then cls_obj:__init(...) -- imitate constructor end return cls_obj end setmetatable(cls, cls_mt) _G[cls_name] = cls return function(parent_cls) cls_mt.__index = parent_cls end end Но... Работаем ведь с Lua. И есть способ, поддерживающий и концепцию, и способы самого lua. Даже больше. Они являются более многофункциональными. Например вот самая примитивная реализация local SetMetaClass = setmetatable function Class(class) class = class or {} class.__index = class.__index or class return class end function Object(class, object) return SetMetaClass(object or {}, class) end local MetaClass = { __call = Object } function class(class) return SetMetaClass(Class(class), MetaClass) end A = class{xxx=12} oA = A{yyy=56} print(oA.xxx) -- 12 oA = class(oA) print(oA.xxx) -- nil И это только начало. Есть более расширенное представление. Из данного кода можно "выжать" очень много полезных методов. Поэтому если есть соображения по данному решению luabind, то прошу высказаться. -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
7.9 Согласен. Например меня, занимаясь wxLua, всегда напрягала необходимость обязательного указания всех необходимых аргументов (а их список может быть не самый короткий). И кроме всего того - в определённом порядке. Когда мне это всё надоело, я и создал обёртку с использованием ООП для классов wxLua. Теперь красота. Вызвал конструктор с необходимым(и) полем(и)-параметром(и), а остальные добавляются автоматом. -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
В lua таблицы построены настолько правильно, что скорость их обработки, естественно при использовании стандартных методов, так велика, что не имеет решающего значения. Ну если бы я был автором этого языка, то неужели написал бы на С заведомо медленную функцию? В среднем foreach и pairs работают одинаково быстро. Остальное зависит от... платформы, процессора.. и Бог его знает чего ещё. Например у меня foreach работает на пару десятых(сотых) долей секунды быстрее (при десятимилионном цикле). Тем не менее логичнее и понятнее, для меня, использовать pairs. Но тут уж каждому своё. -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
*Shoker* Неявная передача возможна при вызове метода, т.е. посредством двоеточия. При этом неявной переменной self будет соответствовать значение типа таблица или юзердата. В чистом lua это делается просто. В таблице _G всегда есть поля с загруженными модулями (файлами). Из этих полей можно "выдрать" название модуля. (если интересно, то могу показать) А вот в Сталкере...лень искать. Возможно есть что-то похожее на _M. Ну там this._NAME что-ли :-) Artos -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Artos Говоря о переменных, мы говорим о их именах, а в случае таблиц - ключах, которые, как известно, могут быть любого типа (кроме nil конечно). Поэтому 'userdata' ничем не отличается от других. Я подозревал что может возникнуть вопрос, - "А чем отличается глобальная переменная от поля таблицы", но никак не наоборот. Впрочем ты сам и ответил, что в конечном счёте глобальная переменная является полем таблицы. -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Раз уж мы в такой теме, то теоретически правильнее будет сказать не "С глобальными переменными нечто подобное можно выполнять", а "нечто подобное можно выполнять с полями таблиц". Т.к. в lua различают три вида переменных - глобальные, локальные и поля таблиц. -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Это в Сталкере так? Т.е вылетает? Ведь в обычном lua пока не определён первый оператор "[[" ну или "--[[', то читает правильно. Ну или покажи пример с вылетом. -
Есть же coroutine. Можно растянуть по времени взятие такого количества единиц предметов.
- [ЧН] OGSM CS 1.8 CE Fixes
- [ЧН] HARDWARMOD 3.2
- [ЗП] The Long Road
- [ЧН] New vision of War
- [ЧН] Old Good Stalker Mod - Clear Sky
- [ЗП] Unofficial Patch
- [ЗП] Смерти вопреки
- [ЗП] Контракт на хорошую жизнь
- [ЗП] Shoker Weapon Mod 2.1
- [ЗП] Hardcore pack for SGM 2.2
- [ЗП] Контракт Синдиката
- [ЗП] Клондайк 2.0
- ...и другие моды