скрипты сталкер зов припяти

Начальные сведения о скриптах

Материал из 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(«секция_предмета»)

Проверка на наличие нескольких и/или разных предметов

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *