В скриптах игры используется такой язык программирования, как Lua. 
 Следует отметить его особенности: 
 Регистрозависимость – это означает, что слова “
word” и “
Word” будут разными, следует это уяснить раз и навсегда, иначе Вы можете долго искать свою ошибку. 
 Динамическая идентификация типа переменной – это означает, что нам не нужно ассоциировать переменную с ее типом, интепретатор сделает это за Вас. 
 Как понять “ассоциировать переменную”: Это значит, что одна переменная может воспринимать в различных ситуациях с различным типом. То есть имея переменную со значением 
765 при математических выражениях (например: сложения) она будет воспринимать как 
integer (целочисленное значение), а при выводе переменной, допустим, в лог, она уже будет обрабатываться как 
string (строка) 
 В Lua функции, по строению, отличаются от процедур только наличием оператора “return” в своем теле, остальное аналогично процедурам. А по смыслу, функции возвращают информацию движку (проверка, результат подсчета), а процедуры являются последовательностью команд (создание объектов). 
 Давайте разберем код:  
Код
-- Функция получающая 2 аргумента   
 function listing_script(item, item_2)   
 local actor = db.actor   
 object = actor:object(item)   
 return object   
 end
 Итак, первая строка в листинге является однострочным комментарием (“
--”), есть еще и многострочные, начинаются они с “
--[[“, а заканчиваются знаками “
]]” 
 Далее идет создание функции 
listing_script с двумя аргументами 
item и 
item_2, 
item_2 я создал специально для того, чтобы продемонстрировать передачу нескольких аргументов. Третья строка, начинающаяся с оператора 
local, будет объявлением локальной переменной объекта (эта переменная будет недоступна для внешних обращений, т.е. для внешних функций), за ней идет простое объявление переменной 
object, которая вернет Булево значение (
true - истина, 
false - ложь) в зависимости от наличия предмета, переданного в первом аргументе, у ГГ. Также стоит отметить, что 
db.actor – вызов функции actor из файла 
db.script, синтаксически это показано точкой. Двоеточие же в 
actor:object() говорит о том, что вызывается метод класса 
actor (функция, с помощью которой можно обращаться к параметру класса). Ну и последняя функция 
 вернёт наше 
true или 
false туда, где функция вызывалась. Пример, 
local a = listing_script("af_medusa"). Переменная “
a” будет истинной, если у героя есть артефакт "Медуза" (af_medusa). 
 Теперь касаемо использования этих самых скриптов в игре S.T.A.L.K.E.R.: 
 Глобальные функции и процедуры хранятся в файле 
_g.script – Глобальность этих функций состоит в том, что их можно использовать не вводя имя файла. 
 Функции для использования из логики объектов хранятся в файле 
xr_conditions.script – Их используют в логике со специальными знаками: “
!” - отрицание (то есть неравно) и “
=” - равно 
 Проверка организуется в фигурных скобках (“
{” и “
}”), приведу пример на основе того-же скрипта из листинга: “
{=listing_script("af_medusa")}”. Условие выполнится только если у ГГ будет артефакт. 
 Процедуры для использования из логики объектов хранятся в файле 
xr_effects.script – Их используют из логики со знаком “
=” 
 Использование процедур организуется знаками процента (“
%”), приведу пример (скрипта нету, ну ладно, главное показать использование): “
%=spawn_object("af_medusa") =spawn_object("wpn_pm")%”. Тут будут выполняться сразу 2 процедуры spawn_object с разными аргументами, конечно-же можно использовать и разные процедуры. Использование нескольких процедур будет аналогично использованию нескольких функций. 
 Остальные скрипты можно писать в любом файле (можно создавать и свои) и их использование будет следующим: 
<имя_файла>.<имя_функции|имя_процедуры>(<передаваемые_аргументы_если_есть>)  Обратите внимание, что при вызове функций и процедур из диалогов невозможно передавать аргументы, т.е. вызов будет следующим: 
<имя_файла>.<имя_функции|имя_процедуры>