Скрипты |
Здравствуйте, гость ( Авторизация | Регистрация )
Сайт S.T.A.L.K.E.R. Inside / [ЗП] Параметры командной строки / Распаковщик ресурсов
Скрипты |
13.07.2009, 11:34
Сообщение
#201
|
|
Навий черны у ношьти Репутация: 377 Группа: Забанен Сообщений: 2210 Регистрация: 11.03.2009 |
FAQ Lua в X-Ray Список всех функций, переменных, классов и т.п. что используются в Сталкере находится по адресу: Код gamedata/scripts/lua_help.script Для получения файла надо распаковать игру. Можно скачать, в принципе Тут =>> Уроки Сообщение отредактировал RayTwitty - 09.06.2018, 20:23 -------------------- нарушение правил п. 7.2
|
 
|
|
|
|
05.12.2017, 20:48
Сообщение
#202
|
|
Грандмастер Репутация: 118 Группа: Участник Сообщений: 1788 Награды: 4 Регистрация: 04.04.2013 |
ставить колбек Да, там ниже это и предложили: Вот только с колбеком on_item_take есть косяк, описанный в этом посте: надо делать на net_spawn Можешь показать? Вообще, предложили дописать проверку актера на nil, вот так: Код function sad_predateli_pda() if db.actor ~= nil and db.actor:object("sad_mudak_pda") ~= nil and not db.actor:has_info("sad_predateli_info") then db.actor:give_info_portion("sad_predateli_info") end end UPD: Проверил - больше не вылетает. Сообщение отредактировал aka_sektor - 05.12.2017, 21:05 -------------------- |
 
|
|
27.05.2018, 17:00
Сообщение
#203
|
|
Игровой Бог Репутация: 648 Группа: Участник Сообщений: 5354 Награды: 9 Регистрация: 24.09.2010 |
Запамятовал, ключом таблицы в Lua может быть только строка или целое число?))
upd: Цитата Тип table (таблица) реализует ассоциативные массивы, это значит, что массив может быть проиндексирован не только числами, но и любым Lua значением, кроме nil и NaN. (Not a Number специальное значение для представления неопределенных и непредставимых числовых результатов, таких как 0/0.) Таблицы могут быть гетерогенными (разнородными); т.е. могут содержать значения всех типов (кроме nil). Любой ключ со значением nil не считается частью таблицы. И наоборот, любой ключ, не являющийся частью таблицы, имеет ассоциированное значение nil. Действительно работает)) Код local t1 = { [1] = "one" } local t2 = { [t1] = "two" } print(t2[t1]) --> "two" Хотя на практике я не встречал, чтобы в качестве ключей использовалось что-то отличное от числа или строки. Сообщение отредактировал RayTwitty - 27.05.2018, 17:30 -------------------- |
 
|
|
27.05.2018, 17:59
Сообщение
#204
|
|
Опытный Игрок Репутация: 4 Группа: Участник Сообщений: 54 Награды: 2 Регистрация: 26.07.2015 |
Запамятовал, ключом таблицы в Lua может быть только строка или целое число?)) upd: Цитата Тип table (таблица) реализует ассоциативные массивы, это значит, что массив может быть проиндексирован не только числами, но и любым Lua значением, кроме nil и NaN. (Not a Number специальное значение для представления неопределенных и непредставимых числовых результатов, таких как 0/0.) Таблицы могут быть гетерогенными (разнородными); т.е. могут содержать значения всех типов (кроме nil). Любой ключ со значением nil не считается частью таблицы. И наоборот, любой ключ, не являющийся частью таблицы, имеет ассоциированное значение nil. Действительно работает)) Код local t1 = { [1] = "one" } local t2 = { [t1] = "two" } print(t2[t1]) --> "two" Хотя на практике я не встречал, чтобы в качестве ключей использовалось что-то отличное от числа или строки. А еще для строковых ключей квадратные скобки можно не указывать: local my_t = {green="зеленый", yellow="желтый", red="красный"} |
 
