Перейти к контенту

Скриптование


Svoboда

Рекомендуемые сообщения

Stiingray, действительно, в проверке : if ren == renderer_r2 then , что такое renderer_r2?

Это глобальная переменная с именем renderer_r2?

Или это может быть локальная, объявленная в данном модуле (блоке) до её использования?

Нет. Ни то, ни другое. Переменной с таким именем нет ни там ни там.

Поэтому она равна nil, и ничему другому.

Вот поэтому проверка никогда и не пройдёт.

Изменено пользователем Gun12

Поделиться этим сообщением


Ссылка на сообщение

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

Поделиться этим сообщением


Ссылка на сообщение

А-а-а, мать-перемать, сравнивать нужно было со строкой : if ren == "renderer_r2" then...

Теперь наконец-то всё стало на свои места.

Поделиться этим сообщением


Ссылка на сообщение

abramcumner

Согласен

По правилам Lua нельзя увеличивать таблицу во время перебора посредством table.insert.

Можно только удалять или изменять элементы

DEL

Изменено пользователем Gun12

Поделиться этим сообщением


Ссылка на сообщение

Может что-то типа :

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.

Изменено пользователем Gun12

Поделиться этим сообщением


Ссылка на сообщение

А в чём проблема с этим случаем? Так же как и с другими. Всё парсится.

Посмотри на паттерн - str:gmatch('([^'..sep..']+)'..sep..'?([^'..sep..'?]*)'). Знаки вопроса замечаешь? Поэтому если нет саунда, то и ... Бог с ним.

Строки с "trim" вхождений ('^%s*(.-)%s*) можно убрать. В parse_condlist они всё равно убираются.

Изменено пользователем Gun12

Поделиться этим сообщением


Ссылка на сообщение

Сталкер Лом,

сначала тебе нужно разобраться с индексированием таблиц.

Вот три сосны, в которых ты запутался :

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 - база знаний - Незаконченные статьи -  Таблицы...

Изменено пользователем Gun12
  • Нравится 2

Поделиться этим сообщением


Ссылка на сообщение

Dennis_Chikin

Да, шаблон не очень понятен. В формате записи syndata и близко нет символа |. Или могут быть варианты через | ? (запамятовал)

Не совсем ясно, тебя интересует шаблон, защищаюший от разных строк 's' ?

Изменено пользователем Gun12

Поделиться этим сообщением


Ссылка на сообщение

Дальше пока не смотрел, но читаю на входе строку 's', и (как и предполагал) ничего, кроме типа 'backoff@threat_weap' не вижу.

Т.е. никаких разделителей '|' пока нет.

Так что похоже существующий паттерн действительно не совсем к месту.

Поделиться этим сообщением


Ссылка на сообщение

в строке конфига можно задавать не только одно состояние (стэйт) требующее синхронизации со звуком...

Ага.

Тогда все эти (в 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  '

Т.е. можно "забыть" поставить звук или разделитель | , а также добавить лишние пробелы.

Таких форматов конечно нет, но тем не менее.

Поделиться этим сообщением


Ссылка на сообщение

Artos

Да я то не против. Пусть будет как есть. Был задан вопрос, и меня заинтересовал (впрочем как и всегда) чисто академический интерес.

Вот я и сделал так, чтобы тов. Dennis_Chikin в принципе перестал волновать вопрос первого (второго и т.д.) разделителя, т.к. (как уже говорил)  паттерн не обращает внимания на его наличие вообще.

Тут как? Сколько будет нюансов - столько (как правило больше) и вариантов решения. Так что на данный момент, и с текущим количеством информации о вопросе, решение пока такое.

Изменено пользователем Gun12

Поделиться этим сообщением


Ссылка на сообщение

Это нужно парсить строку вида : wp01|a=hide|s=speech1 ?

....

Ага, дошло...

Изменено пользователем Gun12

Поделиться этим сообщением


Ссылка на сообщение

Эквивалентна полностью. Только защиты той нет, что в оригинале.

Интересен этот набор : [%w_\\%-%,%*]

Почему не "Любые символы кроме пробельных и знака ="?. В чём смысл этого набора?

Паттерн был бы проще.

...

Ну хотя бы поставь проверку, что pname - это строка. А так всё нормально.

...

Не знаю. Поиск по way-ям ничего из других символов, кроме %w_ и символа = не нашёл.

...

И ещё. в паттерне такое выражение - =*. А что, можно ставить несколько символов =. Напр. a====hide  ))?

Может всё-таки заменить на =? т.е. вопросительный знак, а не звёздочка?

Изменено пользователем Gun12
  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

mumie

Возьми в инвентарь только 4 сломанных предмета и проверь на numpad'e все 9 вариантов. Штук 5 должны быть равны 1 (детектор, фонарь, бинокль, пда, нож), остальные меньше 1.

Поделиться этим сообщением


Ссылка на сообщение

Graff46

Прямого метода нет.

Поворот возможен только при использовании *.xml файлов.

Но способ скриптово управлять всем тем, что пока управляется только из *.xml существует.

 

P.S. По крайней мере я это делаю. Только на вопрос КАК? пока не отвечу, т.к. расширение для этого ещё не дописал. Лень.

Изменено пользователем Gun12

Поделиться этим сообщением


Ссылка на сообщение

Поворот возможен только при использовании *.xml файлов

) Если в xml не прописать heading=1 (а xml не устраивает)...

Мне метод когда статики выводят через *.xml не подходит

..то повторю, - Вращать не выйдет

Изменено пользователем Gun12

Поделиться этим сообщением


Ссылка на сообщение

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.

С помощью этих библиотек можно кое-какие фортеля выкидывать. Если заинтересует - продолжу.

Изменено пользователем Gun12

Поделиться этим сообщением


Ссылка на сообщение
Comador

Если по-быстрому, то  ...

Движку всё-равно что записано в xml файле, главное что бы он был.

Поэтому можно создать пустой файл, а затем динамически, с помощью библиотеки io в него писать нужный xml текст.

Затем вызывать CScriptXmlInit и указывать на этот динамический файл.

Переписывая его согласно необходимым условиям, можно  управлять ранее недоступными процессами, определяющимися только в в xml файлах.

 

Я делаю это с помощью специальной оболочки, использующей новые классы (аналоги стандартных), в которых добавлены методы управления всеми процессами, которые ранее необходимо было фактически прописывать в xml.

  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

 

 это то же самое или нет?

Да, это то. Ещё нужна библиотека LuaXml. Там одна dll-ка и lua файл.

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...