Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Генератор шаблонов поведение npc или снова о .efd
GAMEINATOR forums > S.T.A.L.K.E.R. > Мастерская: создание модов для S.T.A.L.K.E.R.
Trollz0r
Итак, с 2015 года у нас есть сам генератор. Кто-то уже понял, как он работает и как использовать его на благо комьюнити?
NanoBot-AMK
Мне надо понять как НПС выбирает оружие, я сейчас сделал костыль для гравипривода: при активации просто удаляет все патроны, кроме патронов гравипривода, что заставляет НПС выбрать именно его, и при деактивации спавнит обратно, пока не отладил как надо. Если понять как это работает, может быть можно сделать проще, просто настройками конфига.
Файлы которые участвуют выборе параметров.
ef_base.h
ef_pattern.cpp
ef_pattern.h
ef_primary.cpp
ef_primary.h
ef_storage.cpp
ef_storage.h
ef_storage_inline.h
ef_storage_script.cpp
ЗЫ
Есть мысль сделать скиптовый усилитель приоритетов в выборе оружия, но это уже XE, скриптом можно повысить приоритет так, что НПС выберет указанное оружие без вариантов. Всё адреса функций указанных в этих файлах в IDA я нашёл, не смотря что они виртуальные.
ForserX
Ночью гляну.
NanoBot-AMK
Странная функция.
ef_primary.cpp
CODE
float CPersonalWeaponTypeFunction::ffGetTheBestWeapon()
{
u32 dwBestWeapon = 0;

if (ef_storage().non_alife().member() && ef_storage().non_alife().member_item())
return (float(dwfGetWeaponType()));

if (ef_storage().non_alife().member()) {
const CInventoryOwner *tpInventoryOwner = smart_cast<const CInventoryOwner*>(ef_storage().non_alife().member());
if (tpInventoryOwner) {
xr_vector<CInventorySlot>::const_iterator I = tpInventoryOwner->inventory().m_slots.begin();
xr_vector<CInventorySlot>::const_iterator E = tpInventoryOwner->inventory().m_slots.end();
for ( ; I != E; ++I)
if ((*I).m_pIItem) {
CWeapon *tpCustomWeapon = smart_cast<CWeapon*>((*I).m_pIItem);
if (tpCustomWeapon && (tpCustomWeapon->GetAmmoCurrent(true) > tpCustomWeapon->GetAmmoMagSize()/10)) {
ef_storage().non_alife().member_item() = tpCustomWeapon; <-- назначить оружие
u32 dwCurrentBestWeapon = dwfGetWeaponType();
if (dwCurrentBestWeapon > dwBestWeapon)
dwBestWeapon = dwCurrentBestWeapon;
ef_storage().non_alife().member_item() = 0; <-- удалить оружие
}
}
}
}
else {
if (!ef_storage().alife().member() || !ef_storage().alife().member()->m_tpCurrentBestWeapon)
return(0);
ef_storage().alife().member_item() = ef_storage().alife().member()->m_tpCurrentBestWeapon;
dwBestWeapon = dwfGetWeaponType();
}
return(float(dwBestWeapon));
}

Явно баг какой-то.
ForserX
Как я понял:
Айдишники.
Цитата
;function types
; primary functions
Distance = 0
GraphPointType0 = 1
EquipmentType = 2
ItemDeterioration = 3
EquipmentPreference = 4
MainWeaponType = 5
MainWeaponPreference = 6
ItemValue = 7
WeaponAmmo = 8
DetectorType = 9

PersonalHealth = 21
PersonalMorale = 22
PersonalCreatureType = 23
PersonalWeaponType = 24
PersonalAccuracy = 25
PersonalIntelligence = 26
PersonalRelation = 27
PersonalGreed = 28
PersonalAggressiveness = 29
PersonalEyeRange = 30
PersonalMaxHealth = 31

EnemyHealth = 41
EnemyCreatureType = 42
EnemyWeaponType = 43
EnemyEquipmentCost = 44
EnemyRukzakWeight = 45
EnemyAnomality = 46
EnemyEyeRange = 47
EnemyMaxHealth = 48
EnemyAnomalyType = 49
EnemyDistanceToGraphPoint = 50

; complex functions
WeaponEffectiveness = 61
CreatureEffectiveness = 62
IntCreatureEffectiveness = 63
AccWeaponEffectiveness = 64
FinCreatureEffectiveness = 65
VictoryProbability = 66
EntityCost = 67
Expediency = 68
SurgeDeathProbability = 69
EquipmentValue = 70
MainWeaponValue = 71
SmallWeaponValue = 72
TerrainType = 73
WeaponAttackTimes = 74
WeaponSuccessProbability = 75
EnemyDetectability = 76
EnemyDetectProbability = 77
EnemyRetreatProbability = 78
AnomalyDetectProbability = 79
AnomalyInteractProbability = 80
AnomalyRetreatProbability = 81
BirthPercentage = 82
BirthProbability = 83
BirthSpeed = 84


Код:
Цитата
8 3 ; Какие-то странные ID, как понимаю, из того же списка
EnemyAnomalyType DetectorType AnomalyDetectProbability ; задаём параметры для установки значений
1 1 20 ; Первый тип зоны, первый тип детектора, вероятность обнаружения
1 2 60 ; Первый тип зоны, второй тип детектора, вероятность обнаружения
1 3 100 ; Первый тип зоны, третий тип детектора, вероятность обнаружения
Карлан
biggrin.gif ето ор.

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

нанобот, скриптовые аналоги сейчас паровозят все эти ef_ связанные с оружием и не только, и я их повырезал все, а конкретно к селекту оружия это вообще никак не относится, там и так очень много мертвым грузом лежит, мы это все выбросили в свое время, поразматывай сам и поймешь о чем я.
ForserX
Карлан, прока от них никакого, как я понял из твоих слов?
Trollz0r
Цитата(Карлан @ 24.07.2017, 22:07) *
разобрались конкретно с этим уже давным-давно
Давай конкретнее, пока тебе не влепили пред за флуд и строчные буквы в начале предложения.
Карлан
во 1) конретно я уже сказал, или ты среьезно думаешь что я буду десятки патернов расписывать? biggrin.gif
вовторых где ты увидел флуд?
втетьих 3) что ты мне сделаешь ты не модер.
за строчные буквы в начале предложения извени.
Trollz0r
Да куда там десятки, тебе и один слабо расписать smile.gif видимо, стоящий сзади модератор с ремешком настолько плотно вошёл в сознание некоторых амкасов, что на других форумах сразу начинается спутанность мыслей, пальцы перестают попадать по клавишам...
macron
Цитата(RedPython @ 06.08.2017, 16:52) *
видимо, стоящий сзади модератор с ремешком настолько плотно вошёл в сознание некоторых амкасов

Карлан
во только на слабо меня еще и не брали biggrin.gif . ты когда разберешься мой пост перечитай, если с чем-то будешь не согласен спрашивай, я на все свои слова могу дать дополнительные пояснения со ссылками на конкретный код, мне не сложно. а то что ты просишь требует трех составляющих, знания, времени и желания, если с первым все хорошо, то со вторым и третьим вообще никак, так что ты прав.
Trollz0r
а ты случайно не на водонасосной станции работаешь? smile.gif так много слов и всё вода.
NanoBot-AMK
Цитата(NanoBot-AMK @ 23.07.2017, 22:59) *
Есть мысль сделать скиптовый усилитель приоритетов в выборе оружия

Реализовал гораздо проще.
set_script_best_weapon(game_object, boolean)
get_script_best_weapon()
Первый метод устанавливает лучшие оружие, второй показывает. Булева, если равна true, то НПС не меняет оружие, даже если кончились патроны, если false, то сменит оружие.
Метод работает просто, в функции CAI_Stalker::update_best_item_info() проверка проверяет, если параметр m_script_best_weapon не равно nil, то установить именно это оружие.
В общем работает, можно задать нож, и НПС выберет его, даже если в инвентаре будет пулемёт с патронами.
ЗЫ
Ах да, реализовал в XRayExtensions.
ForserX
Топик снова актуален. Кто-нибудь что-нибудь с этим делал?
ForserX


Получить бы алгоритм записи... А то значения расходятся. С атомиками всё понятно, в отличии от значений структур

Причём само странно, что max value считается неправильно. Как-будто бы пропустили последний индекс в массиве. Сейчас попробую перегенерировать, сместив данные немного, мб так и выйдет.



Да, индекс неправильный в алгоритме
atanda
Может я что пропустил, а вы разобрались что это такое?

Судя по названию... шаблоны поведения?%] мини-мини-мини нейронная сеть?(вообще не разбираюсь)
hi_flyer
ForserX,
А насколько это актуально для того же движка ЗП? Оно разве там вообще используется?
Я так бегло смотрел - это всё вроде рудименты времен OL.
ForserX
http://xray-oxygen.org/index.php/A-Life:_Шаблоны_Поведения

Всё, что нашёл, пока мне не надоело. Остался принцип генерации. И посмотреть принцип работы. Утилиту для депарсинга залью в репо окси чуть позже.

hi_flyer, чекни вики окси. Я там описал, что реально используется.

Цитата(hi_flyer @ 12.06.2019, 22:04) *
А насколько это актуально для того же движка ЗП? Оно разве там вообще используется?

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

buffy, как мне ответил один из олдов: некий машинный просчет коэфов для ситуаций.
cjayho
QUOTE (NanoBot-AMK @ 23.07.2017, 22:56) *
Странная функция.
---//---
Явно баг какой-то.


там пол-двигла такое. Сделанное с помощью черной магии и синей изоленты
ForserX
cjayho, нормально там всё
atanda
cjayho, а может что по теме? Ведь интересно, всё же=)
ForserX
Последнее, что я сделаю по этой теме(кроме как выпилить их нафиг), исправление для SmallWeaponValue и Expediency. В чём суть: генератор немного сбойный и неправильно считает, если последний индекс больше, чем предыдущие. (Он его пропускает). Там есть ещё такие файлы, но как показал код, они не юзаются.

Нажмите для просмотра прикрепленного файла
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.