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

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

saruman_ten, Яж говорю смотри логику рестриктора,там ничего не нужно придумывать ,просто актер в зоне =действие(инфопорция или эффект, то что заключено в%% ,эффект это отдельная функция или проигрыш звука,или вернуть определенной функции "верно"или"ложь").Актер вышел из зоны=действие.

А конкретно пример с таймером в логике рестриктора Х16 ,скорее всего в аллспавн,нужно разобрать любой аллспавн где этот квест не отключен,но может он и отдельно прописан ссылкой на файл скриптс,не могу сказать нет под рукой распакованых архивов

Ссылка на комментарий

Кто нибудь знает, как получить точное оружие, из чего был убит НПС?

При использовании hit_callback нельзя правильно отловить, например, что убил из подствола или гранатой. Может есть какой то способ получить хотя бы тип хита при последнем убийстве, или есть какая нибудь функция типа last_hit, которая возвращает объект класса hit() в котором хранятся данные об последнем повреждении непися?

 

Суть в том, что нужно отловить, что НПС убит гранатой (например), а пока единственным выходом я вижу создание сложной системы, которая будет следить, какое оружие находилось в руках каждого НПС, но это довольно затратная вещь, может есть попроще идеи?

Зарание спасибо.

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

День добрый.

У меня такой вопрос:

есть три обьекта с логикой:

[logic]

active = ph_idle

 

[ph_idle]

on_info = {=actor_alive} %=play_sound(pri_b306_generator_work)%

 

 

Но звук отыгрывается только от одного :russian_ru: . Как заставить отыгрывать звук все три предмета? (Зов припяти 1.6.02)

Заранее спасибо.


Команда ReWrite Team. От сталкера отошли. Пересели за другую платформу.

 

Ссылка на комментарий

*Shoker*, Посмотри наработки АМК http://www.amk-team.ru/forum/index.php?showtopic=9043 -там были динамические новости в которых сообщалось как погиб непись и из какого оружия убит,правда там недоделано, в паре мест есть вылеты(один точно знаю из за того что зомби забыли включить в статистику ,еще один с гранатой),но функция определения в какую часть было попадание и из какого оружия,есть

 

Изменено пользователем gruber
Ссылка на комментарий

gruber

Спасибо за ответ :)

Но увы это не то, текущее оружие проверяется также через active_item() (а гранаты в момент убийства у НПС уже может не быть, тоже касается игрока), а конечность можно в стандартном hit_calback достать.

 

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

Вот откопал в lua_help некоторые функции:

get_monster_hit_info()

memory_hit_objects()

 