|
|
09.06.2018, 19:56
Сообщение
#205
|
|
Игровой Эксперт Репутация: 623 Группа: Участник Сообщений: 2474 Награды: 5 Регистрация: 14.02.2009 |
Объясните пожалуйста синтаксис второй строчки кода, что делает двоеточие ? Вообще интересует синтаксис двоеточия в Lua.
local visualMonitor = require( "com.ponywolf.visualMonitor" ) -- к локальной переменной visualMonitor подключить файл visualMonitor local visMon = visualMonitor:new() -------------------- |
 
|
|
09.06.2018, 20:14
Сообщение
#206
|
|
Игровой Бог Репутация: 648 Группа: Участник Сообщений: 5354 Награды: 9 Регистрация: 24.09.2010 |
Объясните пожалуйста синтаксис второй строчки кода, что делает двоеточие ? Обращение к полю. Погугли операторы и метатаблицы Lua. Вот неплохое руководство по Lua: -------------------- |
 
|
|
09.06.2018, 20:22
Сообщение
#207
|
|
Игровой Эксперт Репутация: 623 Группа: Участник Сообщений: 2474 Награды: 5 Регистрация: 14.02.2009 |
Объясните пожалуйста синтаксис второй строчки кода, что делает двоеточие ? Обращение к полю. Погугли операторы и метатаблицы Lua. Вот неплохое руководство по Lua: А так это просто книга Роберта Иерусалимски - просто интерактиваная. Спасибо что скинул ссылку. Че то бегло пробежался по метатаблицам и такого не увидел -------------------- |
 
|
|
09.06.2018, 20:27
Сообщение
#208
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
Че то бегло пробежался по метатаблицам и такого не увидел А в операторах нет оператора двоеточие и в метатаблицах нет Двоеточие это синтаксический сахар для сокращения записи. Запись local visMon = visualMonitor:new() эквивалентна local visMon = visualMonitor.new(visualMonitor) То есть объект перед двоеточием передается первым параметром в функцию. А при объявлении функции через двоеточие в функцию добавляется первый аргумент self. Цитата The colon syntax is used for defining methods, that is, functions that have an implicit extra parameter self. Thus, the statement
function t.a.b.c:f (params) body end is syntactic sugar for t.a.b.c.f = function (self, params) body end Сообщение отредактировал abramcumner - 09.06.2018, 20:27 |
 
|
|
19.06.2018, 14:07
Сообщение
#209
|
|
Игровой Эксперт Репутация: 623 Группа: Участник Сообщений: 2474 Награды: 5 Регистрация: 14.02.2009 |
abramcumner помоги со следующим:
function instance:touch(event) self.xScale, self.yScale = 0.95, 0.95 end Как я это понял - self это первый скрытый параметр у функции, тогда получается у функции touch первым аргументом идет instance, а вторым event. Тогда self.xScale равносильно instance.xScale ? -------------------- |
 
