IPB

Помощь по разделу

Сайт S.T.A.L.K.E.R. Inside / [ЗП] Параметры командной строки / Распаковщик ресурсов

>

Скрипты

 
 Орион
сообщение 13.07.2009, 11:34
Сообщение #221


Навий черны у ношьти
***************

Группа: Забанен
Сообщений: 2210
Регистрация: 11.03.2009
Из: Лиманск
Пользователь №: 10251




FAQ

Lua в X-Ray

Список всех функций, переменных, классов и т.п. что используются в Сталкере находится по адресу:
Код
gamedata/scripts/lua_help.script

Для получения файла надо распаковать игру. Можно скачать, в принципе (IMG:style_emoticons/default/smile.gif) Тут =>>Ссылко<<=
Уроки

Пример создания непися скриптами ЛУА. Автор: меченый(стрелок)
Скриптинг на инсайде



Сообщение отредактировал RayTwitty - 09.06.2018, 20:23
Перейти в начало страницы
 
 
 
Ответов
 atanda
сообщение 14.11.2019, 18:09
Сообщение #222


Почти Игроман
*********

Группа: Участник
Сообщений: 534
Регистрация: 05.11.2017
Из: Далеко в Сибири
Пользователь №: 28310



Цитата(Pavel_Blend @ 14.11.2019, 17:07) *
3) откуда растут ноги у скриптов сталкера? Какой скрипт вызывается самым первым? Что является началом работы скриптов?

Я тоже задавался этим вопросом, но после анализа(возможно, плохого) исходников пришёл к выводу, что фактически ничего не является началом работы. Каждый скрипт уникален и не предполагает наличие соседей. При загрузки скрипта, чтобы не конфликтовали глобальные переменные, для содержимого(функций, глоб. переменных) создаётся отдельное пространство имён. Далее скрипт исполняется, при обращении к несуществующей на момент исполнения таблице, например, my_script, действия продолжаются рекурсивно.
Перейти в начало страницы
 
 
 RayTwitty
сообщение 14.11.2019, 20:09
Сообщение #223


Босс
********************

Группа: Участник
Сообщений: 4257
Регистрация: 24.09.2010
Пользователь №: 14086



Цитата(Pavel_Blend @ 14.11.2019, 17:07) *
2) как в луа работает система модулей и пакетов?

В сталкерском луа вообще нет как таковых модулей и пакетов. Обращаемся сразу, никаких импортов, инклудов, запросов и т.д. С этим намного проще, чем в чистых языках.

Сообщение отредактировал RayTwitty - 14.11.2019, 20:40
Перейти в начало страницы
 
 
 Pavel_Blend
сообщение 14.11.2019, 20:41
Сообщение #224


Продвинутый геймер
********

Группа: Участник
Сообщений: 314
Регистрация: 12.11.2012
Пользователь №: 15200



Меня ещё удивил то факт, что можно обращаться к некоторым функциям, не указывая модуля, в котором они хранятся. Например, функция printf хранится в файле _g.script, а вызывать из других скриптов её можно так: printf(), а не так _g.printf(). Ещё видел другую функцию (не printf), которая так же использовалась.
Перейти в начало страницы
 
 
 RayTwitty
сообщение 14.11.2019, 21:54
Сообщение #225


Босс
********************

Группа: Участник
Сообщений: 4257
Регистрация: 24.09.2010
Пользователь №: 14086



Цитата(Pavel_Blend @ 14.11.2019, 20:37) *
Меня ещё удивил то факт, что можно обращаться к некоторым функциям, не указывая модуля, в котором они хранятся.

Это касается содержимого только _g скрипта. g - global
Перейти в начало страницы
 
 
 Pavel_Blend
сообщение 16.11.2019, 21:58
Сообщение #226


Продвинутый геймер
********

Группа: Участник
Сообщений: 314
Регистрация: 12.11.2012
Пользователь №: 15200



Продолжаю изучать луа. Кое что изучил, но всё равно не могу писать скрипты для сталкера. Какой способ изучения лучше всего выбрать, чтобы начать программировать для сталкера? Я пока думаю так:

1) читаю учебник "Программирование на языке Lua. Третье издание. (рус)" (ссылка в шапке данной темы), чтобы изучить чистый луа (без сталкеровских классов/функций) (или есть более полная/лучшая книга на русском?)

