Перейти к контенту

=VENOM=

Проверенные
  • Число публикаций

    131
  • Регистрация

  • Последнее посещение

  • AMKoin

    20 [Подарить AMKoin]

Весь контент пользователя =VENOM=

  1. Тогда вот такой вариант кода (из той же песни, кстати): function resurrect_npc(npc_name, health) local trup = get_sobj_npc_by_name(npc_name) if trup and trup:alive() == false then local t = amk.read_stalker_params(trup) t.killerid = 65535 for i=1,8 do t.game_death_time[i] = 0 end if health ~= nil then t.health = health t.updhealth = health else t.health = 1 t.updhealth = 1 end t.skeleton_flags = 0 amk.write_stalker_params(t, trup) amk.convert_npc[trup.id] = true alife():set_switch_online(trup.id, false) alife():set_switch_offline(trup.id, false) end end function get_sobj_npc_by_name(name) local obj = alife():object(name) if obj then return obj end return nil end Первым параметром вставляем имя нужного нам ("мёртвого") NPC, вторым (если нужно) - необходимое количество HP у "воскрешаемого".
  2. =VENOM=

    Ищу файлы / моды / аддоны

    Где-то валялся, вот этот подойдёт? Если почему-то не заработает, скину рабочий код, воскрешающий NPC, но безо всяких там чудесных артефактов.
  3. Да, видео, действительно, интересное. Поэтому, спросите Bak'a, конечно :) .
  4. Наверное, что-то типа вот этого, только под СоР :) ?
  5. =VENOM=

    Скриптование

    advisor890 не использует функцию create_npc(888). У него прописана функция create_npc(1503, vector():set(55.121288299561,11.802981376648,13.02761554718), 9331, 1655), где 1503 - новый story_id, далее координаты, левел и гейм вертексы соответственно. Объект создаётся вполне стандартной функцией alife():create("sar_test", p_position, p_lvertex_id, p_gvertex_id), где "sar_test" - это секция создаваемого NPC, далее снова координаты, левел и гейм вертексы соответственно. А вот story_id присваивается уже далее в функциях чтения/записи нет-пакета только что созданного NPC.
  6. =VENOM=

    Скриптование

    Да, этот вариант подходит, только если нам совсем никак не хочется перекомпилировать all.spawn. А если хочется, тогда вообще никаких проблем - пихаем в all.spawn нового подходящего NPC с новым же подходящим story_id, ну, а дальше всё стандартно.
  7. =VENOM=

    Скриптование

    Пришлось проверить самому . Использую стандартную пару амк-функций read_stalker_params/write_stalker_params. Присваиваю новоиспечённому сталкеру новенький story_id, и после перехода на другую локацию или save/load легко отлавливаю его по этому самому story_id. В квестах всё же такого персонажа трудновато будет использовать - ведь до старта задания нам нужно будет успеть заспонить сталкера, приписать ему story_id, а затем ещё и перейти на другую локацию, чтобы этот самый сталкер стал доступен по story_id. Хотя, конечно, можно исхитриться как-нибудь . Например, создать такого сталкера с новым story_id, тут же засунуть его в оффлайн (чтобы не попался нам на глаза раньше положенного срока), затем перейти на другую локацию (по понятным причинам ситуацию save/load game рассматривать не будем) а при выдаче квеста и постановки на сталкера метки сразу же перевести его на автоматический режим онлайн/оффлайн. Это вариант навскидку, что первое в голову пришло.
  8. =VENOM=

    Скриптование

    Кавычки лишние при указании идентификатора объекта. Так будет лучше: local obj = alife():story_object(1503) if obj then - далее по тексту. Есть ещё одна мысль - попробуй получить новоявленный объект по story_id не сразу, а после save/load game или после перехода на другую локацию (что по сути то же самое).
  9. @Kober(BRUC), ваш вопрос из тех, что всплывают здесь с завидной регулярностью. Решение тоже стандартное: найдите файл bind_stalker.script, откройте его. Найдите в нём функцию, указанную ниже, и вставьте в неё свой обработчик на взятие вашего уникального предмета в инвентарь игрока: function actor_binder:on_item_take (obj) level_tasks.proceed(self.object) --game_stats.update_take_item (obj, self.object) -- НАПРИМЕР, ВОТ СЮДА МОЖНО ВСТАВИТЬ СВОЙ ОБРАБОТЧИК НА ВЗЯТИЕ ПРЕДМЕТА В ИНВЕНТАРЬ АКТЁРА end P.S. Наверное, подобный вопрос лучше было бы задать в теме "скриптование". P.P.S. А если предмет квестовый, то ещё правильнее будет сделать отдельную функцию-обработчик подзадачи квеста на взятие предмета в инвентарь - и не надо будет лезть в биндер актёра.
  10. =VENOM=

    Скриптование

    Да уж... привёл я перебор всего и вся в игре (с показательным исключением из обработки пары NPC по имени) просто в качестве примера, а его (пример) зачем-то запихнули в свой скрипт...
  11. =VENOM=

    Скриптование

    @Romann, смайлик, конечно, забавный, но я его, пожалуй, вам обратно переадресую. И вот почему. Вы не думали, что имя объявляемой таблицы и имя таблицы в коде - при обращении к ней - должны совпадать? Проверьте: У меня в коде У вас Только что откатал вашу таблицу (с исправленным именем) на чистом ТЧ1.0004 - всё работает совершенно спокойно, без вылетов.
  12. =VENOM=

    Скриптование

    @Romann, что касается вылета, судя по логу, таблица quest_npc пуста. Я оставил её в примере пустой: local quest_npc = {} В неё нужно занести квестовых персонажей, по именам, примерно так: local quest_npc = { "esc_wolf", "esc_fox"} В этом случае будут обработаны все сталкеры, за исключением Волка и Лиса.
  13. =VENOM=

    Скриптование

    Да, верно, правильно будет использовать section_name(), конечно.
  14. =VENOM=

    Скриптование

    Не разбираясь особо, навскидку: local name = wpn:name() if name == "название_оружия1" or "название_оружия2" then return end
  15. =VENOM=

    Скриптование

    @Romann, могу только предположить, что в таблице квестовых NPC будут указаны их имена. Тогда, если нам требуется обработка всех сталкеров (серверных объектов, на всех локациях): local quest_npc = {} for a=1,65535 do local obj = alife():object(a) if obj then if IsStalker(obj) then if not quest_npc[obj:name()] then -- обработчик сталкера - серверного объекта end end end end Если же требуется обработка именно сталкеров-NPC (они доступны только на текущей локации), тогда: local quest_npc = {} for a=1,65535 do local obj=level.object_by_id(a) if obj then if IsStalker(obj) then if not quest_npc[obj:name()] then -- обработчик сталкера - NPC end end end end
  16. =VENOM=

    Скриптование

    Я вроде бы ясно указал, что в логике бандитов-NPC на АТП в оригинальной ТЧ нет секции on_death. Логика - это всё, что есть у NPC в кастом + всё, что прописано в гулаге смарттеррейна, если, конечно, NPC под гулагом - по-моему, это очевидно. Я и не думал, что нужно именно сохранить идентификатор убийцы, а всего лишь получить его - прямо сейчас, онлайн. Разумеется, для первого случая придётся воспользоваться pstor. Что же касается Соглашусь.
  17. =VENOM=

    Скриптование

    Спорить не стану - я не знаю, почему у вас не срабатывает. Я "испытывал" функцию на бандитах на АТП в оригинальной ТЧ. У них ни в логике, ни в all.spawn секции on_death нет. Функция нормально возвращает ID убийцы.
  18. =VENOM=

    Скриптование

    Даже и не подумал, что об этом тоже нужно было упомянуть. И ещё так хотелось подчеркнуть, что аргументом является жертва-NPC, что имя аргумента изменил, а в теле функции позабыл ... А хотя нет... Ради очистки совести проверил на чистом 1.0004, всё отлично работает и безо всякого on_death в логике, ошибку только исправил в названии аргумента в теле функции: function return_killer_id(victim_npc) if victim_npc and not victim_npc:alive() then local t = db.storage[victim_npc:id()].death if t and t.killer ~= -1 then return t.killer end end end
  19. =VENOM=

    Скриптование

    Очень просто, ведь ID убийцы сохраняется в базе данных жертвы: function return_killer_id(victim_npc) if npc and not npc:alive() then local t = db.storage[npc:id()].death if t and t.killer ~= -1 then return t.killer end end end
  20. =VENOM=

    Fallout 4

    Вообще, раньше никогда особо не увлекался игрушками жанра RPG - пока не решил поиграть в Ведьмака (1). Серию Fallout тоже не проходил, играл сразу в FNV - отличная игра, по-моему. Перепроходил заново несколько раз, с разными DLC. TES тоже начал сразу со Skyrim - эта игрушка понравилась даже больше, чем FNV. И DLC так же очень порадовали. И вот вышел F4... нет, это не УГ, конечно. Но до того же FNV ему как до Луны. И дополнения его уж точно не спасут - ИМХО.
  21. @serega125633, написано: Здесь tutorial_end - это инфопоршн, при котором диалог становится доступным. Если этого инфопоршна нет, диалог недоступен - то есть при "разговоре" с NPC этого диалога не будет. Есть тут правда, ещё и функция, но инфопоршна более чем достаточно для того, чтобы диалог появлялся "только один раз". Уточнение - лучше для этой цели использовать такое условие: То есть, диалог доступен, пока не получен инфопоршн tutorial_end. Как только он будет получен (например, как раз в этом диалоге), то диалог станет недоступным.
  22. @HellRatz, скорее всего, условного спона у объектов не предусмотрено. А почему скриптом не предлагать? Совершенно спокойно спонятся предметы там, где АИ-сетки нет и в помине. Есть ещё один способ, но это уже совсем через... ну, вы поняли. Смысл таков: ставим предмет там, где это необходимо (в СДК или редактируя all.spawn), затем при старте игры игры удаляем его скриптом, а когда нужно - восстанавливаем обратно, тоже скриптом. В этом случае предмет будет иметь те же координаты, наклон, поворот, и т.д.
  23. Если вопрос не касается технической стороны проблемы, то не нужно.
  24. Отвечу по-одесски, вопросом на вопрос: а что, собственно, мешает в нужный момент (к примеру, в момент выдачи квеста), снова поставить метку на труп доцента Лазарева? Вот так: local obj = alife():object("stalker_name") if obj then obj:visible_for_map(true) end
  25. Не думаю, что в этом есть что-то требующее объяснений - например, у зомбированных сталкеров ведь тоже нет отметок на карте.

AMK-Team.ru

×
×
  • Создать...