скрипты сталкер зов припяти
Начальные сведения о скриптах
Материал из S.T.A.L.K.E.R. Inside Wiki
Содержание
ПРЕДИСЛОВИЕ
Итак, начнём. Создадим в папке gamedata/scripts файл с любым названием и расширением .script. Пускай, my_test.script. В нем будем прописывать функции.
Рассмотрим простой скрипт спавна предмета в рюкзак ГГ. Пропишем:
Многострочный комментарий выглядит так
Это обязательный элемент. В нем указываются аргументы функции, с которыми идет работа. В нашем случае таковых нету, но элемент обязателен. Дальше идёт сам спавн объекта:
В конце функции обязательно наличие end. Он означает конец функции. Логично, правда? 🙂
Напоминаю, при таком раскладе АК-74 заспавнится в рюкзак ГГ. Если же мы пожелаем заспавнить калаш где-нибудь на локации, вызов спавна приобретет следующий вид:
АК заспавнится в вагончике, недалеко от Деревни новичков.
Но без детального разбора мы дальше, пожалуй,не пойдем. В целом, скелет функции спавна таким методом выглядит так:
Написали? Отлично!
Теперь осталось только подключить это к игре, то есть вызвать функцию спавна.
Идём в файл dialogs_escape.xml и выбираем какой-нибудь диалог.
Там, после поля text, одной из фраз диалога приписываем:
Всё, сохраняем и тестируем. В итоге, когда вы в игре нажмёте на фразу после которой находится action, заспауниться калаш на указанных координатах.
Углублённое изучение
Прописываем функцию. Задаём условие:
В противном случае, выполняется код, следующий за ключевым словом else
Но, когда нужно проверить несколько значений (допустим) переменной, можно воспользоваться ключевым словом elseif
Для отрицания условия можно воспользоваться ключевым словом not Т.е.
Будет равен else в данном условии
И так, что же такое цикл. Цикл это повторение одного и того же действия n-ое кол-во раз, которое выглядит так:
И так, покажу наглядно на системе рандомного спавна. Для этого нам понадобится таблица максимальных значений level_vertex_id и game_vertex_id выглядит она так:
Таблицу записали, наконец приступим к оформлению главной функции
Далее помещаем вызов функции в bind_stalker.script в net_spawn() и при каждой загрузке будут спавнится мобы в рандомной точке
Помощь новичкам
Различные полезные функции и методы перенесены в эту статью [1]
Авторы
Оригинальный вид статьи:
Переоформление, перестройка, дополнение статьи:
Скрипты сталкер зов припяти
Большая часть представленных здесь скриптов была собрана на просторах иинтернета. Большое спасибо их авторам!
Внимание: Не все скрипты были проверенны на работоспособность и поэтому в случае выявления нерабочих функций напишите администратору.
А также: если вы не знаете как в диалог прописать функции, пользоваться проверками, а также инфопоршнями, поищите здесь!
Если Вы не знаете как узнать координаты, эта статья Вам поможет!
И напоследок. Если вы новичёк, настоятельно рекомендуется ознакомиться с основами скриптования в сталкере!
Функции для вызова через диалоги
Передача предмета от ГГ к собеседнику
function название_функции (trader, actor) dialogs.relocate_item_section(trader, «секция_шмотки», «out») end |
Передача предмета от собеседника к ГГ
function название_функции (trader, actor) dialogs.relocate_item_section(trader, «секция_шмотки», «in») end |
Передача денег от ГГ к собеседнику
function название_функции (first_speaker, second_speaker) dialogs.relocate_money(second_speaker, «кол-во денег, например 1000 (без кавычек)», «out») end |
Передача денег от собеседника к ГГ
function название_функции (first_speaker, second_speaker) dialogs.relocate_money(second_speaker, «кол-во денег, например 1000 (без кавычек)», «in») end |
function название_функции(actor, npc) npc:kill(npc) end |
Сделать НПС врагом ГГ
function название_функции(actor, npc) npc:set_relation (game_object.enemy, db.actor) end |
Изменить отношение ГГ к НПС
Изменить отношение НПС к ГГ
function название_функции(actor, npc) npc:set_character_community(«название_группировки», 0, 0) end |
Функции, использующие скрипты от АМК
Спавн НПС с записью его ID
Спавн раненого НПС
Функции для вызова любым способом
Воспроизвести звуковой сигнал в голове ГГ
function название_функции() local snd = sound_object(задаём путь к *.ogg файлу в папке sounds Например(писать без кавычек):»[[characters_voice\human_03\stalker\talk\leaves\leaves_42]]») snd:play_no_feedback(db.actor,sound_object.s2d, 0, vector():set(0, 0, 0), 2.0) end |
function Название_функции() local x= коорд. x local y= коорд. y local z= коорд. z local level_vertex= значение level_vertex local game_vertex_id= значение game_vertex_id alife():create(«секция_предмета_или_НПС»,vector():set(x,y,z),level_vertex,game_vertex_id) end |
Некрасивый вариант, но легче для ЦП
function Название_функции() alife():create(«секция_предмета_или_НПС»,vector():set(коорд. x,коорд. y,коорд. z),значение level_vertex,значение game_vertex_id) end |
function название_функции() local a = vector() a.x = координата_x a.y = координата_y a.z = координата_z db.actor:set_actor_position(a) end |
Отослать сообщение ГГ на ПДА
function название_функции() for a = 1,65534 do local se_obj = alife():object(a) if se_obj and se_obj:section_name() == «СЕКЦИЯ_ПРЕДМЕТА» then alife():release(se_obj, true) end end end |
Удаляем несколько одинаковых предметов
Рандомное удаление предметов из инвентаря ГГ
function название_функции(num) local actor = db.actor local cnt = actor:object_count() if cnt for i=1,num do local item = actor:object(math.random(0, cnt-1)) local sobj = alife():object(item:id()) if sobj then alife():release(sobj,true) cnt = actor:object_count() end end end |
function название_функции() local cnt = db.actor:object_count() for i=0, cnt-1 do local item = db.actor:object(i) local sobj = alife():object(item:id()) if sobj then alife():release(sobj,true) end end end |
Спавн НПС с записью его ID
Меняем группировку ГГ
function название_функции() db.actor:set_character_community(«название_группировки», 0, 0) end |
Меняем группировку НПС
function название_функции() local obj= alife():create(«секция_НПС»,vector():set(x,y,z),level_vertex,game_vertex)—задаём координаты! obj:on_death() end |
Спавним и вешаем метку в ПДА
function название_функции() db.actor:give_info_portion(«ПОРШЕНЬ») end |
function название_функции() db.actor:disable_info_portion(«ПОРШЕНЬ») end |
function название_функции() local se_obj = alife():object(«секция_предмета/НПС») if se_obj then alife():release(se_obj, true) end end |
function название_функции() local item = db.actor:object(«секция_предмета») db.actor:eat(item) end |
Проверка на наличие одного предмета
function название_функции() return first_speaker:object(«секция_предмета») Проверка на наличие нескольких и/или разных предметов
|