Сталкер как удалить нпс через скрипт
Большая часть представленных здесь скриптов была собрана на просторах иинтернета. Большое спасибо их авторам!
Внимание: Не все скрипты были проверенны на работоспособность и поэтому в случае выявления нерабочих функций напишите администратору.
А также: если вы не знаете как в диалог прописать функции, пользоваться проверками, а также инфопоршнями, поищите здесь!
Если Вы не знаете как узнать координаты, эта статья Вам поможет!
И напоследок. Если вы новичёк, настоятельно рекомендуется ознакомиться с основами скриптования в сталкере!
Функции для вызова через диалоги
Передача предмета от ГГ к собеседнику
| 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_stalker11. Привязка сталкера к конкретной позиции ( к 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, 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), snd_type.talk, 2, 1, sounds_base + 2), snd_type.talk, 2, 1, sounds_base + 3), snd_type.talk, 2, 1, sounds_base + 4), snd_type.talk, 2, 1, sounds_base + 5), snd_type.talk, 2, 1, sounds_base + 6) Здесь объявлена тема commander _ radio с одной подтемой. Для добавления еще одной подтемы нужно добавить еще одну таблицу к теме и прописать по аналогии с существующей (соответственно с нужными параметрами). Необходимо, чтобы поле sound _ base четко соответствовало своему значению, иначе может произойти вылет движка. 11. Прекращение проигрывания звука Сталкер как удалить нпс через скриптЛюбая функция начинается со слов Обращаю внимание, что все функции вызываются из других скриптов. Допустим нам из одного скрипта, нужно вызвать(запустить функцию в другом) для этого мы пишем Глобальные можно объявлять вначале скрипта и она будет сохранятся в коде, в памяти процесса (если я правильно понял) local helth = db.actor.helth function my_function() Перевод: Если подходит условие то function my_function() Допустим нам нужно проверить несколько условий: Если подходит хоть один элемент. Данный метод заменяет перебор через таблицу. Отличается простотой и потерей производительности. Тон ничего хорошего не вышло бы. Так как проверялись бы все функции. А в первом варианте до первого попавшегося. Но правильнее и эстетичнее, сразу писать так. if (db.actor) then Проверкой советую проверять многие элементы, так как в игре они зачастую не существуют в определенные моменты. if имя скрипта then И делайте всегда, потому как, просто удалите этот скрипт из каталога и не надо будет мучаться с переписыванием других скриптов. if math.random(0,1) then if math.random(0,1) then Текстовый. for i =1, 5000 do Это цикл, который прокрутнет ваше действие 5000 раз. Переменная i любая буква, число 5000 обозначает количество циклов(сколько раз пройдет ваше действие). Допустим мы сделали такую функцию — удаляем объект из игры(Взято из АМК ) function remove( remove_item ) Допустим, идет проверка и если она оканчивается удачно, то функция должна вернуть одну переменную, если нет, то другую. function my() function proverka () Функции вызваются из других скриптов, нужно лишь найти место. Если она вызывается постоянно. То нужно пихать в колбэк на апдет в bind_stalker.script function actor_binder:update(delta) if string.find(command_line(), «-designer») then if self.already_jumped==false and jump_level.need_jump==true and (device().frame > self.spawn_frame+2000) then — Вызов апдейта переноса игрока проводником — DEBUG slowdown — Обновление отключения ввода с клавиатуры. = nil and — обновление пси-антенны if self.bCheckStart then —if self.actor_weapon_on_start == true then = true) then if not self.loaded then if not(primary_objects_filled) then В том же скрипте есть колбэки на взятие, потерю, использование предметов. Нужно лишь искать. В диалогах можно вызывать через тег (без () ) Сталкер как удалить нпс через скрипт
Структуру папок и местонахождение основных файлов игры Сталкер смотрим здесь Структура файлов и папок Короче, нашел у себя в загашнике решение (вроде как от самого Архары) и испытал, создав ситуацию с неотключившимся выбросом (не уходил с локации пока таймер не обнулился), вот описание (подправил немного): Добавить в самый низ файла: \gamedata\scripts\arhara_dialog.script Либо, в файл: gamedata\scripts\bind_stalker.script под строку: function actor_binder:update(delta) добавить вызов: arhara_dialog.dell_duratskiy_timer() Полный список Переключателей Командной Строки для STALKER’а приведённый ниже сопровождается также кратким пояснение для каждого, где это было возможно. Я протестировал каждый и все переключатели, но некоторые переключатели не имеют видимого эффекта или просто подвешивают игру во время загрузки. Инструкции по предполагаемому использованию наиболее полезных переключателей приведены на протяжении этого гида: Сталкер как удалить нпс через скриптЭто, что бы проверять наличие НЕСКОЛЬКИХ и РАЗНЫХ предметов в рюкзаке ГГ = false and = false and = false Вынос какой либо информации в другой файл (в нашем случае, имеем например кучу текстов, которые занимают кучу места в файле, тормозят и мешают ориентироваться в нем): 200?’200px’:»+(this.scrollHeight+5)+’px’);»> local all_text = < msg_1 = «%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_1 = «%c[10,241,129,129]»..»Заголовок:»..»\\n»..»%c[10,241,129,129]Сообщение. «..»\n», Ниже таблицы, пишем незатейливую ф-ию, которая будет возвращать нашу таблицу: ВАЖНО! Имя функции и имя таблицы в файле, обязательно должны быть разными! Затем в другом файле, где юзаем наши тексты объявляем нашу таблицу: Соответственно, теперь функция выводящая на экран сообщение (пишу на личном примере), будет выглядеть так: |