2) изучить стандартную библиотеку луа (на удивление она оказалась крошечной, по сравнению со стандартной библиотекой python)

3) как-то изучить сталкеровские функции/классы по lua_help.script

Наверное, самое трудное - это 3 пункт. Так как информация в lua_help.script не многословная и в сети нету полной документации.

Пока я остановился на первом пункте. И получилось сделать свой первый скрипт:
https://github.com/PavelBlend/stalker-lua-s...r/dm_reader.lua

Он считывает бинарные данные из dm файлов, помещает их в таблицу и печатает в консоль.

Ещё пытался изучать скрипты от модов, но ничего не понял. Изучал nlc7 и удивился скриптам, а именно sak_dialog.script и sak.script. Эти скрипты имеют несколько тысяч строк кода. Один в 9 тысяч, другой в 11 тысяч. Как разработчики умудряются с такими скриптами работать? Я бы разделил бы их на куски по 100-500 строк. Наверняка диалоги можно было бы разбить по локациям.
Перейти в начало страницы
 
 
 abramcumner
сообщение 17.11.2019, 11:47
Сообщение #227


Босс
********************

Группа: Участник
Сообщений: 4348
Регистрация: 27.04.2011
Из: Россия
Пользователь №: 14366



Цитата(Pavel_Blend @ 16.11.2019, 21:54) *
Ещё пытался изучать скрипты от модов, но ничего не понял.

А зачем моды, лучше с оригинала начать тогда.
На АМК есть тема с разбором lua_help: https://www.amk-team.ru/forum/topic/7450-sp...iyam-i-klassam/
В ней если не все описано, то очень многое.

Цитата
Изучал nlc7 и удивился скриптам, а именно sak_dialog.script и sak.script. Эти скрипты имеют несколько тысяч строк кода. Один в 9 тысяч, другой в 11 тысяч. Как разработчики умудряются с такими скриптами работать? Я бы разделил бы их на куски по 100-500 строк. Наверняка диалоги можно было бы разбить по локациям.

Диалоги и так разбиты по локациям(config/gameplay/dialogs_*.xml), в скриптах вспомогательная обвязка. Из-за того, что в оригинале из диалога в скриптовую функцию нельзя передать аргументы, приходится плодить кучу функций, которые вызывают одну и ту же функцию, но с разными аргументами. А если делать какой-нибудь бартер/выбор награды/починку на диалогах, то количество скриптовых функций разрастается в геометрической прогрессии. Смысла разбивать диалоговые функции по разным файлам нет, и пишутся и читаются они наоборот: сначала диалог, потом функция. Точно также и функции для логики.

Перейти в начало страницы
 
 
 atanda
сообщение 17.11.2019, 14:10
Сообщение #228


Почти Игроман
*********

Группа: Участник
Сообщений: 534
Регистрация: 05.11.2017
Из: Далеко в Сибири
Пользователь №: 28310



Цитата(Pavel_Blend @ 16.11.2019, 21:54) *
Изучал nlc7 и удивился скриптам, а именно sak_dialog.script и sak.script

Вполне возможно, что alpet'ом была написана на дельфях утилита для создания диалогов и в ней можно было бы писать экшены, а потом утилита сама записывала функции в файлик.
Перейти в начало страницы
 
 
 RayTwitty
сообщение 17.11.2019, 15:26
Сообщение #229


Босс
********************

Группа: Участник
Сообщений: 4257
Регистрация: 24.09.2010
Пользователь №: 14086



Pavel_Blend, может стоит сначала изучить файловую структуру игры? Не просто где конфиги и где скрипты, а более детально - диалоги, предметы, существа, UI, тексты и т.д. А по модам изучать смысла мало - как правило там лютый ахтунг, который только добавит вопросов.
Перейти в начало страницы
 
 
 Gaz24
сообщение 18.11.2019, 14:49
Сообщение #230


Почти Игрок
**

Группа: Участник
Сообщений: 17
Регистрация: 14.01.2013
Пользователь №: 15612



Добрый день. Вопрос по поводу скриптов и аи-схем. Как определить, что НПС в определенный момент времени ведет огонь через менеджер состояний или другой метод?
Перейти в начало страницы
 
 
 Pavel_Blend
сообщение 18.11.2019, 23:50
Сообщение #231