|
|
19.06.2018, 14:33
Сообщение
#210
|
|
The One Репутация: 744 Группа: Участник Сообщений: 2715 Награды: 5 Регистрация: 05.12.2005 |
kiperenok, по вопросу - в зависимости от того, как вызываешь touch и да, и нет
Если вызываешь, как instance:touch(ev) или instance.touch(instance, ev) то да, если же как instance.touch(other_table, ev) то нет. Я думаю эта Сообщение отредактировал Neo][ - 19.06.2018, 14:36 -------------------- |
 
|
|
19.06.2018, 15:36
Сообщение
#211
|
|
Игровой Эксперт Репутация: 623 Группа: Участник Сообщений: 2474 Награды: 5 Регистрация: 14.02.2009 |
Я думаю эта Не в моем случае Там все на английском. -------------------- |
 
|
|
19.06.2018, 16:12
Сообщение
#212
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
Как я это понял - self это первый скрытый параметр у функции, тогда получается у функции touch первым аргументом идет instance, а вторым event. Тогда self.xScale равносильно instance.xScale ? Да, все правильно. Но это странный подход - разбирать код таким образом Тебе абревиатура ООП о чем-нибудь говорит? Объекты там, классы. Цитата Не в моем случае laugh.gif Там все на английском. RayTwitty давал ссылку на эту же книгу на русском |
 
|
|
19.06.2018, 19:23
Сообщение
#213
|
|
Игровой Эксперт Репутация: 623 Группа: Участник Сообщений: 2474 Награды: 5 Регистрация: 14.02.2009 |
RayTwitty давал ссылку на эту же книгу на русском Нашел в книге на русском эту главу, прочитал - вот теперь все понятно. Всем кто помог БОЛЬШОЕ спасибо ! -------------------- |
 
|
|
12.12.2018, 16:19
Сообщение
#214
|
|
Pro gamer
Почти Игроман Репутация: 72 Группа: Участник Сообщений: 622 Регистрация: 05.11.2017 |
Последняя luabind на текущий момент 0.7.1(2014 год) судя соурсфоржу и гиту. Проект в каком либо виде поддерживается на данный момент?
Сообщение отредактировал buffy - 12.12.2018, 16:19 |
 
|
|
27.09.2019, 18:39
Сообщение
#215
|
|
Ветеран Репутация: 11 Группа: Участник Сообщений: 84 Награды: 3 Регистрация: 13.09.2011 |
Парни, может кто подсказать в чем кроется проблема?
Вот такой код Код for cf, sec in string.gmatch(str, "%s*([%\%.-_%w]+)%s*%|%s*([-_%w]+)%s*") do валит игру с логом:Код SCRIPT SYNTAX ERROR: c:\ogsr\gamedata\scripts\_utils.script:225: invalid escape sequence near '"%s*([%' Использую недавно вышедший движок OGSR x64. На оригинальном движке ТЧ этот код работает безо вских проблем. |
 
|
|
28.09.2019, 01:37
Сообщение
#216
|
|
Почти Мастер Репутация: 1357 Группа: Участник Сообщений: 1155 Награды: 5 Регистрация: 28.05.2010 |
Небось старый луа просто тихо удалял бекслеш, а новый уже не переваривает кривые ескейп-последовательности и хочет, чтобы ты экранировал \. Попробуй добавить ещё один бекслеш перед существующим. Хз как в огср, но в обычном луа5.3 оно вывелось без ошибок:
А что вообще должна делать эта регулярка? -------------------- Сверхнарод, не желающий кормить своего уицраора шаввой, будет кормить чужого гаввахом!
--------------- ------------ ---------- -------- ------ ---- -- |
 
|
|
28.09.2019, 11:06
Сообщение
#217
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
|
 
|
|
28.09.2019, 13:07
Сообщение
#218
|
|
Ветеран Репутация: 11 Группа: Участник Сообщений: 84 Награды: 3 Регистрация: 13.09.2011 |
Попробуй добавить ещё один бекслеш перед существующим. Спасибо, помогло.Хз как в огср, но в обычном луа5.3 оно вывелось без ошибок Судя по логу: "--LUA version: [LuaJIT 2.1.0-beta3]"А что вообще должна делать эта регулярка? +++ --/summary/>> функция парсинга параметров файла "overrides_by_schemes.ltx" function getTableValuesParam(str) local all_els = {} --'парсим скриптовые таблицы for ft in string.gmatch(str, '%"%s*([-_%.%w]+)%s*%"') do local base_tbl, file_name local tbl_name = ft for f, t in string.gmatch(ft, "([-_%w]+)%.([-_%w]+)") do file_name = f tbl_name = t end if file_name and tbl_name then base_tbl = _G[file_name] and _G[file_name][tbl_name] else base_tbl = _G[ft] end if type(base_tbl) == "table" then for k in pairs(base_tbl) do table.insert(all_els, k) end end end --'парсим конфиговые списки параметров for cf, sec in string.gmatch(str, "%s*([%\\%.-_%w]+)%s*%|%s*([-_%w]+)%s*") do --'"%s*([%' local ini = ini_file(cf) if ini and ini:section_exist(sec) then do local ind = 0 repeat local valid, id, value = ini:r_line(sec, ind, "", "") if valid then table.insert(all_els, id.." >> "..value) end ind = ind + 1 until (not valid) end end end --'парсим дополнительные параметры for pm, list in string.gmatch(str, "%s*([%+%-])%s*%{%s*([-_%s%,%w]+)%s*%}") do for el in string.gmatch(list, "%s*([^%,%s][-_%w]+)%s*") do if pm == "+" then table.insert(all_els, el) end if pm == "-" then local ind = 0 for i, v in ipairs(all_els) do if v == el then ind = i break end end if ind > 0 and all_els[ind] then table.remove(all_els, ind) end end end end return all_els end |
 
|
|
14.11.2019, 17:11
Сообщение
#219
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
Я сегодня ещё раз начал вникать в луа. Частично прочитал несколько небольших учебников. Появились вопросы:
1) что это за слово class? Понятно, что создаёт класс, но в Notepad++ это ключевое слово даже не подсвечивается цветом. Такое ощущение, что эта вещь есть только в сталкеровских скриптах. Это слово class ведь не стандартная для языка часть? 2) как в луа работает система модулей и пакетов? В книжках пишут, что нужно использовать require. Но в сталкерских скриптах нету ни одного require. Я заметил, что модули используются без импорта. Например, если в папке gamedata\scripts есть файл my_module.script, то чтобы использовать функции из этого модуля, нужно сразу (без импорта) к ним обращаться: my_module.my_funct() В питоне с модулями всё по-другому. Их всегда нужно импортировать так: import my_module, а потом использовать так: my_module.my_funct(). Но в луа я не совсем понимаю, как обращаться к коду из вне. Всё как волшебство какое-то. Пишем my_module.my_funct() и он сам импортируется что ли? 3) откуда растут ноги у скриптов сталкера? Какой скрипт вызывается самым первым? Что является началом работы скриптов? 4) как скриптом вывести в игровую консоль сообщение? printf вроде не работает. -------------------- |
 
