• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

Gothic ½ Отключение урона и фокуса по своим | zNoFriendlyFire [плагин для Union]

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
  • Первое сообщение
  • #1
zNoFriendlyFire
Отключение урона и фокуса по своим

Доступно в
Steam Workshop Gothic 1 stimSmall.png
Steam Workshop Gothic 2 stimSmall.png
Менеджер ресурсов 1559419291725.png
Google Drive
Либо посмотреть вложение к сообщению.​



Требования: Union 1.0l или выше
Платформа: Gothic I, Gothic Sequel, Gothic II, Gothic II NoTR
Исходный код:
GitHub

Этот плагин не просто отключает урон и фокус по своим, а скорее анализирует когда и для кого именно его следует отключать.
Программа ситуационно отфильтровывает взятие в фокус и случайное нанесение урона по потенциальным союзникам. К примеру, в фокус не будут браться Partymember'ы, ведь они по факту являются напарниками. Также не будут браться в фокус те NPC, которые атакуют вражеские цели вместе с вами. Дополнительно, если все вражеские цели убиты, то фокус по `своим` будет неактивен еще 2.0 секунды, чтобы случайно не ударить союзника.

Плагин имеет настраиваемые фильтры для NPC, которые будут браться в фокус всегда и никогда не смотря на логику плагина. Примером необходимости такого решения является, например, персонаж Мад в G1, которого невозможно будет прогнать, если принудительно не разрешить на него фокус, поскольку он считается напарником. Фильтры задаются скриптом через папку Autorun.
Синтаксис:
Daedalus:
Делает NPC невидимым для боевого фокуса навсегда (кроме ситуации, когда игрок является его текущим соперником)
func void AI_SetNeverFocusInstance(var C_Npc npc)
func void AI_SetNeverFocusInstanceName(var string instanceName)

Делает NPC видимым для боевого фокуса навсегда
func void AI_SetAlwaysFocusInstance(var C_Npc npc)
func void AI_SetAlwaysFocusInstanceName(var string instanceName)

Пример скрипта для папки Autorun:
Daedalus:
func event GameInit()
{
    AI_SetAlwaysFocusInstanceName("VLK_574_Mud");
};

Примеры возможных игровых ситуаций

Выборочных захват цели в комбинации с напарниками




Захват цели в ситуации, где есть потенциальные враги и союзники



Захват, где в итоге остаются только союзники



 

Вложения

  • zNoFriendlyFire.zip
    13,3 MB · Просмотры: 245
Последнее редактирование модератором:

.Unreal

Участник форума
Регистрация
21 Июн 2012
Сообщения
689
Благодарности
91
Баллы
210
Ну типа да, он либо есть, либо нет. Больше интересно как ты его поймал, обычно случайно натыкивают, если используют Марвин :)
Не знаю.. Вроде марвин в этом моде не юзал. Я его редко юзаю, стараюсь им не злоупотреблять. Последний раз юзал в предыдущем моде - Грязное болото. Когда уже мод прошел. И вроде всё. Но это было где то месяц назад. Это могло как то повлиять на другой мод в той же папке? Надеюсь сейчас у меня уже все норм в этом плане..
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
N1kX, то есть можно поспать и встать пассивом? Норм. Но ведь тут стоит проверка на инстанцию. Нет ли в мире того самого дублёра pc_hero, о котором год назад велась острая дискуссия?


Это могло как то повлиять на другой мод в той же папке?
Нет, моды используют разные папки сохранений. Тебе видимо просто не повезло. Вот N1kX как раз возможную причину показал.
 

.Unreal

