Цитата(Verdugo @ Oct 21 2020, 20:39)

Здравствуйте. Нет, способа как это сделать я не нашел.
Вероятно, для того чтобы сделать динамическое изменение стана ГГ, без правок в движке не обойтись. Надеюсь, что это будет добавлено в грядущем патче от БМС.
Спасибо за ответ. С этой функцией вообще много странностей. К примеру, при выводе логов для нпс всё выводится корректно, а вот если поставить принудительный вызов эвента каждый фрейм для ГГ, то для него в логах будет выводиться попеременно истина и ложь, без повторений. То есть, даже если вероятность значения "истина" равна одной десятитысячной, на экран будет выведено только одно сообщение "ложь" (а не тысячи подряд), а следующее за ним будет обязательно "истина", пусть и через заметный промежуток времени, и сразу опять "ложь".
Также наблюдается проблема с проверкой условий типа (chr == GetMainCharacter()) - они просто пробрасываются, автоматически считаясь в этой функции за истинные. Мало того, если условие объединено логическим оператором && с другим, пробрасываются оба условия. При этом условие типа (sti(chr.index) == GetMainCharacterIndex()) обрабатывается нормально. Я понимаю, что ресурсы для вызова этих функций требуются разные, но вместо ошибки памяти или тормозов вся строчка if просто игнорируется.
То, что в случае ГГ эта функция после загрузки локации уже ни на что не влияет, ещё объяснимо: возможно, "загрузочное" значение перезаписывается в другую переменную, и в дальнейшем при обработке эвента на получение удара берётся уже оттуда. Но получается, этот эвент с MainCharacter в принципе не дружит и что-то там лочит, вызывая, например, помимо этой функции ещё и ряд других, прописанных в движке.
Цитата
Я тогда заметил, что NPC_Event_EnableStun действует на анимации hit_attack и hit_fire, но не действует на hit_feint. Но поиск по скриптам, опять же, ничего не дал.
Ну да, это анимации, вызов которых происходит где-то в движковой части. Тут даже для функции расчёта возможности стана свой эвент прописан.
Цитата
Там рядом еще был момент интересный, связан с распределением атакующих весов для NPC. Эти функции опрашиваются разово при загрузке локации, для всех персонажей в локации (включая ГГ) То есть, если ваш абордажник зайдет в локацию с топором, ему будут прописаны веса согласно chr_ai.fencingtype = FencingH. Если после этого вы оденете ему рапиру и вступите в бой, до смены локации абордажник будет намахивать шпагой как топором.
Вот этой особенности не заметил, спасибо)
Цитата
Интересно, что в ККС "fast" - это рубящие атаки, а "force" - атаки выпадом.
При расчете дамага это учтено, а здесь выходит, что саблист - самый часто колющий NPC.
Думаю, это обычная ошибка или недоработка. Эта функция вообще особо ни к чему реальному не привязана. Она не определяет оптимальный тип удара, не проверяет ни параметры оружия, ни что-либо ещё, только тип оружия, да ещё и близко не с теми коэффициентами, что указаны в формулах урона. До ККС у оружия не было профильного типа удара, поэтому и учитывать было нечего, были только базовые значения 20/50/20/20/10 и ничего не меняющая привязка к сложности.
В коде есть ещё пара мест, странным образом привязывающих тип клинка к непрофильному удару. Например, перк HardHitter, дающий бонусы выпадам для СТ и рубящим для РШ. Хотя, может, таким образом хотели отвести внимание игроков от профильных ударов? Чтобы, мол, игрок мог выбрать, потратить свою энергию на нанесение урона рубящим ударом или на снятие 10% энергии противника выпадом практически без урона. Ну, по такой логике можно и преобладание выпадов для нпс-саблистов обосновать тем, что это и так самый быстрый удар, а подкреплённый высоким уровнем навыка и хорошим клинком, ещё и с увеличенной вероятностью от ГГ просто куски мяса отрезать будет.
Цитата
У саблиста сумма весов на треть больше, чем у других классов.
Тестировал на даньке с анимацией К3/КСМ, т.к. на дефолтной анимации нельзя просто взять и отличить колющий от рубящего.
Сумма весов ни на что особо не влияет, такая система обычно используется для более удобного задания соотношений связанных общей суммой параметров. На реальные проценты выпадения влияет именно соотношение весов. И 100 из 200, и 150 из 300 приведутся к 50% - никакой разницы математически нет.
Цитата
Может быть, есть знающий человек, кто сможет подсказать как работают эти веса?
Ну, программировал их, судя по всему, AlexusB, так что теоретически он мог бы прояснить нам абсолютно всю базу. Но пока он не ответил, могу выложить свою статистику. Расчётный вес немного не соответствует наблюдаемым соотношениям в самой игре, очевидно, где-то ещё в движке дообрабатываясь. У меня, например, получилась такая картина с учётом типа оружия и уровня энергии атакующего персонажа (прошу прощения, спойлеров на форуме не нашёл):

Эта статистика (также прошу прощения за вырвиглазное оформление, у меня на тот момент гигнулся d3d8, поэтому я быстренько перенастроил вывод на стандартные переменные) вызывает пару вопросов.
Во-первых, при низком (<=20%) уровне энергии идёт резкое преобладание выпадов. Это можно объяснить тем, что выпад тратит меньше энергии, поэтому в ситуации, когда для остальных ударов энергии ещё недостаточно, их использование пробрасывается, тогда как выпавшие выпады (невольный каламбур) спокойненько проходят. Также каждую секунду желание (то есть, вероятность) атаковать возрастает (в зависимости от навыка владения оружием, кстати), поэтому очередь выпада если и пропускается, то крайне редко. А ещё есть небольшая вероятность (8,6%), что при невозможности добраться до близкой цели нпс наугад совершит выпад, что тоже может влиять на мою статистику.
Во-вторых, соотношения ударов для остальных уровней энергии хоть и идут весьма ровно, но всё равно отличаются от теоретических значений в пользу выпадов для РШ и пробивающих для ПТ. Для наглядности я скомпоновал данные в процентах для энергии >20%, а в скобках привёл теоретические вероятности:
РШ рубящий - 42% (51%), выпад - 48% (42%), пробивающий - 10% (7%);
СТ рубящий - 8% (11%), выпад - 82% (80%), пробивающий - 10% (9%);
ПТ рубящий - 6% (10%), выпад - 45% (45%), пробивающий - 49% (45%).
В процентах разница небольшая, но для выборки в пару тысяч ударов каждым типом оружия это всё же ощутимо. Можно было бы попытаться объяснить это заложенным преимуществом для "родного" типа удара, если бы не удручающая статистика по СТ, где никакого бонуса для рубящего удара нет и в помине. Что, конечно, тоже может объясняться ошибкой перепутывания fast и force, но сколько можно на это сваливать)
В любом случае, либо я просто недостаточно стоял под градом ударов в Ле Франсуа, либо чего-то не учёл, либо эти функции для определения веса - ещё не всё, что влияет на выбор удара (хоть и имеют явно определяющее значение).
Однако в целом всё довольно понятно, хоть и жаль, что реально вызывается только при загрузке локации. Будет время, поменяю формулы на заготовленные (с показательной функцией для сложности) и ещё попроверяю.
Да, всё описанное - моё имхо, и я вполне могу ошибаться в любом из своих выводов, так что людей, реально знающих то, что я лишь предполагаю, призываю не серчать, а объяснить мне мою ошибку.