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

[SoC] Ковыряемся в файлах


Halford

Рекомендуемые сообщения

macron, panzyuza, подобные "зависоны" и в чистом ТЧ встречается, а уж в модах, где и аномалии добавляются и неписи респавнятся - нередкость.

Т.к. это имеет корни в движке исправить недопустимость подобного без правки движка невозможно.

Исправить последствия? Вероятно можно, мониторя все подобные трупы (уже физ.объекты) и возвращая им массу.

Ну а поупражняться подобным "футболом" можно при помощи гравипушки (см. соотв. мод).

 

Добавлено через 4 мин.:

Roman82, техника в игре (БТРы и вертушки) и сами не имеют группировки и не обучены в исходных скриптах различать группировки неписей.

Хочется изменить - см. мод АМК (или аналоги), где БТРов "подружили" с вояками. Ну и конечно все дело в логике (читай туторы) - какую цель задано - в ту и стреляет техника.

 

Добавлено через 1 мин.:

FANAT

Загрузочным окном рулит файл XR_3DA.exe, там и ищи координаты. :crazy:

 

Добавлено через 5 мин.:

proper70

Конечно можно проверить атакует ли монстр актора иль иную непись. Расписывать различные варианты тут бессмыслено и гораздо поще и нагляднее посмотреть это в модах. И в том же АМК собаки атакуют ГГ, выбивая оружие, и контролер зомбирует неписей. Во многих модах есть атака кровососа ... Бери и смотри.

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Поделиться этим сообщением


Ссылка на сообщение

proper70, извини, но прежде чем атаковать, именно идет ряд проверок на различные условия, которые и можно использовать для определения "увидел в первый раз" иль иного ...

Код: oEnemy = oNPC:get_enemy() --/or oNPC:best_enemy() - враг/цель/жертва как раз может использоваться для определения момента появления oEnemy! Без его наличия - атаки монстра нет. А различные иные раздражители (денджеры) только могут предшесвовать атаке.

Ну и логика переключается на именно атаку также только при наличии объекта-врага, иначе - различные логики "тревожные иль паники". Вот и пляши от этого ...

И, кстати, наличие врага еще не означает атаку и придется попотеть ... типа мониторить дистанцию/дирекцию/...

 

Добавлено через 9 мин.:

Roman82, ты бы сначала сформулиовал бы для себя что же ты хочешь.

Если хочешь, чтобы БТР защищал от актора, то глупо в вояки его записывать. Если же записал в вояки - то и БТР не должен "актора не пущать на блокпост" ... Вот тут и правь логику БТРу, так, чтобы он именно в друзей не стрелял, в том числе и актора-вояку.

Ну а твои слова: "с военными я его уже померил (бтр), их он не трогает" - предполагаю пустословие. Без правки скриптов схемы ph_car.script и др. ты никого не "помирил". Просто цель у твоего БТРа одна - актор, вот и не трогает вояк. Сделаешь, чтобы стрелял по разным - и вояк не помилует. ;)

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Поделиться этим сообщением


Ссылка на сообщение

gruber

Твоя "проверенная" замена для target просто напросто отключает задание цели и БТР реагирует только на обидчика. Правильнее тогда просто не задавать этот параметр.

Ну а функций проверок группировок конечно же немало, однако схема БТРа (ph_car) все одно их не понимает в режимах атаки/огня. Перереключаться то секции по условию "группировка актора" можно, но тогда можно только актора исключать из заданной цели, а вот оборонять позицию (а не только себя) без правки схемы не получится. Требуется задавать скрипом выбор подходящей цели и огонь по ней.

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Поделиться этим сообщением


Ссылка на сообщение

gruber, однако ты пропустил его же слова:

Roman82 Ежели убрать target=actor то тогда весь его (бтра) смысл пропадает.
Т.о. как только он сделает первый этап по смене секций, возникнет вопрос: "А почему у меня БТР вообще ни в кого не стреляет?"

Ведь, не забываем, всем остальным неписям, независимо от группировок эти БТРы и вертушки - пофигу (они их не замечают) и никто сам стрелять в БТР не будет. Так, что ... если только кто случайно железяку заденет - тогда получит очередь ... независимо от группировки. :crazy:

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Поделиться этим сообщением


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

Ты все же почитай статьи на вика-сайтах по логике и перечитай ранее сказанное.

Повторяю (относительно конфигов и скриптов исходной игры):

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