|
|
14.11.2019, 17:33
Сообщение
#220
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
1) что это за слово class? Понятно, что создаёт класс, но в Notepad++ это ключевое слово даже не подсвечивается цветом. Такое ощущение, что эта вещь есть только в сталкеровских скриптах. Это слово class ведь не стандартная для языка часть? Это магия луа+луабинд. Луа: при вызове функции с одним строковым(таблицей) параметром можно опускать скобки. Записи class("se_stalker") и class "se_stalker" эквивалентны. Луабинд: добавляет функцию class и прочую обвязку. См. luabind open.cpp Цитата 2) как в луа работает система модулей и пакетов? В книжках пишут, что нужно использовать require. Но в сталкерских скриптах нету ни одного require. Я заметил, что модули используются без импорта. Например, если в папке gamedata\scripts есть файл my_module.script, то чтобы использовать функции из этого модуля, нужно сразу (без импорта) к ним обращаться: my_module.my_funct() В питоне с модулями всё по-другому. Их всегда нужно импортировать так: import my_module, а потом использовать так: my_module.my_funct(). Но в луа я не совсем понимаю, как обращаться к коду из вне. Всё как волшебство какое-то. Пишем my_module.my_funct() и он сам импортируется что ли? Это магия движка. Если не находится таблица my_module, пытается подгрузить из одноименного файла .script. Цитата 3) откуда растут ноги у скриптов сталкера? Какой скрипт вызывается самым первым? Что является началом работы скриптов? Формально наверное _G.script. Но скрипты, привязанные к серверным и клиентским объектам, диалогам и прочему, вызываются "сами по себе". Цитата 4) как скриптом вывести в игровую консоль сообщение? printf вроде не работает. Если собрать движок без дефайна MASTER_GOLD работает и printf и log. Если на оригинальном движке, то только через console():execute("load ~~~"..escape(msg)). Типа загружаешь несуществующий сейв, движок ругается на его отсутствие и выводит твою строку В принципе во всех модах есть уже готовая функция log/dbglog. |
 
|
|
14.11.2019, 17:40
Сообщение
#221
|
|
. Репутация: 750 Группа: Участник Сообщений: 7072 Награды: 4 Регистрация: 30.07.2010 |
Это магия луа+луабинд. Луа: при вызове функции с одним строковым(таблицей) параметром можно опускать скобки. Записи class("se_stalker") и class "se_stalker" эквивалентны. Луабинд: добавляет функцию class и прочую обвязку. См. luabind open.cpp Ещё стоит упомянуть что это функция возвращает функцию в которую передаётся базовый класс в скобках. Это уже граничит с чёрной магией, но луабинд целиком на ней построен, так что не страшно. |
 
|
|
Текстовая версия | Сейчас: 26.04.2024, 01:07 |