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

=VENOM=

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

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

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

  • AMKoin

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

Сообщения опубликованы =VENOM=

  1.  

    ...

     

     

    С уважением, но очень уж какие-то сложные у вас инструменты. Я предложу сделать так (по-минимуму, т.к. минимум - это ассемблер, а ассемблер - это всё моё):

    Для спона заданного количества объектов на случайных координатах относительно центра заданной точки на текущей локации:

    function spawn_random_object_on_random_position_on_current_level(lv_id, gv_id, radius, countball, tabmonster)
     local new_lv_id
     local pos
     local new_random_npc
     local new_mob
     for a=1, countball do
      local offset = vector():set(math.random()*6-3, 0, math.random()*6-3)
      offset:normalize()
      new_lv_id = level.vertex_in_direction(lv_id, offset, math.random(0, radius))
      pos = level.vertex_position(new_lv_id)
      new_random_npc = tabmonster[math.random(table.getn(tabmonster))]
      new_mob = alife():create(new_random_npc, pos, new_lv_id, gv_id)
     end
    end

    На входе функции:

    [level_vertex_id центральной точки спона объектов], [game_vertex_id центральной точки спона объектов], [радиус, в котором будут спониться объекты относительно центральной точки], [количество создаваемых объектов], [таблица (ИМЕННО ТАБЛИЦА!) объектов, которые нужно создать]

    Переменная new_mob, ясное дело, позволяет сразу же наполнить логикой только что созданный объект (если речь идёт об NPC, например).

    Подсказывайте ошибки - я уже успел неслабо приложился к поллитровке, и она у меня сегодня не последняя. Точно не последняя. Успевайте.

    Забыл один local удалить :)...

  2. Да вроде всё в норме...

     

     

    то в файле где инфопоршни лежат? или что иное?

    Да, сам новый инфопоршн "vzial" ты прописал в файле с какими-нибудь другими инфопоршнами, например, в info_portions.xml?

    Ах, да, ещё - какого NPC ты создаёшь - вместо "generic_stalker"? И нужна ли ему логика, или это простой одноразовый враг-"болванчик"?

  3. Если предмет "tol" - уникальный, то необходимости в проверке инфопрошна нет, как и в самом инфопоршне тоже.

    Пропущенный аргумент?

    Кстати, функция спонит NPC по lv и gv актёра - если недалеко, это некритично (и если нет резких перепадов геометрии уровня, и если ГГ не стоит спиной впритирку к стене). К тому же, если понадобится бОльшее расстояние, придётся дополнительно вычислять lv точки спона.

     

     

    но в том файле вот эта функция , вроде та что я заменил.

    Это функция относится к заданию на документы военных на Агропроме. Ты её не менял? Проверь ещё раз, всё ли правильно скопировал из примеров.

  4.  

    мне необходимо выполнить такую конструкцию

     

    1. Открой файл bind_stalker. script, и замени стандартную функцию на эту - почти так же, как было описано выше:

    function actor_binder:on_item_take (obj)
     level_tasks.proceed(self.object)
     --game_stats.update_take_item (obj, self.object)
     if neron_script then
      neron_script.check_item_and_spawn_npc(obj)
     end
    end

    2. Создай в папке scripts\ файл neron_script.script - здесь будут храниться все (ну, или почти все) твои скрипты.

    3. Скопируй в этот файл эту функцию:

    function check_item_and_spawn_npc(item)
     if item:section() == "tol" then
      local actor = db.actor
      local dist = -3
      local pos = actor:position()
      local dir = actor:direction()
      pos = pos:add(dir:mul(dist))
      local npc = alife():create("generic_stalker", pos, actor:level_vertex_id(), actor:game_vertex_id())
      actor:give_info_portion("vzial")
     end
    end

    4. Вместо "generic_stalker" вставь того NPC, которого ты хочешь создать за спиной у ГГ.

    Значение "-3" - это дистанция (в игровых метрах), на которой NPC будет создан за спиной у ГГ - её можно изменять.

    Инфопрошн "vzial" тоже будет получен - правда, я не совсем понимаю, зачем это нужно. Если только для каких-то последующих проверок, событий и т.д...

    В результате, как только ГГ подберёт предмет "tol", за спиной, на расстоянии 3-х метров у него возникнет NPC, и будет получен инфопоршн "vzial".

    Если что-то пойдёт не так, или что-то непонятно, уточняй.

  5.  

    но ведь функции ...  и ... не активируются диалогами, как их запустить?

     

    Любую функцию можно вызвать из диалога.

    Не совсем понятно: проверка наличия предмета в луте ГГ должна выполняться в диалоге (например, при получении предмета от NPC)? Или ГГ может просто подобрать предмет (взять из инвенторибокса -тайника, например)? В первом случае наличие предмета в луте ГГ легко проверить прямо в диалоге - прекондишном ветки диалога, с последующим получением инфопоршна и споном NPC. Во втором - как было описано выше, проверка при взятии предмета в лут ГГ с получением инфопоршна, после чего хоть в диалоге, хоть в активном таске можно спокойно заспонить NPC. Я подозреваю, что можно вообще обойтись без выдачи инфопоршна - если только он не нужен для каких-то дополнительных проверок?

  6. можно еще как нибудь так замутить:

     

    Конечно, можно. Только надо учитывать, что функция-обработчик взятия предмета в инвентарь будет срабатывать в биндере актёра только в момент пополнения инвентаря после получения инфопоршна. В твоём варианте обработка всего инвентаря актёра (хотя и неявно) будет обрабатываться непрерывно, как только будет получен инфопоршн. В общем-то некритично, конечно - кому как...

  7.  

    И ещё опять же по поводу костров: заметил что к примеру на локации Припять нет освещения окружающих объектов и территорий от косторов,  Исправить этот недочёт можно только через SDK?

    Можно и без SDK - я добавлял освещение для костров Припяти, банально редактируя all.spawn. Но получил в результате довольно заметное "подтормаживание" в Припяти в процессе игры. Всё же нагрузка - источники света, да ещё и анимацией. Поэтому плюнул, и вернул всё в исходное состояние.

  8. Проверка инфопоршна в простейшем случае, ("infoportion" - это имя инфопоршна):

     
    if has_alife_info("infoportion") then
            --твой скрипт

    end 

     

    Что касается подобранного ГГ предмета. Если идти тем путём, как написано у тебя, то в файле bind_stalker.script найди функцию:

    function actor_binder:on_item_take (obj)
            level_tasks.proceed(self.object)
            --game_stats.update_take_item (obj, self.object)
    end

     

    Так она выглядит в оригинальной ТЧ, у меня, по крайней мере.

    И замени её на что-то вроде:

    function actor_binder:on_item_take (obj)
            level_tasks.proceed(self.object)
            --game_stats.update_take_item (obj, self.object)
     
            if myscripts then
                    myscripts.take_item(obj)
            end
     
    end

     

    Этим ты добавишь ссылку на свою функцию-обработчик взятия предмета. Можно, конечно, и прямо здесь вписать обработчик, но лучше хранить свои скрипты отдельно - потом проще будет найти, где чьи лапы и хвосты. Для этого нужно будет создать файл myscripts.script в папке с остальными скриптами, а уже в этом файле написать обработчик, примерно так:

    function take_item(item)
            if item:section() == "section_name" then
                    --твой скрипт
            end
    end

     

    Здесь функция будет срабатывать на взятие ГГ предмета с определённым названием (section_name).

    • Спасибо 1
    • Полезно 1
  9.  

     

    Кстати, запускаю старенький UT - на динамическом освещении игра тоже идёт с рывками. Вот такие пироги...
    Отвечу сам себе :) - нашёл, установил и подключил мини-патчик для UT - под Direct10. И всё заработало, как в старые добрые времена! В отличие от Сталкера :(...
  10. К сожалению, ничего не помогло :(... Видимо, проблема действительно в в самой видеокарте (утилиты ни значительного нагрева, ни высокой нагрузки во время игры не показывают). Кстати, запускаю старенький UT - на динамическом освещении игра тоже идёт с рывками. Вот такие пироги...

  11. Здравствуйте!

    В параллельной теме "Срочно нужна помощь" задавал вопрос по такой проблеме:

     

     

     ...И вот что я выяснил - в обычных условиях (настройки панели НВидиа по умолчанию, режим запуска сталкера либо чистый либо совмещение с Win98-95). При повороте камеры актёра в определённом направлении (а также при приближении к кострам) несчастная видеокарта начинает трещать и пищать. При выставлении адаптивного режима вертикальной синхронизации в панели НВидиа видеокарта работает чётко и спокойно. НО! При приближении актёра ко многим источникам освещения в игре (а особенно к кострам!) игра превращается в натуральное слайд-шоу, как на какой-нибудь допотопной видюхе. Независимо от настроек видео в самой игре. То ли мне достался такой экземпляр GTX 970 (MSI), то ли это такая своеобразная расплата за новые девайсы.
     

     Версии сталкера ставил разные, и запускал и под Vista, и под 7-й (и 32 и 64 бит) - картина аналогичная. Раз уж дело касается "семёрки", задам ещё раз вопрос здесь: кто-нибудь сталкивался с аналогичной проблемой? И если да, есть ли решение (без учёта замены компьютера, естественно :))?

     

     

  12. abramcumner, цитирую:

    =VENOM=,

    если хочешь, чтобы респавнеры работали в соответствии со своими названиями, то прописывай им respawn_radius. Но не уверен что это хорошая идея - может получаться как на свалке у ангара - непрерывный поток НПЦ. Сейчас от момента спавна до прибытия на точку проходит достаточно много времени именно из-за того, что НПЦ далеко идти от респавнера. А если бы все было как говорит Artos, то не успел бы обшмонать бандитов на АТП, как туда уже новые входят

    Я, если честно, знаю об этом, и у меня в all.spawn уже давным-давно вообще нет тех респонеров, которые были в оригинальной игре (цель постановки вопроса была совсем в другом - и, в общем, достигнута ;)). Однако, с моей точки зрения, гораздо лучше оставить всё, как есть (т.е. оффлайновый респон всех NPC - и сталкеров, и... мутантов), иначе неудачно расположенные респонеры, подходящие по параметрам для смартов на текущей локации (достаточно далеко от "зачищаемого" смарта по respawn_radius) в некоторой степени лишат игру "симуляционной миграции" NPC между локациями. Что будет выглядеть не очень хорошо - как будто локации изолированы друг от друга. А насчёт "вербовщиков" - это, конечно, разработчику решать. Моё мнение - совсем уж сопливых новичков никто не ждёт в группировках - себе дороже обойдутся. Более логичным выглядело бы вербовать более опытных сталкеров, скажем, в Баре (тут, правда, есть проблема - в оригинальной игре Бар контролируют "долгари", как быть со "Свободой"?). Ну, а создать респонеры, срабатывающие по условию, проще простого. К примеру, у себя я сделал отслеживание продвижения игрока по локациям, и, по ходу игры - в соответствии с этими условиями - начинают включаться респонеры (чтобы они раньше положенного срока не плодили тех NPC, которые на ранних этапах не требуются). Ну, а некоторые, наоборот, отключаются. В значительной степни пришлось сделать это из-за АМК "оффлайн-алайфа", отключать который мне не хочется. Впрочем, можно чуточку "поколдовать", и сделать так, чтобы в зависимости от условий (функция, инфопоршн) один и тот же респонер будет порождать NPC селективно, а не по приоритетному выбору из нескольких секций, как сейчас.

  13. weas, попробуй в секции твоей аномалии прописать:

    postprocess = postprocess_psy_zone

    А ты сам пробовал? В оригинальной игре (ТЧ) такая секция [postprocess_psy_zone] отсутствует.

    --/ Artos

  14. Artos, насчёт модератора - это ты прав, пускай он даст оценку действиям - и моим, и твоим, в том числе.

    А раз ты куратор темы, то ответь мне на вопрос (то есть, помоги разобраться).

    Цитирую:

    Слова о связи этого конкретного респавнера 'esc2_respawn_bandits_fabrika' упомянута именно из-за его закомментированной логики связанной с конкретным гулагом. И его близким расположением - ведь работа выбирается от ближайшей

    ...Прекрасно понятно (другим, а не тебе) что разработчиками этот респавнер предназначался именно для этого гулага. Хотя по сути, он также может служить и для других гулагов.

    Говоря о том, что "разработчиками этот респавнер предназначался именно для этого гулага", ты связывался с разработчиками по этому вопросу, или это твои домыслы?

    Поясняю: это критически важно для моей модификации игры, серьёзно. Не спрашивай "зачем" - просто ответь.

  15. Artos, слово - не воробей, поэтому вот тебе тоже

    Если учишь кого-то жизни вместо того, чтобы попытаться помочь, то неплохо было бы научиться - для начала - понимать то, о чём пишешь сам (не совершая при этом детских грамматических ошибок).

    Итак, пройдёмся сначала:

    твоя реплика первого поста (главное выделено мной, =VENOM=) :

    Именно для этого гулага в all.spawn'е организован респавнер 'esc2_respawn_bandits_fabrika', в котором и прописаны секции, которые будут спавниться (esc_bandit_respawn_1, esc_bandit_respawn_2)...

    ...и второго:

    2. Где-то мною упомянута что респавнеры плодят объекты привязанные к гулагам? Само собою, отреспавненные объекты подчиняются тем конфигам, которые определены их секцией. Это кому-то нужно доказывать?

    Не находишь странным, что сначала пишешь одно, а затем сам же от этого открещиваешься? Да ещё при этом неуклюже оправдываясь? Поэтому, специально для тебя (т.к. остальные в курсе) вот сделал несколько скринов (раз на словах с первого раза не доходит :D), доказывающие тот простой факт, что респонеры порождают NPC, не привязываясь ни к каким гулагам (локация Кордон, смарты esc_lager и esc_fabrika_bandit, второй после "зачистки", заполняемые сталкерами, порождёнными совершенно разными респонерами, и никаких "от ближайшей", как ты изволил выразиться):

    8ec80c534d50aa7e25840e17d27bc820.jpg f6eb401b105a92f61d5ddcd8080cfd79.jpg e7321194863762ddcd23201ecef87b3b.jpg

     

    А вот смарт esc_fabrika_bandit с изменёнными параметрами smart_terrain_presets.ltx - видно, что даже бандит "Фраер" прибежал через пол-Зоны, чтобы поселиться на Кордоне (остальные с рангом "мастер" порождены респонерами):

    4b20cdeb2126d3abfb4476c260a9d178.jpg 051d90b8738bc67828c3c1030e16dd08.jpg daa55b72475385886363a3ad10cc94dd.jpg

     

    Ну, и ещё кое-что, достойное внимания :D:

    Простая правка строки респавнера, добавляющая иль заменяющая секции - и после перекомпиляции алл.спавна - АТП заматереит (после смерти существующих).

    Что там "заматереит", гулаг или респонер? Гулаг от правки строки респонера ни на грамм не "заматереит", ни после смерти существующих, никогда вообще. А вот респонер станет плодить неписей с изменёнными парамертами.

     

    Так что держи, Дружок, свой запал при себе, и запомни, что тема эта - не театр одного актёра, разглагольствующего о том, кому что стоит делать, а кому чего не не стоит, а для взаимопомощи моддеров.

    [x]

  16. Artos, это я тебе возражу (и докажу) - т.к. в своё время всё то, о чём я говорил, неоднократно проверял, и всё это у меня и сейчас вполне так ничего себе работает :). Начнём сначала:

    Файл 'smart_terrain_presets.ltx' является конфигом, который предназначен только для универсальных гулагов типа 'general_lager'

    Для универсальных гулагов предназначен файл-пресет general_lager.ltx - а для "именных", как ты выразился :), предназначен тот, который я указал.

    Далее:

    респонеры NPC никаким местом не привязаны к каким-либо "гулагам". Поясняю ещё раз: любой респонер может плодить неписей для любых смарттеррейнов (или, если угодно, для "гулагов" :)), если он подходит по праметрам (повторюсь: в общем случае - группировка, ранг). Чтобы убедиться в этом, достаточно через некоторое время после начала игры (после срабатывания респонеров, это дело в разных модах реализовано совершенно по-разному) просмотреть глобальную карту (следует включить отображение всех NPC (или только сталкеров) на глобальной карте - как это сделать, пояснять, надеюсь, не потребуется?). В ярлычках неписей видно, что смарты наполнены совершенно разными респоновыми сталкерами, я имею в виду сталкерами, рождёнными совершенно разными респонерами. И не надо валить всё на алайф, "перегоняющий" сталкеров из одних смартов в другие, повторюсь: отслеживая путь любого NPC от респонера до смарта, становится очевидно, что никакие респонеры не привязаны ни к каким смартам. Единственные респонеры, срабатывающие в момент взятия NPC под гулаг (при условии, что условие для них прописано в смарте) - это респонеры, наполняющие ящики с барахлом в смартах. То есть, поменяв в конкретной секции "опытных" на "мастеров", ничего глобального ты не совершишь, т.к. в оллспоне есть куча других респонеров, которые наплодят и "опытных", и "новичков" в предостаточном количестве.

    Далее:

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

    Далее: ты, видимо, не знаком с тем фактом, что для любой работы в скриптовых файлах гулагов (тот же gulag_escape.script) можно создать условия "приёма на работу" (я частично уже отписывал, по каким параметрам это можно сделать - там ещё много чего можно "наусловить" :)). Эти условия называются predicate, и их, повторяю, можно применить к любой работе гулага. Если нужен конкретный пример - не поленись, загляни в этот файл (gulag_escape.script), и посмотри, как это реализовано для работы Волка или Фаната в смарте "лагерь новичков" (esc_lager). Таким образом, на работу "пахана" в смарте бандитов на АТП можно поставить условие, человеческим языком описываемое как "на работу принимается (назначается) только NPC с группировкой "бандит", с именем профиля "sim_bandit_master", и с рангом, равным 900 и более". Интересный факт: таким образом, кстати, можно обойти ограничение, выставленное для смартов Кордона в ltx-файле (конкретно smart_terrain_presets.ltx). Можно ещё кучу условий добавить :).

    Заключение: в указанный смарт (esc_fabrika_bandit) в оригинальной игре принимаются NPC с группировкой "бандит", с рангами "новичок" (ранг менее 300), и "опытный" (ранг более 300 и менее 600). Никакие "мастера", заспоненные каким-то "назначенным именно для этого гулага" респонером под гулаг в смарте браться не будут. Чтобы изменить статус-кво, см. мой предыдущий пост - там всё для этого есть.

  17. лнкс, надо было выложить свою изменённую секцию, чтобы оценить, что к чему. В общем случае, если тебе нужно, чтобы на Кордоне спонились мастера-бандосы, сделай так:

    [esc_bandit_respawn_2]:stalker
    $spawn =  "respawn\esc_bandit_respawn_2"
    character_profile = sim_bandit_master
    spec_rank = master
    community = bandit

    И респонер при срабатывании выдаст тебе бандюгу-мастера. Но учти, что бандюги-мастера на Кордоне "жить" не смогут (в оргинале смарт "esc_fabrika_bandit"), т.к. в настройках сталкеры такого ранга не берутся в смарты Кордона (файл smart_terrain_presets.ltx). Поэтому, такой NPC заспонится только в случае, если где-то в каком-то "бандитском" смарте на бескрайних просторах Зоны имеется свободное место, подходящее по параметрам (группировка - бандит, ранг - мастер), и тогда, после своего "рождения", свеженький NPC тут же отправится в путешествие на ту локацию, где расположен пресловутый смарт.

    А если тебе нужно, чтобы мастера-бандюги "жили" на Кордоне, в файле smart_terrain_presets.ltx измени (добавь) в секцию [l01_escape] бандитов-мастеров:

    [l01_escape]
    ...
    bandit = novice, experienced, master
    ...

     

    Другое дело, как это скажется на общей картине (мастера на Кордоне крутовато-с :)), но тебе виднее, конечно... С другой стороны, можно, наверное, "поселить" одного бандюгу-мастера на Кордоне (ну, типа, это, "пахана" ;)). Как это сделать? Сделать это можно, добавив условие на какую-нибудь одну работу в гулаге смарта бандюков на АТП (файл gulag_escape.script), допускающее, что на эту самую работу может быть назначен либо сталкер (бандит) с рангом "мастер", либо, например, только NPC с именем "sim_bandit_master".

AMK-Team.ru

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