2. Как бы ты не упражнялся с переключениями техники, но в качестве цели в самих секциях можно указывать или "ничего" или "точку обстрела" или конкретного НПС (актора или по stiry_id).

Условностями тут никак без переделки самой схемы ph_car не обойтись.

Как уже упоминал, взгляни в тот же АМК-мод, и посмотри как те же БТРы подружены с вояками. Там же есть коды, предохраняющие стрельбы ими по "своим".

Ну а чтобы БТРы начали стрелять не только по конкретной цели, а сами выбирали бы для себя врага - также потребуется доработка схемы или доп.скрипты. Примеры можно посмотреть, например, в SIMBIONe, где и вертушки не только по актору стреляют и БТРы могут и по вертушкам стрелять ...

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Поделиться этим сообщением


Ссылка на сообщение

Хек, без строк кода твоего скрипта bind_stalker можно только гадать.

Наиболее вероятна банальная оЧепятка в аргументе: packer => packet

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Поделиться этим сообщением


Ссылка на сообщение

panzyuza, задавай, плз, вопросы более понятно ...

Если тобою НЕ упомянуты обычные (именованые) сохранения - следует ли понимать что именно только с авто- квик- сохранениями у тебя недопонятки по об'ему?

В чем собственно сомнения и тревога? Чем таким "страшным" тебе кажутся упомянутые цифры?

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

Есть сомнения по размерам и наличию мусора в сэйвах - смотри сколько об'ектов в игре используется (хотя бы по кол-ву игровых ID), их 'ассортимент' и делай выводы (самостоятельно!). Никто за тебя в твоем моде/игре не скажет будут ли у тебя осложнения иль это тобою и задумано так ...

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Поделиться этим сообщением


Ссылка на сообщение

Saruman, Priboj37, Priboj37, и Ko ...

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

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Поделиться этим сообщением


Ссылка на сообщение

Daemonion, а почему ты решил что звук должен перестать проигрываться?

Схема sr_sound_act (sr_sound2d.script) не предусматривает окончания проигрывания моно-файла и на апдейте, как только закончится предыдущее проигрывание, тут же возобновляет его.

Прерывание возможно только при переходе на другую секцию логики.

 

_Val_, ошибочность твоего совета спавнить рестриктор скриптом в том, что при указанном тобою спавне, рестриктор НЕ имеет шейпов, а значит не имеет радиуса (иль площади), чтобы могла отрабатываться on_actor_in_zone. Только когда точка рестриктора окажется внутри актора - сработает.

Так что, при спавне рестрикторов (и зависимых от этого класса других классов: аномалии/переходы/...) необходимо дополнительно нет-пакетами задавать шейпы ...

 

Примечание: Если модмейкер хочет и может заспавнить рестриктор и проверить его - что мешает, при необходимости, и актора телепортировать к этому рестриктору при начале новой игры иль в любой иной момент?! :grin2:

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Поделиться этим сообщением


Ссылка на сообщение

Мда-а-а, понасоветовал тут alkogolik ... :crazy:

 

Buusty, неужели в таком простом вопросе загвоздка? Ведь все просто:

"Где" - сразу же при спавне функцией ты имеешь об'ект (se_obj) - а значит и его игровой идентификатор (ID). Т.о. метку ставить можно сразу после спавна или даже в конце твоей функции.

"Что - за установку иль снятие меток отвечают методы level.map_add_object_spot_ser и level.map_remove_object_spot (это и в оригинальных кодах можно посмотреть и в топике "Справочник по функциям и методам).

Помимо идентификатора (ID), аргументами при установке/снятии метки используются тип метки (location) и опсание (hint), которые выбирай по своему вкусу.

Т.о. строки должны быть типа:

level.map_add_object_spot_ser(se_obj.id, location, hint)
level.map_remove_object_spot(se_obj.id, location)

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Поделиться этим сообщением


Ссылка на сообщение

alkogolik, не говори ерунды.

И как это простейшаяя строка для установки метки соотносится с "навороченностью скриптера" и тем более как может ввести в заблуждение?

Куда ж еще проще и понятнее об'яснять/разжевывать?

 

То, что тобою насоветовано может и работает на 99.9%, но и 0.01% кому-то непотребна :grin2: и твой вариант схож с "чесать пяткою ухо" ... и как раз для "перевороченных" скриптеров (ИМХО).

