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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток!
    Стартовал новый литературный конкурс от "Ордена Хранителей" - "Пираты Миртанского моря".
    Каждый может принять в нём участие и снискать славу и уважение, а в случае занятия призового места ещё и получить награду. Дерзайте
  • Дорогие друзья, год подходит к концу, и пришло время подвести его итоги и наградить достойных

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

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

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.638
Баллы
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 · Просмотры: 277
Последнее редактирование модератором:

Gratt


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

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.086
Благодарности
1.904
Баллы
320
Поэтому когда тип хука поменяется на безопасный, вызов в эту функцию придет так, как этого ожидают авторы.
Не согласен. Любой твой внедренный код может поменять значение ESP:
C++:
void Hook()
{
  int x; // esp -= 4
  Original(); // вызов с изменённым esp
  // esp += 4
};

Вообще, я думаю, что тебе тут только хук на oCNpc::OnDamage нужен.
 

Gratt


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


Тогда не будут играть эффекты повреждения, которые нужны
 

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.469
Благодарности
1.993
Баллы
365
Вообще, я думаю, что тебе тут только хук на oCNpc::OnDamage нужен.
Если только OnDamage то урон проходит.
C++:
    HOOK Ivk_Hook_oCNpc_OnDamage PATCH(&oCNpc::OnDamage, &oCNpc::OnDamage_Union);
    void oCNpc::OnDamage_Union(oSDamageDescriptor& desc) {
        if (CanDamage(desc))
            THISCALL(Ivk_Hook_oCNpc_OnDamage)(desc);
    }
если еще добавить
C++:
    HOOK Ivk_Hook_oCNpc_OnDamage_Hit PATCH(&oCNpc::OnDamage_Hit, &oCNpc::OnDamage_Hit_Union);
    void oCNpc::OnDamage_Hit_Union(oSDamageDescriptor& desc) {
        if (CanDamage(desc))
            THISCALL(Ivk_Hook_oCNpc_OnDamage_Hit)(desc);
    }
то урон не проходит, но он не проходит по всем вообще.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.638
Баллы
625
Обновлено

- API обновлено, добавлены безопасные хуки для лучшей совместимости с модами
- Напарники будут браться в фокус, если игрок по какой-то причине стал их текущим соперником
- Время отката фокуса сокращено с 2.5 до 2.0 секунд
- Работающие заклинания с продолжительным уроном (прим. огненный дождь) удерживают время отката, чтобы случайный персонаж не был ранен после битвы
- Добавлены два фильтра для NPC. Которые будут браться в фокус всегда и никогда (если игрок не является текущим соперником)
Фильтры задаются скриптом через папку 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");
};
 

Mr.Ermieλ

Участник форума
Регистрация
13 Фев 2022
Сообщения
293
Благодарности
30
Баллы
75
Вот это прям супер полезная штука, особенно когда ты очищаешь вместе с одним из ОНД долину рудников.
 

got11

Участник форума
Регистрация
22 Фев 2009
Сообщения
52
Благодарности
2
Баллы
155
В какую папку игры этот плагин положено устанавливать?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.638
Баллы
625
Установщик сам поставит куда надо. Том плагина появится в папке Gothic/Data/Plugins.
 

got11

Участник форума
Регистрация
22 Фев 2009
Сообщения
52
Благодарности
2
Баллы
155
Установщик сам поставит куда надо. Том плагина появится в папке Gothic/Data/Plugins.
При установке просит указать папку. Я сунул в Gothic/Data/... не работает. Готика 2: Одиссея 2.7.1 вместе с живностью изрубил охотников, правда они оклемались.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.638
Баллы
625
got11, ты Union ставил?
 

got11

Участник форума
Регистрация
22 Фев 2009
Сообщения
52
Благодарности
2
Баллы
155
В установке есть пункт «ставим Player Kit + Патч и сам актуальный юнион»,

Я установил всего лишь, как, впрочем, и всегда, Gothic2_PlayerKit-2.8,
а затем
- ODYSSEE-2.7.exe, ( причём, после установки написано что установлена версия 2.7.1)
- ODYSSEETEXTURES-2.7.exe,
- MUSIK_ODY-2.7.exe,
- ODY_HEROTAKES-2.6.exe (голос героя),
- Odyssee_2.5.1_Speech_1.exe и Odyssee_2.5.2_Speech_1.exe (озвучка на немецком)
ну и ставлю FONT_High_Resolution_3_0_1_Cyrillic.vdf

