сталкер как удалить нпс через скрипт

Сталкер как удалить нпс через скрипт

Большая часть представленных здесь скриптов была собрана на просторах иинтернета. Большое спасибо их авторам!

Внимание: Не все скрипты были проверенны на работоспособность и поэтому в случае выявления нерабочих функций напишите администратору.

А также: если вы не знаете как в диалог прописать функции, пользоваться проверками, а также инфопоршнями, поищите здесь!

Если Вы не знаете как узнать координаты, эта статья Вам поможет!

И напоследок. Если вы новичёк, настоятельно рекомендуется ознакомиться с основами скриптования в сталкере!

Функции для вызова через диалоги

Передача предмета от ГГ к собеседнику

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

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

Источник

Функции script_stalker

11. Привязка сталкера к конкретной позиции ( к vertex _ id )

xr_position. setPosition(obj, position)

position – vertex _ id ноды, к которой он будет привязан.

Если вам нужно, чтобы в каком то экшине он был в данной позиции, то нужно сделать:

action:add_precondition (world_property(properties[«position»], true))

где properties[«position»]= xr_evaluators_id.position

2. Смена положений тела

object – объект, которому нужно изменить положение тела

new – id нового положения тела

Чтобы во время смены положений избежать действий ваших экшнов, нужно сделать следующее

action:add_precondition (world_property(properties[«state_end»], true))

где properties[«state_end»] = xr_evaluators_id.state_change

— ОПИСАНИЕ ИДЕНТИФИКАТОРОВ ПОЗИЦИЙ:

Xr_state.sit _ wait

3. Рандомное проигрывание звуков

Xr_sound.set_sound(npc, sound, now)

— Пример конструктора, описывающего звуки

— Проигрыш саундов ( By Stohe )

4. Проверка, находится ли объект в онлайне

передавать ID объекта

5. Проверка, является ли данный итем оружием

передавать cls _ id объекта

6. Настройка реакций

Реакции можно настраивать через кастом дату и в рантайме.

В рантайме можно добавлять и удалять правила

где obj – объект, которому вы добавляете правило

В кастом дате правила нужно писать без кавычек, а в функциях – в кавычках.

Список поддерживаемых правил:

“ignore” – игнорирует все раздражители

“ silence ” – не издавать звук (не говорить реплики)

7. Время суток в мс

8. Время суток в часах

function parse_names( s )

Возвращает один из obj. Веса >= 0

function random_choice_weighted( a )

function play_sound (obj, delay, theme, sub_theme, phrase_set, sub_phrase)

phrase _ set – набор фраз в подтеме, sub _ phrase – номер фразы в наборе.

Первые 3 параметра обязательны, остальные нет. Для необязательных параметров

Будут выбраны рандомные значения.

function create_sound_constructor (theme, sub_theme) – возвращает sound constructor. Параметры обязательны и соответствуют тому, что изложено выше.

Пример конструктора, описывающего звуки

Добавление своих тем.

Тема – ассоциативный массив (таблица) в которой хранятся таблицы подтем. Подтема – таблица, в которой хранится идентификатор загруженных звуков и их количество. Пример :

sounds_base,
obj:add_sound («script_replics\\radio\\message\\radio_turn_on_», 30,

snd_type.talk, 2, 1, sounds_base + 0),

obj:add_sound («script_replics\\radio\\commander\\radio_start_», 30,

snd_type.talk, 2, 1, sounds_base + 1),
obj:add_sound («script_replics\\radio\\message\\radio_voice_», 30,

snd_type.talk, 2, 1, sounds_base + 2),
obj:add_sound («script_replics\\radio\\commander\\radio_reply_», 30,

snd_type.talk, 2, 1, sounds_base + 3),
obj:add_sound («script_replics\\radio\\message\\radio_voice_», 30,

snd_type.talk, 2, 1, sounds_base + 4),
obj:add_sound («script_replics\\radio\\commander\\radio_finish_», 30,

snd_type.talk, 2, 1, sounds_base + 5),
obj:add_sound («script_replics\\radio\\message\\radio_turn_off_», 30,

snd_type.talk, 2, 1, sounds_base + 6)
>
>

Здесь объявлена тема commander _ radio с одной подтемой. Для добавления еще одной подтемы нужно добавить еще одну таблицу к теме и прописать по аналогии с существующей (соответственно с нужными параметрами).

Необходимо, чтобы поле sound _ base четко соответствовало своему значению, иначе может произойти вылет движка.

11. Прекращение проигрывания звука

Источник

Сталкер как удалить нпс через скрипт

Любая функция начинается со слов

Обращаю внимание, что все функции вызываются из других скриптов. Допустим нам из одного скрипта, нужно вызвать(запустить функцию в другом) для этого мы пишем
название скрипта . название функции в скрипте (парметр если есть)
my.my_function()