Причем, тобою же насоветовано использовать именно те же строки, только в обрамлении amk-скрипта, да еще и с извратами (иначе не назовешь) по итерации по всему диапазону игровых идентификаторов, с созданием "своих" секций для об'ектов-меток. Ну прямо - "простенько и со вкусом" ... :crazy:

 

В вопросе ничего не говорилось про убирание меток в зависимости от каких-то сюжетных условий, а если такое потребно, то и варианты опять же есть гораздо проще и понятнее (см. установку/снятие меток при выдаче квестов).

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Поделиться этим сообщением


Ссылка на сообщение
_Val_, однако в твоем ответе отсутствовали какие-либо коды/пояснения по rewrite_restrictor, что для Daemonion и других делало достаточно неясным/бессмысленным твой совет.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Поделиться этим сообщением


Ссылка на сообщение

alkogolik, что-то треп идет, а не конструктивный разговор ...

_Val_ дал совет на вопрос Daemonion, т.е. когда вообще ничего неизвестно было про rewrite_restrictor. Поэтому не путай один вопрос с другим, появившимся познее.

И как же я не пояснил как поставить метку на рестриктор? Что еще требуется, чтобы тебе и "человеку" стало ясно. Тупо привести код? Ну так вот с твоими значенияями для типа и описания:

function spawn_himik_sr()
  local se_obj = alife():create("space_restrictor",vector():set(169.09851074219,-2.1591918468475,33.848369598389),324504,2885)
  local custom = "[logic]\n"..
  "active = sr_idle\n"..
  "[sr_idle]\n"..
  "on_actor_inside = {+sidor_stvol_start} nil %=buusty_dialog.himik_prygorshnya_spawn =spawn_restrictor.babuin_bratva_spawn_sr%"
  rewrite_restrictor(se_obj, custom, 4.0)
  --/ ставим метку на рестриктор
  level.map_add_object_spot_ser(se_obj.id, "crlc_big", "Примерное расположение того сего..")
end

 

 

Добавлено через 10 мин.:

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

Довольно странный подход, засорять топик тем, о чем не спрашивалось, да еще и вариантом, который не выдерживает никакой критики.

Как уже ранее сказал, установка меток и их снятие достаточно проработаны и можно самому посмотреть в оригинальной игре при выдаче/отмене квестов. Никаких доп. секций, обектов и итераций по глобальным таблицам ...

Можно и попроще, запомнив ID помеченного рестриктора, и при необходимости, найти его по запомненному идентификатору и или снять метку или вообще удалить рестриктор (за ненадобностью).

Задачка то простенькая даже для начинающих модмейкеров ...

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Поделиться этим сообщением


Ссылка на сообщение

alkogolik, а что подразумевается под "после использования рестриктора"? И что под "удалиться"?

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

 

Ну и для вашего развития, дам пищу для размышлений:

Чтобы рестриктор снял сам с себя метку при вхождении в него актора, то достаточно указать в его логике вызов функции (или даже одной строки в уже вами заданных функциях), которая и снимет ранее установленную метку. Функция также самая простая, и то, что ее вызовет сам рестриктор - снимает необходимость даже запоминать его ID.

Т.е. в ту же spawn_restrictor.babuin_bratva_spawn_sr добавить:

function babuin_bratva_spawn_sr(actor, obj)
  level.map_remove_object_spot(obj:id(), "crlc_big") --/ снимаем метку с рестриктора
  --/ ... ваш код
end

В дальнейшем, формулируйте вопрос так, чтобы было ясно что же требуется получить в конечном итоге. Хотя ... судя по "я не понял из Вашего ответа куда же все-таки мне вписать процитированные строки кода в функцию рестриктора" - тут только "сделайте за меня и дайте готовое" поможет.

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Поделиться этим сообщением


Ссылка на сообщение

Buusty, ошибочность (и порочность) твоего подхода к решению подобных задач в том, что и себе шор понавешивал по неопытности и другим ...

1. Рандомность установки метки, т.е. чтобы не указывала на точное "положение центра" тоже давно уже имеет гораздо более изящное решение. Посмотри, например в NLC6, где из четырех пометок со смещенным центром, выбирается рандомно один - вот тебе и "лишь примерное расположение".

Я уж не поминаю тут того, что при спавне рестриктора его шейпам можно задавать смешения(!), что собственно и может давать такой же эффект рандомного смещения от центра иль от прямоугольника.