Продвинутый геймер
********

Группа: Участник
Сообщений: 314
Регистрация: 12.11.2012
Пользователь №: 15200



Такой вопрос возник:

движок сталкера добавляет функции в луа, которые равноправны функциям из базовой библиотеки? То есть например, есть функции pairs, getmetatable, next, которые находятся в базовой библиотеке. И чтобы их вызвать, достаточно написать getmetatable(). Но есть функции, которые предоставляются другими библиотеками, доступ к которым осуществляется не просто find, а string.find или math.abs. То есть нужно писать имя библиотеки и ставить точку, после которой идёт имя функции. Так вот, движок сталкера добавляет функции в базовую библиотеку, и чтобы использовать эти функции, не нужно писать имя библиотеки и точку. Например, есть такие функции, как vector(). Я ведь всё правильно понял? Ну, что движок xray добавляет новые функции именно в базовую библиотеку.

И ещё вопрос: есть ли у кого xml файл для Notepad++, который добавляет подсветку синтаксиса lua вместе со всеми сталкеровскими функциями? И чтобы сталкеровские функции были отличны по цвету от стандартных. Просто у меня не получается добавить новые ключевые слова в файл langs.xml. Notepad их просто игнорирует. Поэтому мне нужен отдельный xml файл с User Defined Language с описанием всего синтаксиса луа + сталкеровские функции.
Перейти в начало страницы
 
 
 atanda
сообщение 18.11.2019, 23:58
Сообщение #232


Почти Игроман
*********

Группа: Участник
Сообщений: 534
Регистрация: 05.11.2017
Из: Далеко в Сибири
Пользователь №: 28310



Цитата(Pavel_Blend @ 18.11.2019, 23:46) *
Ну, что движок xray добавляет новые функции именно в базовую библиотеку.

Смысл верен, только всё немного не так: "регистрация" происходит не в "базовой библиотеке", а в глобальном пространстве имён "_G", т.е. вызывая string.find, ты фактически делаешь _G["string"].find. Луа проходится по таблице и ищет соответствующее пространство имён, в данном случае "string".
Перейти в начало страницы
 
 
 Pavel_Blend
сообщение 19.11.2019, 00:02
Сообщение #233


Продвинутый геймер
********

Группа: Участник
Сообщений: 314
Регистрация: 12.11.2012
Пользователь №: 15200



atanda, понятно. А для notepad++ ни кто не добавлял сталкеровские функции? Для новичков было бы удобнее. Так как большая часть кода в сталкере - это вызов функций, добавленных из движка.
Перейти в начало страницы
 
 
 atanda
сообщение 19.11.2019, 00:16
Сообщение #234


Почти Игроман
*********

Группа: Участник
Сообщений: 534
Регистрация: 05.11.2017
Из: Далеко в Сибири
Пользователь №: 28310



Примерно так:
(IMG:https://images.gameru.net/thumb/e5d347bf789ede3.png)
или создавать свои файлы синтаксиса.
Перейти в начало страницы
 
 
 abramcumner
сообщение 19.11.2019, 00:16
Сообщение #235


Босс
********************

Группа: Участник
Сообщений: 4348
Регистрация: 27.04.2011
Из: Россия
Пользователь №: 14366



Pavel_Blend, https://ap-pro.ru/forum/105-10388-1

Сообщение отредактировал abramcumner - 19.11.2019, 00:19
Перейти в начало страницы
 
 
 Pavel_Blend
сообщение 19.11.2019, 00:25
Сообщение #236


Продвинутый геймер
********

Группа: Участник
Сообщений: 314
Регистрация: 12.11.2012
Пользователь №: 15200



abramcumner, по твоей ссылке есть только автозавершение и проверка синтаксиса. Мне нужна подсветка синтаксиса сталкеровских функций. Только нужно, чтобы цвет отличался от стандартных функций.
Перейти в начало страницы
 
 
 RayTwitty
сообщение 19.11.2019, 00:55
Сообщение #237


Босс
********************

Группа: Участник
Сообщений: 4257
Регистрация: 24.09.2010
Пользователь №: 14086



Цитата(Pavel_Blend @ 19.11.2019, 00:21) *
Мне нужна подсветка синтаксиса сталкеровских функций. Только нужно, чтобы цвет отличался от стандартных функций.

Такого вроде не существует. Единственное что я например делал, так это ассоциацию файлов .script с lua-синтаксисом (в оригинальном луа расширение .lua).

Цитата(Pavel_Blend @ 18.11.2019, 23:46) *
Так вот, движок сталкера добавляет функции в базовую библиотеку, и чтобы использовать эти функции, не нужно писать имя библиотеки и точку. Например, есть такие функции, как vector().

Ну так самописный вектор они в глобальную загнали, поэтому нет никаких "библиотек". В луа/сталке тут более уместно пространства имен.

Цитата(atanda @ 18.11.2019, 23:54) *
Луа проходится по таблице и ищет соответствующее пространство имён, в данном случае "string".

А еще, при однозначном определении типа, можно прям как в питоне вызывать напрямую))
Код
local t = "lol"
t:find("kek")
Перейти в начало страницы
 
 
 atanda
сообщение 19.11.2019, 08:28
Сообщение #238


Почти Игроман
*********

Группа: Участник
Сообщений: 534
Регистрация: 05.11.2017
Из: Далеко в Сибири
Пользователь №: 28310



Цитата(RayTwitty @ 19.11.2019, 00:51) *
можно прям как в питоне вызывать напрямую

Это больше похоже на синтаксический сахар. (IMG:style_emoticons/default/rolleyes.gif)
Перейти в начало страницы
 
 
 Pavel_Blend
сообщение 19.11.2019, 14:01
Сообщение #239


Продвинутый геймер
********

Группа: Участник
Сообщений: 314
Регистрация: 12.11.2012
Пользователь №: 15200



Цитата(RayTwitty @ 19.11.2019, 00:51) *
Цитата(Pavel_Blend @ 19.11.2019, 00:21) *
Мне нужна подсветка синтаксиса сталкеровских функций. Только нужно, чтобы цвет отличался от стандартных функций.

Такого вроде не существует. Единственное что я например делал, так это ассоциацию файлов .script с lua-синтаксисом (в оригинальном луа расширение .lua).

а в каком текстовом редакторе есть возможность добавить новые ключевые слова в lua, чтобы они были произвольного цвета, отличного от цвета стандартных функций? И как получить список всех функций, которые добавил движок в луа сталкера? Я пробовал пройтись по значениям из _G таблицы, но в ней, помимо си++ функций есть обычные скрипты, стандартные луа функции и прочее. Единственный способ - это извлекать имена из lua_help.script?
Перейти в начало страницы
 
 
 Pavel_Blend
сообщение 19.11.2019, 21:29
Сообщение #240


Продвинутый геймер
********

Группа: Участник
Сообщений: 314
Регистрация: 12.11.2012
Пользователь №: 15200



Получилось заставить Notepad++ читать более 4 наборов ключевых слов. Добавил ключевые слова из сталкеровского движка. Теперь они подсвечиваются розовым цветом. Но я не всё добавил. И так же добавилось кое-что лишнее. Например, функция printf. Она определена в файле _G.script и по идее не должна подсвечиваться розовым цветом. Как я узнал список ключевых слов: запустил игру и вызвал скрипт, который выводил в файл все ключи таблицы _G. Там много чего лишнего. А не добавились методы классов. На скриншоте видно, что слово object_binder подсвечено цветом, а net_spawn - нет. Нужно сделать подсветку метода net_spawn и всех других методов сталкеровских классов. Но вот как узнать список всех классов методов?
(IMG:https://images.gameru.net/thumb/b270d4aa76fd1ca.jpg)
Перейти в начало страницы
 
 
 Shoкer
сообщение 19.11.2019, 23:06
Сообщение #241


Кандидат Игровых Наук
******************

Группа: Участник
Сообщений: 3488
Регистрация: 27.07.2009
Пользователь №: 11447



Pavel_Blend, открой скрипт lua_help.script из оригинальной игры. Там будет всё то, что экспортируется из движка. Всё остальное создаётся напрямую в скриптах.
Ещё много полезного есть здесь - https://www.amk-team.ru/forum/topic/7450-sp...iyam-i-klassam/ , хотя писалось достаточно давно, ещё до исходников движка.

Сообщение отредактировал Shoкer - 19.11.2019, 23:09
Перейти в начало страницы
 
 
 
 

 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

Текстовая версия Сейчас: 01.10.2020, 22:54