Глобальные можно объявлять вначале скрипта и она будет сохранятся в коде, в памяти процесса (если я правильно понял)
Переменная объявляется только перед функцией и логическими выражениями, где используется переменная и её использует только та функция, перед которой она объявляется (На пальцах перед строкой с вашей функцией). Т.е елси функция простая без логических решений(if, elseif, for и.т.д) То ставим перед функцией, если же есть переменная, которая находится в теле такого логического решения, то она ставится строго перед этим логическим решением!

local helth = db.actor.helth
function my_function()
.
end

function my_function()
if db.actor.psy==0.5 then
db.actor:kill(db.actor)
end
end

Перевод: Если подходит условие то
1 действие
иначе (т.е условие не выполняется)
2 действие
конец тега
Пример:

function my_function()
if db.actor.psy==0.5 then
db.actor:kill(db.actor)
else
db.actor.give_info_portion(«info»)
end
end

Допустим нам нужно проверить несколько условий:
Чтобы они все выполнялись!

Если подходит хоть один элемент.
if (db.actor) or (db.actor.helth==1) or (db.actor.psy ==0.5) then
действие
end

Данный метод заменяет перебор через таблицу. Отличается простотой и потерей производительности.

Тон ничего хорошего не вышло бы. Так как проверялись бы все функции. А в первом варианте до первого попавшегося.

Но правильнее и эстетичнее, сразу писать так.

if (db.actor) then
.
end

Проверкой советую проверять многие элементы, так как в игре они зачастую не существуют в определенные моменты.

if имя скрипта then
.
end

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

if math.random(0,1) then
действие
end
Если выбранное число меньше 1, то срабатывает функция.

if math.random(0,1) then
действие
else
.
end
Добвавляется другое действие.
Советую брать целые числа от 1 до 10 для создания процентного срабатывания, но лучше 0 и 1.

Текстовый.
Допустим вы отправляете сообщение и хотите выбрать рандомный текст.
1) Создается таблица с вашими переменными (Это может быть и секция для спавна, и слово, и любая другая переменная)

for i =1, 5000 do
действие
end

Это цикл, который прокрутнет ваше действие 5000 раз. Переменная i любая буква, число 5000 обозначает количество циклов(сколько раз пройдет ваше действие).

Допустим мы сделали такую функцию

— удаляем объект из игры(Взято из АМК )

function remove( remove_item )
if remove_item

Допустим, идет проверка и если она оканчивается удачно, то функция должна вернуть одну переменную, если нет, то другую.

function my()
if proverka () == true then
.
end
end

function proverka ()
if db.actor then
return true
else
return false
end

Функции вызваются из других скриптов, нужно лишь найти место. Если она вызывается постоянно. То нужно пихать в колбэк на апдет в bind_stalker.script

function actor_binder:update(delta)
object_binder.update(self, delta)

if string.find(command_line(), «-designer») then
return
end

if self.already_jumped==false and jump_level.need_jump==true and (device().frame > self.spawn_frame+2000) then
jump_level.try_to_jump()
self.already_jumped = true
return
end

— Вызов апдейта переноса игрока проводником
if travel_func

— DEBUG slowdown
—slowdown.update()
local time = time_global()
game_stats.update (delta, self.object)
— апдейт погоды
self.weather_manager:update()

— Обновление отключения ввода с клавиатуры.
if self.st.disable_input_time

= nil and
game.get_game_time():diffSec(self.st.disable_input_time) >= self.st.disable_input_idle
then
level.enable_input()
self.st.disable_input_time = nil
end

— обновление пси-антенны
if sr_psy_antenna.psy_antenna then
sr_psy_antenna.psy_antenna:update(delta)
end
—[[
—‘ Вывод сообщения о большой радиации
if self.object.radiation >= 0.7 then
local hud = get_hud()
local custom_static = hud:GetCustomStatic(«cs_radiation_danger»)
if custom_static == nil then
hud:AddCustomStatic(«cs_radiation_danger», true)
hud:GetCustomStatic(«cs_radiation_danger»):wnd():TextControl():SetTextST(«st_radiation_danger»)
end
else
local hud = get_hud()
local custom_static = hud:GetCustomStatic(«cs_radiation_danger»)
if custom_static

if self.bCheckStart then
printf(«SET DEFAULT INFOS»)
if not has_alife_info(«global_dialogs») then
self.object:give_info_portion(«global_dialogs»)
end
if not has_alife_info(«level_changer_icons») then
self.object:give_info_portion(«level_changer_icons»)
end
self.bCheckStart = false

—if self.actor_weapon_on_start == true then
—db.actor:activate_slot(3)
—self.actor_weapon_on_start = false
—end
end
—device().precache_frame== 0 and
if not self.loaded_slot_applied then
self.object:activate_slot(self.loaded_active_slot)
self.loaded_slot_applied = true
end
xr_s.on_actor_update(delta)

= true) then
self.surge_manager:initialize()
self.f_surge_manager_loaded = true
end
if(self.surge_manager.levels_respawn[level.name()]) then
self.surge_manager:respawn_artefacts_and_replace_anomaly_zone()
end
self.surge_manager:update()
end
— Апдейт доступности для симуляции.
simulation_objects.get_sim_obj_registry():update_avaliability(alife():actor())

if not self.loaded then
get_console():execute(«dump_infos»)
self.loaded = true
end
treasure_manager.get_treasure_manager():update()

if not(primary_objects_filled) then
pda.fill_primary_objects()
primary_objects_filled = true
end
pda.fill_sleep_zones()
—СЮДА в САМЫЙ КОНЕЦ
end

В том же скрипте есть колбэки на взятие, потерю, использование предметов. Нужно лишь искать.
Этим вы займетесь сами, или спросите у меня.

В диалогах можно вызывать через тег (без () )

Источник

Сталкер как удалить нпс через скрипт

Структуру папок и местонахождение основных файлов игры Сталкер смотрим здесь Структура файлов и папок

Короче, нашел у себя в загашнике решение (вроде как от самого Архары) и испытал, создав ситуацию с неотключившимся выбросом (не уходил с локации пока таймер не обнулился), вот описание (подправил немного):

Добавить в самый низ файла: \gamedata\scripts\arhara_dialog.script
вот такую функцию:

Либо, в файл: gamedata\scripts\bind_stalker.script

под строку: function actor_binder:update(delta)

добавить вызов: arhara_dialog.dell_duratskiy_timer()

Полный список Переключателей Командной Строки для STALKER’а приведённый ниже сопровождается также кратким пояснение для каждого, где это было возможно. Я протестировал каждый и все переключатели, но некоторые переключатели не имеют видимого эффекта или просто подвешивают игру во время загрузки. Инструкции по предполагаемому использованию наиболее полезных переключателей приведены на протяжении этого гида:

Источник

Сталкер как удалить нпс через скрипт

Это, что бы проверять наличие НЕСКОЛЬКИХ и РАЗНЫХ предметов в рюкзаке ГГ

= false and
ваш_скрипт.item_much(«kolbasa»,5)

= false and
ваш_скрипт.item_much(«bread»,5)

= false
end
Проверка на количество разных предметов

Вынос какой либо информации в другой файл (в нашем случае, имеем например кучу текстов, которые занимают кучу места в файле, тормозят и мешают ориентироваться в нем):

200?’200px’:»+(this.scrollHeight+5)+’px’);»> local all_text = <

msg_1 = «%c[10,241,129,129]»..»Заголовок:»..»\\n»..»%c[10,241,129,129]Сообщение. «..»\n»,
msg_2 = «%c[10,241,129,129]»..»Заголовок:»..»\\n»..»%c[10,241,129,129]Сообщение. «..»\n»,
msg_3 = «%c[10,241,129,129]»..»Заголовок:»..»\\n»..»%c[10,241,129,129]Сообщение. «..»\n»,
.
msg_10 = «%c[10,241,129,129]»..»Заголовок:»..»\\n»..»%c[10,241,129,129]Сообщение. «..»\n»
>,

msg_1 = «%c[10,241,129,129]»..»Заголовок:»..»\\n»..»%c[10,241,129,129]Сообщение. «..»\n»,
msg_2 = «%c[10,241,129,129]»..»Заголовок:»..»\\n»..»%c[10,241,129,129]Сообщение. «..»\n»,
msg_3 = «%c[10,241,129,129]»..»Заголовок:»..»\\n»..»%c[10,241,129,129]Сообщение. «..»\n»,
.
msg_10 = «%c[10,241,129,129]»..»Заголовок:»..»\\n»..»%c[10,241,129,129]Сообщение. «..»\n»
>,

msg_1 = «%c[10,241,129,129]»..»Заголовок:»..»\\n»..»%c[10,241,129,129]Сообщение. «..»\n»,
msg_2 = «%c[10,241,129,129]»..»Заголовок:»..»\\n»..»%c[10,241,129,129]Сообщение. «..»\n»,
msg_3 = «%c[10,241,129,129]»..»Заголовок:»..»\\n»..»%c[10,241,129,129]Сообщение. «..»\n»,
.
msg_10 = «%c[10,241,129,129]»..»Заголовок:»..»\\n»..»%c[10,241,129,129]Сообщение. «..»\n»
>

Ниже таблицы, пишем незатейливую ф-ию, которая будет возвращать нашу таблицу:

ВАЖНО! Имя функции и имя таблицы в файле, обязательно должны быть разными!

Затем в другом файле, где юзаем наши тексты объявляем нашу таблицу:

Соответственно, теперь функция выводящая на экран сообщение (пишу на личном примере), будет выглядеть так:

Источник

Читайте также:  как играть по сети в майнкрафт на телефоне с другом без интернета новой версии
Компьютерный онлайн портал