Nazgool 251 Опубликовано 26 Апреля 2013 (изменено) Stiingray, действительно, в проверке : if ren == renderer_r2 then , что такое renderer_r2? Это глобальная переменная с именем renderer_r2? Или это может быть локальная, объявленная в данном модуле (блоке) до её использования? Нет. Ни то, ни другое. Переменной с таким именем нет ни там ни там. Поэтому она равна nil, и ничему другому. Вот поэтому проверка никогда и не пройдёт. Изменено 26 Апреля 2013 пользователем Gun12 Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 26 Апреля 2013 Stiingray, дык а я тебе про что говорил? В первом случае ты получил значение ren : local ren = con:get_string("r2_gloss_factor") И теперь можешь его с чем-то сравнивать : if ren == 3 then Во втором случае ты получаешь какое-то значение ren : local ren = con:get_string("renderer") И с чем ты его сравниваешь? : if ren == renderer_r2 then ? (теперь внимательно, согласно синтаксису lua) Со значением переменной с именем renderer_r2 Т.е. есть некая область памяти, в которую записано ... НЕЧТО. Как lua найдёт эту область памяти? Нужно иметь координаты этой области. Вот координаты и записываются в имени этой области. Другими словами, если записано : renderer_r2, то lua ищет одноимённую запись в стеке (renderer_r2) которые на самом деле являются координатами области памяти, и обращаясь к этой области "показывает" то, что там "записано". Покажи мне - где у тебя ЕЩЁ (РАНЬШЕ) упоминается буквосочетание renderer_r2! В том коде что ты уже не один раз показываешь - НИГДЕ. А если нигде, то это значит только одно - nil Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 26 Апреля 2013 А-а-а, мать-перемать, сравнивать нужно было со строкой : if ren == "renderer_r2" then... Теперь наконец-то всё стало на свои места. Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 3 Августа 2013 (изменено) abramcumner Согласен По правилам Lua нельзя увеличивать таблицу во время перебора посредством table.insert. Можно только удалять или изменять элементы DEL Изменено 3 Августа 2013 пользователем Gun12 Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 28 Января 2014 (изменено) Может что-то типа : local dist_action_sep = '|' local state_sound_sep = '@' local t = {} function parse_my_condlist(str, sep) for one, two in str:gmatch('([^'..sep..']+)'..sep..'?([^'..sep..'?]*)') do one = one:match('^%s*(.-)%s*$') two = two:match('^%s*(.-)%s*$') if sep == dist_action_sep then t[#t+1] = {dist = tonumber(one)} parse_my_condlist(two, state_sound_sep) elseif sep == state_sound_sep then t[#t].state = one t[#t].sound = #two>0 and two or nil end end end parse_my_condlist(s, dist_action_sep) Получается таблица вида : { [1] = { ["state"] = "{=best_pistol}psy_armed,psy_pain", ["sound"] = "wounded_psy", ["dist"] = 50, }, [2] = { ["state"] = "{=best_pistol}psy_shoot,psy_pain", ["sound"] = "{=best_pistol}wounded_psy_shoot,wounded_psy", ["dist"] = 20, }, } В принципе можно парсить и дальше. Получится что-то вроде стандартной функции parse_condlist. Изменено 28 Января 2014 пользователем Gun12 Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 28 Января 2014 (изменено) А в чём проблема с этим случаем? Так же как и с другими. Всё парсится. Посмотри на паттерн - str:gmatch('([^'..sep..']+)'..sep..'?([^'..sep..'?]*)'). Знаки вопроса замечаешь? Поэтому если нет саунда, то и ... Бог с ним. Строки с "trim" вхождений ('^%s*(.-)%s*) можно убрать. В parse_condlist они всё равно убираются. Изменено 28 Января 2014 пользователем Gun12 Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 30 Января 2014 (изменено) Сталкер Лом, сначала тебе нужно разобраться с индексированием таблиц. Вот три сосны, в которых ты запутался : 1. tbl_locs["level"] = true 2. tbl_locs.level = true 3. tbl_locs[level] = true Первый и второй варианты полностью эквивалентны. Они определяют, что в таблицу tbl_locs добавляется поле, в котором ключем(индексом) является строка!!! "level". В третьем случае индексом поля будет значение, которое храниться в переменной с именем level. По правилам индексирования таблиц это может быть любой тип данных lua кроме nil. У тебя как раз должен быть этот случай, т.к. в переменной level ты сохраняешь результат работы функции level.name(). Почитай : PiL rus(только начало) - http://aap13.narod.ru/PiL/2.5.html и http://aap13.narod.ru/PiL/3.6.html PiL eng(полностью) - http://www.lua.org/pil/contents.html тут я когда-то начинал писать - http://stalkerin.gameru.net - база знаний - Незаконченные статьи - Таблицы... Изменено 30 Января 2014 пользователем Gun12 2 Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 1 Февраля 2014 (изменено) Dennis_Chikin Да, шаблон не очень понятен. В формате записи syndata и близко нет символа |. Или могут быть варианты через | ? (запамятовал) Не совсем ясно, тебя интересует шаблон, защищаюший от разных строк 's' ? Изменено 1 Февраля 2014 пользователем Gun12 Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 2 Февраля 2014 Дальше пока не смотрел, но читаю на входе строку 's', и (как и предполагал) ничего, кроме типа 'backoff@threat_weap' не вижу. Т.е. никаких разделителей '|' пока нет. Так что похоже существующий паттерн действительно не совсем к месту. Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 3 Февраля 2014 в строке конфига можно задавать не только одно состояние (стэйт) требующее синхронизации со звуком... Ага. Тогда все эти (в xr_meet) string.find-ы, string.sub-ы зря наворочены. Всё можно сделать в одном паттерне. Напр. : for state,sound in s:gmatch("([%w%_]+)%s*%@?%s*([%w%_]*)") do -- сразу получаем и state и sound ... end Помимо всего, этот паттерн расшифровывает строку 's' вида : 1. " psy_armed @ wounded_psy backoff @ threat_weap " 2. 'psy_armed @ | backoff ' Т.е. можно "забыть" поставить звук или разделитель | , а также добавить лишние пробелы. Таких форматов конечно нет, но тем не менее. Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 3 Февраля 2014 (изменено) Artos Да я то не против. Пусть будет как есть. Был задан вопрос, и меня заинтересовал (впрочем как и всегда) чисто академический интерес. Вот я и сделал так, чтобы тов. Dennis_Chikin в принципе перестал волновать вопрос первого (второго и т.д.) разделителя, т.к. (как уже говорил) паттерн не обращает внимания на его наличие вообще. Тут как? Сколько будет нюансов - столько (как правило больше) и вариантов решения. Так что на данный момент, и с текущим количеством информации о вопросе, решение пока такое. Изменено 3 Февраля 2014 пользователем Gun12 Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 7 Марта 2014 (изменено) Это нужно парсить строку вида : wp01|a=hide|s=speech1 ? .... Ага, дошло... Изменено 7 Марта 2014 пользователем Gun12 Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 7 Марта 2014 (изменено) Эквивалентна полностью. Только защиты той нет, что в оригинале. Интересен этот набор : [%w_\\%-%,%*] Почему не "Любые символы кроме пробельных и знака ="?. В чём смысл этого набора? Паттерн был бы проще. ... Ну хотя бы поставь проверку, что pname - это строка. А так всё нормально. ... Не знаю. Поиск по way-ям ничего из других символов, кроме %w_ и символа = не нашёл. ... И ещё. в паттерне такое выражение - =*. А что, можно ставить несколько символов =. Напр. a====hide ))? Может всё-таки заменить на =? т.е. вопросительный знак, а не звёздочка? Изменено 7 Марта 2014 пользователем Gun12 1 Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 13 Марта 2014 mumie Возьми в инвентарь только 4 сломанных предмета и проверь на numpad'e все 9 вариантов. Штук 5 должны быть равны 1 (детектор, фонарь, бинокль, пда, нож), остальные меньше 1. Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 16 Марта 2014 (изменено) Graff46 Прямого метода нет. Поворот возможен только при использовании *.xml файлов. Но способ скриптово управлять всем тем, что пока управляется только из *.xml существует. P.S. По крайней мере я это делаю. Только на вопрос КАК? пока не отвечу, т.к. расширение для этого ещё не дописал. Лень. Изменено 16 Марта 2014 пользователем Gun12 Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 16 Марта 2014 Вращать не выйдет Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 16 Марта 2014 (изменено) Поворот возможен только при использовании *.xml файлов ) Если в xml не прописать heading=1 (а xml не устраивает)... Мне метод когда статики выводят через *.xml не подходит ..то повторю, - Вращать не выйдет Изменено 16 Марта 2014 пользователем Gun12 Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 27 Марта 2014 (изменено) Zander_driver По всей вероятности у Вас не правильно работает функция zander_utils.string_uncompress Значения t1[1] - t1[4] получаются строками в выражении : self:AddFrameSpace(10, {"ui\\bar_red", "ui\\bar_yellow"}, t1[1], t1[2], t1[3], t1[4], self.mainframe) Если не верите, то вместо "остринговывания" : log("AddStatic;Arguments:"..texture..","..tostring(x)..","..tostring(y)..","..tostring(w)..","..tostring(h)) проверьте тип данных. Во всех валидных вариантах Вы производите с этими данными математические операции, при которых происходит автоматическое преобразование получаемых результатов в числовой формат. В каждом из не валидных данных Вы используете хотя бы один из передаваемых аргументов, с которыми не производятся никакие математические действия. И зависание может быть только от того, что X,Y,W или H - это строки. А функция CUIStatic:Init(x,y,w,h) строки не умеет кушать ) Где-то на "просторах" есть парсер .xml файлов, кто автор забыл Автор - Kirag Но я бы советовал установить (если нет) Lua расширение от RvP и использовать библиотеку LuaXml. С помощью этих библиотек можно кое-какие фортеля выкидывать. Если заинтересует - продолжу. Изменено 27 Марта 2014 пользователем Gun12 Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 27 Марта 2014 ComadorЕсли по-быстрому, то ... Движку всё-равно что записано в xml файле, главное что бы он был. Поэтому можно создать пустой файл, а затем динамически, с помощью библиотеки io в него писать нужный xml текст. Затем вызывать CScriptXmlInit и указывать на этот динамический файл. Переписывая его согласно необходимым условиям, можно управлять ранее недоступными процессами, определяющимися только в в xml файлах. Я делаю это с помощью специальной оболочки, использующей новые классы (аналоги стандартных), в которых добавлены методы управления всеми процессами, которые ранее необходимо было фактически прописывать в xml. 1 Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 28 Марта 2014 это то же самое или нет? Да, это то. Ещё нужна библиотека LuaXml. Там одна dll-ка и lua файл. Поделиться этим сообщением Ссылка на сообщение