C++ class hit_memory_object : entity_memory_object {

property amount;

property bone_index;

property direction;

property last_level_time;

property level_time;

property object_info;

property self_info; ?

 

Может тут можно что то выудить.

 

 

 

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий
*Shoker*, ну вот у меня появилась некая идея, но надо делать через функции АМК, в news_main.script и news_data.script есть функции, отвечающие за тип оружия из которого был убит НПС, но там надо большую таблицу заполнить. Отвечают за это функция, я думаю format_death_hear_sounds(victim_, killer_, weapon_) в news_main.script и таблица со значениями weapon_classes в news_data.script.
Ссылка на комментарий

*Shoker*, get_monster_hit_info() работает только для объектов, наследующих от CBaseMonster - а это только монстры. Если ковырять - то memory_hit_objects() - он для объектов, наследующих от CCustomMonster, то есть для сталкеров должно работать. Только это все равно не поможет. Этот метод (по крайней мере, в движке) возвращает вектор объектов MemorySpace::CHitObject, а у этих объектов нет никаких полей, которые содержат подобные данные. Да и не добраться до них.

 

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

Ulman, уже ответили, что там оружие берется с помощью active_item(). Как это может помочь-то?

Изменено пользователем KD87
Ссылка на комментарий

*Shoker*

Как говорится "зри в корень" ... Не ищи готовых вариантов, т.к. потребное тебе выходит за рамки как оригинальной игры, так и отдельных модов.

а гранаты в момент убийства у НПС уже может не быть, тоже касается игрока

Вот и отталкивайся от этой правильной мысли.

Информацию о том 'кто/что' убило непися - несет аргумент 'who' в коллбэке хита. В случае монстров, аномалий и т.п. - все вроюе как просто и понятно.

Если же киллер - сталкер, то в основном тоже все просто, определяется по уже упоминавшемуся тут active_item().

Однако при игре с модами возникают и пожелалки типа определения: "а не гранатой ли убит"?

Тут тоже в принципе все просто, если 'who' - граната, то и убит ею ...

 

В чем же заковыка? А в том, что если игрок (ГГ) кидает гранату, то 'who' даст возвратом не гранату, которая и взорвалась то через секунды, а именно ГГ, т.е. того кто бросил(!), а точнее - владельца гранаты.

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

Если граната/подствольный заряд/мина, которая убила непися имеет 'parent_id' - то именно владелец этого предмета и будет указан как 'who' в коллбэке хита. Если же в схеме кидания/стрельбы 'граната' заменяется на некий фейк-объект, то будет указана именно 'граната', а не тот кто кинул ее.

 

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

Если хочется единообразия, то придется доработать соответствующие схемы, для того, чтобы кинутые и 'убивающие' предметы заведомо получали соответствующий 'parent_id' с занесением в некий краткосрочный массив {item => parent}, и уже тогда по 'who' можно будет определять кто и из чего замочил ...

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

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

Ссылка на комментарий

KD87, а как там типы оружия вычисляются? Я просто до конца там не досмотрел, но предположил, что если тип можно вычислить, то можно тогда и каждое оружие написать как отдельный тип и название прописать. Я не уверен, но похоже за это отвечает функция get_weapon_type(weapon).

И ещё, как в схеме Generous NPCs сделать так, чтобы НПС начинал лечить ГГ при получении инфопоршня?

Изменено пользователем Ulman
Ссылка на комментарий

Ulman

Там берётся текущее оружие непися, получается его класс, а по классу определяется, что это такое. Вообщем ничего сверх сложного.

 

Artos

Да знаю.. я говорю сейчас о ЧН, пытался фейковым гранатам приписывать script_binding, но это не помогло, там какие то другие объекты кидаются, мороки море вообщем. Порешил, что наверно буду делать систему, которая будет следить за текущем оружием всех НПС, включая ГГ, затратно, но пока другого выхода я не вижу...

 

Всем кто откликнулся спасибо, за помощь :)

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

А при взрыве гранаты происходит вызов какой нибудь функции типа нет_дестрой, если их забиндить? А то может сравнивать время вызова death_callback и net_desctroy?

Freedom

Ссылка на комментарий

Дело в том, что в ЧН кидание гранат движковое, и кидаются по ходу не фейковые гранаты из weapons.ltx а самые "настоящие" из w_rgd.ltx. Я правда глубоко не копался, решил пойти другим путём. Хотя вообще идея в принципе стоящая, возможно стоит её добить.

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

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

Ссылка на комментарий

Зависает и без лога? Если да, то тут наверно придётся скрипты по очереди отключать, начиная с самых "стрёмных" и кончая боле\менее рабочими. Причём если сейв уже сильно битый возможно придётся загружать нормальный и занаво делать сейв и тестировать. Если новый сейв опять будет битый - то значит не исправил.

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий
*Shoker*, да, зависает и без лога, но самое интересное что раз на раз не приходится, юывает так, что например с начала зашел просто в игру и начал загружать сейв, зависает, а если начать новую игру и загрузить этот же сейв, то всё нормально. Я вот думаю можно ли попробовать вычислить этот скрипт с помощью вот этой статьи?
Ссылка на комментарий

Такое прокатит, если только вылет в скрипте от GSC.

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

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

 

Вообще на будущее если делаешь свои скрипты, старайся сразу делать предусловия вида if then, чтобы если надо было потом отключить скрипт, его достаточно было просто "удалить\переименовать"

 

Метод с printf всё же попробуй. мб повезёт и лог нормальный слить игра успеет.

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий
Ulman, *Shoker*, все нормально отработает. В конце концов, никто не мешает поставить свои вызовы printf в нужных точках. Недостаток тут в другом - flush работает очень медленно, так что если переборщить с количеством printf, можно записи лога ждать очень долго. Проверено на себе.
Ссылка на комментарий

По поводу flush такое чувство, что она сохраняет в файл не только то, что накопилось в консоли с прошлого вызова (как и следовало бы сделать по уму), а все целиком - с запуска игры. По крайней мере, чем дольше работала игра (при регулярном вызове flush), тем больше лог и тем тормознее работает функция.

 

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

Ссылка на комментарий

Kirag,

По поводу flush такое чувство, что она сохраняет в файл не только то, что накопилось в консоли с прошлого вызова (как и следовало бы сделать по уму), а все целиком - с запуска игры.

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

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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