2. А вот ежели заспавнишь "вот так предмет, метрах в 80-100 от нужного по квесту", т.е. вдали от рестриктора, то как же будешь выходить из тобою же заданного условия on_actor_inside? Будешь задавать радиус рестриктору в 100++ метров, дабы твою метку в стороне гасил? ;-)

3. Порочность варианта аля-alkogolik в том, что:

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

Да неужели только по имени умеем искать нужный предмет, чтобы его удалить? Лишнего мусора в конфигах и без этого предостаточно.

б) такую метку можно использовать только одну за раз, иначе удалять неизвестно что будешь. Т.о. для каждой пометки своя метка/секция ... А ежели квестов не один, а десять-двадцать? ;-)

в) Использовать итерацию по всем 65535 идентификаторам при установке/снятии меток - мягко-говоря моветон. Всего то требуется запомнить сам идентификатор и именно по нему ставить снимать пометку. Ну иль даже со story_id спавнить и удалять по нему же.

 

Пишу это не столь для Buusty иль alkogolik, а чтобы читающие старались не повторять того, что хотя разово и дает вроде результат, но порочно по сути ...

Вывод который напрашивается: Чтобы почесать нос достаточно рук и ... не стОит использовать пятки. :crazy:

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Поделиться этим сообщением


Ссылка на сообщение

Daniar299, судя по твоим постам в топике скриптования, ты надеешься, что заспавненый тобою НПС сам все знает и порешает куда ему идти и где быть ...

Если взялся за логику, то в первую очередь пойми, что никто, кроме тебя не вложит в "мозги" неписям что и как им делать (кроме дефолтных действий).

Ты в своей логике указал непися в какой ему точке следует быть? Схема remark задает неписям только поведение для "поболтать", а не где быть. Почитай про схемы walker или camper и делай на их базе.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Поделиться этим сообщением


Ссылка на сообщение
smeh, смотри скрипты в которых упоминается "alcohol.ppe". В разных модах файлы могут называться по разному, в АМК-моде легко и сам бы мог догадаться - amk_alcohol.script.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Поделиться этим сообщением


Ссылка на сообщение

smeh, за сам эффект отвечает именно файл *.ppe, а метод level.add_pp_effector отвечает за активизацию заданного ему аргументом эффекта.

Хочется еще эффект(ов) добавить - ну так что мешает активизировать еще сколько нужно? ;-)

И я бы не называл "качанием" alcohol.ppe ... это все же не только качание.

 

Ну а по формату ppe - плохо искал, ведь под носом ...

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Поделиться этим сообщением


Ссылка на сообщение

Zander_driver

1. А теперь расшифруй попонятнее твои: "происходит безлоговый вылет" и "но на этот раз не просто без лога - лог-файл вообще остается пуст", т.к. :

а) файл лога всегда есть;

б) бывает, что файл лога пуст - безлоговый вылет;

в) бывает, что в логе отсутствует секция строк 'FATAL ERROR' (условно: безфатальный вылет).

2. Давно бы нужно забыть о безлоговых вылетах. Различные луа-расширители (о которых и темы есть и упоминались не раз) позволяют и дублировать штатный лог-файл в 'свой', который не опустошается при любых вылетах. Да и пространство 'debug' давно можно подключать, чтобы трассировать вызовы при ошибках ...

3. Вылет при переходе на др.локацию с последующим удачным продолжением игры после запуска созданного автосэйва - скорее всего говорит о некорректной чистке об'ектов в игре. При чем это не обычные игровые об'екты/предметы, а, как правило, различные окна, менеджеры и т.п. Тут только анализировать коды и логи и/или методом тыка ...

4. То же что и в п.3 и при гибели актора ... Только продолжение попытки игры с последнего сэйва упираться могут и на отсутствие акторских об'ектов? которые не были вычищены после прерывания предыдущей игры.

Т.о. хочешь продолжать игру без выхода в ОС - подчищай 'остатки' от предыдущего запуска.

P.S. Попробуй себе же ответить, а зачем разработчики заморачиваются в _g.script с:

function start_game_callback()
    ...
    task_manager.clear_task_manager()
    treasure_manager.clear_treasure_manager()
    xr_sound.clear_all_sound_object()
    dialog_manager.fill_phrase_table()
    ...
end

 

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Поделиться этим сообщением


Ссылка на сообщение

kratos888, учись задавать вопросы!

Пустословия много, но ничего(!) для того, чтобы можно было бы указать на ошибку или дать совет ... окромя: Читай мат.часть!

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...