Decision Maker

Материал из GTAModding.ru
Версия от 09:29, 11 января 2009; VcSaJen (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Decision Maker - это модель поведения педов, или AI. В ней хранится базовое поведение актёра, его реакция на различные события.

DM для актёров

Создает виртуальную модель поведения с типом 0 и записывает в $DM:

060A: create_decision_maker_type 0 store_to $DM // see pedstats.dat

Типы: DM 0 - поведение актера в группе DM 1 - модель поведения копа DM 2 - обычная модель DM 3 - храброе поведение DM 4 - трусливое поведение DM 5 - модель поведения пожарного DM 6 - модель поведения водителя поезда (?)

Добавить реакцию для события:

0709: set_decision_maker $DM on_event 36 taskID 1022 chance_if_acquaintance respect 0.0 hate 100.0 unk 0.0 unk 0.0 in_car 1 on_foot 1 // see *.ped files

Где $DM - хендл модели поведения, on_event 36 - событие, на которое реагирует актёр, taskID 1022 - реакция (задача) актёра, четыре числа после chance_if_acquaintance - вероятность события при разных отношениях к объекту события, in_car 1 - реакция действует, когда актёр в машине; on_foot 1 - реакция действует, когда актёр пешком.

Расскажем теперь поподробнее. На одно событие может быть несколько реакций, например:

0709: set_decision_maker 1@ on_event 7 taskID 702 chance respect 50.0 hate 50.0 unk 50.0 unk 50.0 in_car 1 on_foot 1
0709: set_decision_maker 1@ on_event 7 taskID 911 chance respect 50.0 hate 50.0 unk 50.0 unk 50.0 in_car 1 on_foot 1

При возникновении события 7 (педа выбросили из машины) с вероятностью пятьдесят на пятьдесят при любых отношениях к угонщику (все четыре шанса - 50%) пед или выбросит угонщика и уедет (задача 702), или убежит от угонщика (задача 911).

Пример посложнее:

0709: set_decision_maker 1@ on_event 7 taskID 702 chance respect 10.0 hate 0.0 unk 70.0 unk 70.0 in_car 1 on_foot 1
0709: set_decision_maker 1@ on_event 7 taskID 911 chance respect 90.0 hate 0.0 unk 20.0 unk 20.0 in_car 1 on_foot 1
0709: set_decision_maker 1@ on_event 7 taskID 1000 chance respect 0.0 hate 100.0 unk 10.0 unk 10.0 in_car 1 on_foot 1

Если отношение педа к угонщику уважительное (respect), то с шансом 90% он убежит, с шансом 10% выбросит угонщика и быстро уедет. Если отношение педа к угонщику ненавистное (hate), то со 100% шансом он его убьёт (задача 1000). Если отношение педа к угонщику нейтральное (неприязненное или приязненное), с шансом 70% он выбросит угонщика и быстро уедет, с шансом 20% убежит, с шансом 10% нападёт на угонщика.

Ещё пример:

0709: set_decision_maker 1@ on_event 31 taskID 1000 chance respect 0.0 hate 100.0 unk 0.0 unk 0.0 in_car 0 on_foot 1
0709: set_decision_maker 1@ on_event 31 taskID 1022 chance respect 0.0 hate 100.0 unk 0.0 unk 0.0 in_car 1 on_foot 0

При событии 31 (пед увидел ненавистного ему педа) если он в машине (in_car 1 on_foot 0), то нападёт на него в DriveBy (задача 1022), высунувшись из окна и стреляя оружием. Если он пешком (in_car 0 on_foot 1), то он просто нападёт на педа (задача 1000).

Продолжим перечислять опкоды:

Сбросить информацию для события:

0708: reset_decision_maker $DM event 27

Перед тем как добавлять реакции на событие в модель поведения, следует сбросить информацию об этом событии.

Назначение этих опкодов неизвестно:

07E5: unknown_set 65543 decision_maker $DM
0978: unknown_set 65543 decision_maker $DM
07E5: unknown_set 65543 decision_maker $DM

Известно лишь, что 65543 - это маска. При компиляции данное число будет храниться как 0700 0100. Игра не читает целиком все число 65543, а только 1-й байт (07), у остальных 3-х байтов какое-то иное предназначение.

Присваивает актеру данную модель поведения:

060B: set_actor 1@ decision_maker_to $DM
07BC: set_actor -1 decision_maker_to $DM // AS_pack version

Удаление модели поведения:

065C: release_decision_maker $DM

Пример скрипта:

  1. {$CLEO}
  2.  
  3. wait 4000
  4.  
  5. 0@ = Actor.Create(Gang2, #MALE01, 2503.4812, -1671.2251, 13.3625)
  6.  
  7. #AK47.Load
  8. while not #AK47.Available
  9.  wait 0
  10. end
  11. 01B2: give_actor 0@ weapon 30 ammo 99999
  12. #AK47.Destroy
  13.  
  14. 060A: create_decision_maker_type 0 store_to 1@
  15. 0708: reset_decision_maker 1@ event 36
  16. 0708: reset_decision_maker 1@ event 37
  17. 0709: set_decision_maker 1@ on_event 36 taskID 1022 chance_if_acquaintance respect 0.0 hate 100.0 unk_like_dislike 0.0 unk_like_dislike 0.0 in_car 1 on_foot 0
  18. 0709: set_decision_maker 1@ on_event 37 taskID 1022 chance_if_acquaintance respect 0.0 hate 1.0  unk_like_dislike 0.0 unk_like_dislike 0.0 in_car 1 on_foot 0
  19. 0709: set_decision_maker 1@ on_event 36 taskID 1024 chance_if_acquaintance respect 0.0 hate 100.0 unk_like_dislike 0.0 unk_like_dislike 0.0 in_car 0 on_foot 1
  20. 060B: set_actor 0@ decision_maker_to 1@
  21.  
  22. 0631: put_actor 0@ in_group $PLAYER_GROUP 
  23. 077A: set_actor 0@ acquaintance 1 {respect} to_actors_pedtype 0
  24. 077A: set_actor 0@ acquaintance 1 {respect} to_actors_pedtype 8
  25. 077A: set_actor 0@ acquaintance 3 {dislike} to_actors_pedtype 6
  26. 077A: set_actor 0@ acquaintance 4 {hate} to_actors_pedtype 7
  27. 077A: set_actor 0@ acquaintance 4 {hate} to_actors_pedtype 9
  28. 077A: set_actor 0@ acquaintance 4 {hate} to_actors_pedtype 11
  29. 077A: set_actor 0@ acquaintance 4 {hate} to_actors_pedtype 12
  30. 077A: set_actor 0@ acquaintance 4 {hate} to_actors_pedtype 17
  31. while not Actor.Dead(0@)
  32.   wait 1500
  33. end
  34. Actor.RemoveReferences(0@)
  35. 065C: release_decision_maker 1@
  36. 0A93: end_custom_thread

DM для групп

создать групповую модель поведения:

06AE: create_group_decision_maker_type 0 store_to $GDM // see pedstats.dat

Тип 0 - групповое поведение.

Присвоить группе групповую модель поведения:

06AD: set_group $PLAYER_GROUP group_decision_maker_to $GDM

Задать реакцию на событие (аналогично описанию выше, но есть групповые события, например EVENT_LEADER_ENTERED_CAR_AS_DRIVER (54), EVENT_LEADER_EXITED_CAR_AS_DRIVER (55)):

074A: set_group_decision_maker $GDM on_event 54 taskID 1513 chance_if_acquaintance respect 100.0 hate 100.0 unk 100.0 unk 100.0 in_car 1 on_foot 1

Неизвестно:

07E6: unknown_set -1 group_decision_maker $GDM

Сбросить информацию для события:

0749: reset_group_decision_maker $GDM event 54

Связь DM и .PED, .GRP файлов

По умолчанию модель поведения всех педов берётся из папки data\Decision\Allowed из *.ped файлов.

При создании модели поведения в скриптах за основу берётся тоже *.ped файл из папки data\Decision\Allowed.

В опкоде
060A: create_decision_maker_type 0 store_to $DM
параметр определяет *.ped файл, который берётся за основу.
  • 0 - m_empty.ped
  • 1 - m_norm.ped
  • 2 - m_tough.ped
  • 3 - m_weak.ped
  • 4 - m_steal.ped

Модель группового поведения хранится в *.grp файлах.

В опкоде
06AE: create_group_decision_maker_type 0 store_to $GDM/source> параметр определяет *.grp фал, которы берётся за осноу. Параметр может иметь только одно значение:
 
* 0 - MISSION.grp
 
Познакомимся подробнее с форматом *.ped и *.grp фало.
 
Параметры разделяются запятыми, после последнео параметра также идёт запятая. На одно строчке перечисляются реакции на определённое событие.
 
На перо строчке написано "data values2:".
 
Перы параметр - событие, на которое реаирует актёр, затем идёт целое число (назначение неизестно, седа рано 4), затем шесть рупп параметро. В каждо руппе параметро перы параметр - код задачи, четыре дробных числа, определяющих шансы при различных отношениях к объекту события, потом идут да флаа, перы - реакция работает, если пед  машине, торо - реакция работает, если пед пешком (эти параметры  точности копируют опкод 0709), затем идут шесть целых чисел, назначение которых неизестно. Группы дру от друа ничем не разделяются.
 
''Примечание'': Формат *.ped и *.grp фало  папке data\Decision и  папке data\Decision\Allowed различаются. Ира использует некоторые фалы из папки data\Decision\Allowed.
 
==Ссылки==
[http://public.sannybuilder.com/gtasa_exe_idb/gta-objects-20080711.txt gta-objects-20080711.txt] - txt-файл, в конце которого есть дерево классов CTask. Имеется кроме всего прочего ID каждой задачи (в шестнадцатеричной форме).
 
[[Катеория:Скриптин]][[Катеория:Скрипты]][[Катеория:Туториалы]][[Катеория:Документация]][[Катеория:Форматы фало]][[Катеория:GTA SA]]