т.к. игрушка (и без какого-то там патча и юниона) вроде как неплохо идёт.

Может зря?

Единственное что сильно досаждает, так это попадание мечом

по дружественным игрокам, особенно сильно достаётся Дандоло.

Вместо того чтоб долбить врагов, ищешь место, с которого его нельзя зацепить.

Но игрушка построена так, что он, в бою, всегда должен находиться перед ГГ.
Пост автоматически объединён:

А так же там есть ещё пункт
Устанавливаем G2Odyssey-SystemPack-1.8.exe или версии 1.7. Внимание! В версии СП 1.8 присутствует баг с бронёй/одеждой, которая может сниматься с тел некоторых мобов (костяные воины), в оригинале так не задумано.
Альтернатива (более лучший вариант) системпаку - Union (ставить актуальную версию).
я установил только G2Odyssey-SystemPack-1.8.exe , т.к. рассчитываю на шмотки этих самых костяных воинов.
 
Последнее редактирование:

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.176
Благодарности
5.693
Баллы
910
А так же там есть ещё пункт
Устанавливаем G2Odyssey-SystemPack-1.8.exe или версии 1.7. Внимание! В версии СП 1.8 присутствует баг с бронёй/одеждой, которая может сниматься с тел некоторых мобов (костяные воины), в оригинале так не задумано.
Альтернатива (более лучший вариант) системпаку - Union (ставить актуальную версию).
я установил только G2Odyssey-SystemPack-1.8.exe , т.к. рассчитываю на шмотки этих самых костяных воинов.
Хочешь, чтобы работал плагин используешь union. Systempack устарел уже 3 года как.

Union ставиться поверх SP из менеджера ресурсов или офлайн установщиками из темы union.
 

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.469
Благодарности
1.993
Баллы
365
я установил только G2Odyssey-SystemPack-1.8.exe , т.к. рассчитываю на шмотки этих самых костяных воинов.
Для этого не надо ставить системпак, в юне эта дичь просто по умолчанию выключена. Но можете включить ShowArmor =1

В установке есть пункт «ставим Player Kit + Патч и сам актуальный юнион»,
Только у меня в первом пункте до этого было не ставить системпаки. А вы в итоге поставили системпак и потом зачем-то Player Kit + Патч, но без юниона.
 

got11

Участник форума
Регистрация
22 Фев 2009
Сообщения
52
Благодарности
2
Баллы
155
Ну да, прочитал начало установки не внимательно.
Там начинается:
1. Ставим чистую версию Г2НВ (желательно без системпаков и стим фиксов)
2. Далее из ресурс менеджера ставим Player Kit + Патч и сам актуальный юнион
Я их по привычке воткнул, до версии 1.6.4 они ставились.
А какой приемлемый выход можете предложить, из этой ситуёвины7 Но чтоб постоянно своих не долбить?
Может системпак удалить а юнион воткнуть? Или проще всю игрушку поновой переустановить?
 

got11

Участник форума
Регистрация
22 Фев 2009
Сообщения
52
Благодарности
2
Баллы
155
got11, как вам написали выше, просто поставьте юнион.
Всё перепробовал. У меня этот плагин не работает. Сейчас пробую установить игрушку по новой, с самого начала. В какой момент по очереди установить плагин?
Считай всю субботу угробил на эту хрень. В РЕЗУЛЬТАТЕ, всё удалил и установил как было. Видимо эти плагины для каких-нить продвинутых ITшников.
 
Последнее редактирование:

got11

Участник форума
Регистрация
22 Фев 2009
Сообщения
52
Благодарности
2
Баллы
155
Для этого не надо ставить системпак, в юне эта дичь просто по умолчанию выключена. Но можете включить ShowArmor =1

Не работает. Ни при ShowArmor равном единице, ни при нуле шмотки в инвентаре костяных магов и воинов не появляются. Не появляются они и с системпаком 1.8.
Может в версии 2.7.1 их вообще убрали?
Без них, в отдельных случаях, что-то ну ооочень быстро гасят ГГ, прям как будто он в одной повязке рабов,
хотя весь обвешан мощными кольцами, амулетом, поясом и в прокаченной броньке рыцаря.
 
Последнее редактирование модератором:

Den Kor

Участник форума
Регистрация
13 Авг 2014
Сообщения
143
Благодарности
21
Баллы
185
В готике 1 мясных жуков нельзя взять в фокус оружия.
 
Сверху Снизу