Участник форума
Регистрация
21 Июн 2012
Сообщения
689
Благодарности
91
Баллы
210
Больше интересно как ты его поймал, обычно случайно натыкивают, если используют Марвин :)
Кажется я нашел ответ на ваш вопрос. Я решил повторно установить плагин zParserExtender. И у меня сейчас стоял уже плагин zNoFriendlyFire (не удалял его после повторной установки, решил оставить). Так вот. Баг снова повторился! В моде Братство Спящего мобы снова не агрились.. Пока не поспал и не пересохранился (чтобы и сам сейв избавить от бага). Кстати! Самое забавное, что в моде Легенда Ахссуна такого бага не наблюдается.. Оригинал не тестил к сожалению( А еще я вот только сейчас заметил, что этот плагин zNoFriendlyFire (это так, к слову) конфликтует с плагином Union_Gothic_ScreenInfo_2_2_6 в моде "Легенда Ахссуна". При ударе по мобу\НРСу или при ударе своего тела о землю при падении - происходит вылет из игры с ошибкой. В "Братстве Спящего" вылета не было. Пришлось пока этот плагин (zNoFriendlyFire) временно удалить(
 

.Unreal

Участник форума
Регистрация
21 Июн 2012
Сообщения
689
Благодарности
91
Баллы
210

Вложения

  • 333333333333333333.jpg
    333333333333333333.jpg
    166,9 KB · Просмотры: 20

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.449
Благодарности
1.977
Баллы
365
.Unreal, ок, проверю.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.131
Благодарности
5.626
Баллы
910
ошибка ясна, плагин делает хук на oCNpc::OnDamage_Hit
В моде тоже юзается хук на это место, поэтому вылет.
Поэтому я хз, авторы вряд ли будут делать nohit, выходит стоит тоже запретить запуск, или Гратт рассердиться?
 
Последнее редактирование:

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
Все ещё проще я думаю. Это же плагин старого образца, у него тип хука - detours. Сейчас принято использовать самопал - так называемый безопасный хук (специально для Икаруса). Можете это проверить через параметр UseAdaptiveHooks=1. Не панацея, но креш в этом месте должен пропасть для данной библиотеки.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.131
Благодарности
5.626
Баллы
910
Все ещё проще я думаю. Это же плагин старого образца, у него тип хука - detours. Сейчас принято использовать самопал - так называемый безопасный хук. Можете это проверить через параметр UseAdaptiveHooks=1. Не панацея, но креш в этом месте должен пропасть для данной библиотеки.
Немцы проверяли с адаптивными хуками, хук мода перестает работать, работает хук плагина, вылетов нет, но это плохо.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
Немцы проверяли с адаптивными хуками, хук мода перестает работать, работает хук плагина, вылетов нет, но это плохо.
Стесняюсь спросить. А что они вообще хукают? Пролог функции, инструкции вызова или адрес виртуальной таблицы? Мне на их неадекватные солянки только матом говорить хочется. По их стандарту меняется какая часть движка?
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.131
Благодарности
5.626
Баллы
910
Daedalus:
func void InitDamage() {
    const int dmg = 0;
    if (dmg) { return; };
    HookEngineF(6736583/*0x66CAC7*/, 5, _DMG_OnDmg_Post);
    const int oCNpc__OnDamage_Hit = 6710800;
    HookEngineF(oCNpc__OnDamage_Hit, 7, _DMG_OnDmg_Pre);
    dmg = 1;
};

0x00666610 public: void __thiscall oCNpc::OnDamage_Hit(struct oCNpc::oSDamageDescriptor &)

А первый вот здесь врезается
1635241457361.png

Daedalus:
func void _DMG_OnDmg_Post() {
    EDI = DMG_OnDmg(EBP, MEM_ReadInt(MEM_ReadInt(ESP+644)+8), EDI, _DMG_DmgDesc);
};
 

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.449
Благодарности
1.977
Баллы
365
Gratt, может перепишем эти хуки в zNoFriendlyFire?
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.131
Благодарности
5.626
Баллы
910
Gratt, может перепишем эти хуки в zNoFriendlyFire?
В alterdamage переписаны, как я говорил, перестают работать возможности мода в этом месте.
Вот подтверждение
505 и 507

Нет люди могут играть, но только чтоб не писали, а что стрелы не работают, а что боссы стоят на месте и т.д.
В моде файты с боссами описаны там.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
Xeдин, ну я хотел, да. Но помимо обновления я бы ещё добавил туда скрипт с обработчиком игнорирования некоторых НПС. Но пока что я не успеваю этим заняться.
N1kX, тут нет пересечений с безопасными. Не знаю что они там тестировали. Нет, я понимаю что это патч, а не хук, но тем не менее.
 

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.449
Благодарности
1.977
Баллы
365
N1kX, у них проблемы при включении адаптивных хуков, если безопасные использовать то не должны конфликтовать.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
Xeдин, адаптивные и означают, что система попытается преобразовать все деторы в патчи, для каких найдет инструкции под замену. Вечером все таки проверю и с безопасными хуками, и на 1.0l до кучи.
 

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.449
Благодарности
1.977
Баллы
365
Gratt, я к тому что сам режим адаптивных хуков пытается преобразовать все деторы в патчи и возможно этим затрагивает стороние ихние хуки. А если в наших плагинах использовать сразу патчи, то проблем таких не будет, так как не будет этого массового преобразования. Но тебе виднее :)
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
Xeдин, ну всё возможно. Я уже давно не использую детор. Только если явного вызова функции не существует.
 

OnFire

Участник форума
Регистрация
22 Июл 2017
Сообщения
10
Благодарности
15
Баллы
160
Никто, кроме нас не исправил это.
Почему-то теряется ссылка на hero и хрен кому назначается aivar
В L'Hiver Edition это уже давно исправили и даже немцы просили узнать как именно.
Но получается что все остальные этот фикс не заметили и так и сидели потом несколько лет с этим багом?
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.083
Благодарности
1.901
Баллы
320
У меня тоже плагин когда-то давно крашил в Dirty Swamp 3.0. Опция на адаптивные хуки не помогала.
В принципе, они могли в моде использовать локальную переменную из OnDamage через смещение от регистра стека (ESP), а он, если я правильно понимаю, будет изменён даже при исполнении кода в адаптивном хуке.

В alterdamage переписаны, как я говорил, перестают работать возможности мода в этом месте.
Это другое. Тот плагин делает хук и НЕ вызывает оригинальную функцию, то есть код из мода гарантированно не будет работать.
Этот же вызывает оригинальный код. Поэтому должен, по идее, работать, но, почему-то, не работает. Скорее всего, из-за использования регистра ESP.
 
Сверху Снизу