You are not logged in.
В списке опкодов для San Andreas давно значилась группа опкодов, объединенных словом entity. Данные опкоды имели не совсем ясное предназначение - они что-то создавали, и это что-то каким-то образом влияло на поведение актеров.
Недавно я понял, какое слово должно стоять в этих опкодах вместо условного entity - Decision Maker.
Нижеперечисленные опкоды работают с моделью поведения, которую можно создавать, уничтожать, менять, присваивать к актерам и группам актеров.
Для тех, кто не знает, откуда взялось это слово - посмотрите файл pedstats.dat. Последней колонкой в нем стоит Decision Maker, т.е. модель поведения (способ принятия решений или AI).
DM 0 - поведение актера в группе
DM 1 - модель поведения копа
DM 2 - обычная модель
DM 3 - храброе поведение
DM 4 - трусливое поведение
Вот опкоды:
060A: create_decision_maker_type 0 store_to $DM // see pedstats.dat
Создает виртуальную модель поведения c типом 0 и записывает в $DM
060B: set_actor 1@ decision_maker_to $DM
Присваивает актеру данную модель поведения
065C: remove_references_to_decision_maker $DM
модель поведения больше не используется. Возможно нужно назвать release_decision_maker
06AE: create_group_decision_maker_type 0 store_to $GDM // see pedstats.dat
создать групповую модель поведения
06AD: set_group $PLAYER_GROUP group_decision_maker_to $GDM
присвоить группе групповую модель поведения
0708: add_decision_maker $DM event 27
записать в модель поведения событие (смотрите файл PedEvent.txt и тему на форуме). Видимо при возникновении данного события модель будет работать
0749: add_group_decision_maker 42@ event 54
записать в групповую модель поведения событие
0709: set_decision_maker $DM on_event 36 unknown_info 1022 0.0 100.0 0.0 0.0 1 0 // see *.ped files
установить в модели поведения при возникновении события 36 какие-то флаги. Данные флаги имеют точное совпадение с тем, что написано в .ped файлах в папке Decision.
074A: set_group_decision_maker 146@ on_event 54 unknown_info 1513 100.0 100.0 100.0 // see *.ped files
при событии 54 что-то будет происходить с поведением группы
07BC: unknown_set_actor -1 decision_maker 236@ // используется внутри define_action_sequence 07E5: unknown_set 65543 decision_maker $1256 07E6: unknown_set -1 group_decision_maker 268@ 0978: unknown_set 65540 decision_maker $1230
назначение этих опкодов я не понял
Обратите внимание, я НЕ ТЕСТИРОВАЛ данные опкоды. Поэтому те названия, которые я дал могут быть НЕПРАВИЛЬНЫМИ. В некоторых опкодах остались неизвестные флаги (особенно меня интересуют опкоды 0709 и 074A).
Все, кто что-либо знает о данных опкодах, тестировал их, понял назначение - пишите в этой теме.
Offline
В групповой модели поведения используются особые события, например
0749: add_group_decision_maker 42@ event 54 // EVENT_LEADER_ENTERED_CAR_AS_DRIVER 0749: add_group_decision_maker 42@ event 55 // EVENT_LEADER_EXITED_CAR_AS_DRIVER
можно таким образом указать группе, что делать, если лидер (например, CJ) сел в машину или вышел из нее.
Offline
-1 для команды с актёром, говорит о том, что актёр может быть любым (не явно указанным).
07BC: unknown_set_actor -1 decision_maker 236@
Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ
Offline
Есть еще один способ для актеров инициализирующих их модель поведенеия,
я открыл их одновременно с create_entity, или как выразился Seemann Decision Maker
062F: @239 = create_group_type ¦
¦
0 - не реагирует на игрока
1 - реагирует, когда в него стреляют
2 - просто стоит
3 - стоит и разговоривает и жестикулирует руками
4 - стоит и просто болтает не жестикулируя руками
5 - ходит по тротуару
активизируем командой
так
0630: put_actor @102 in_group @239 as_leader - поместить актера в группу лидером
или так
0631: put_actor @102 in_group @239 - поместить актера в группу
И еще один...узнал недавно.
0746=3,set_default_action %1h% for_actors_type %2h%
Он означает что:
какое действие (определено в ped event) - 1 параметр, будет делать актер с типом (Параметр 2), когда УВИДИТ актера с типом (параметр 3)
Last edited by flacs (18-01-2007 19:32)
Offline
Он означает что:
какое действие (определено в ped event) - 1 параметр, будет делать актер с типом (Параметр 2), когда УВИДИТ актера с типом (параметр 3)
не совсем понял насчет pedevent. Вот например:
0746: set_default_action 1 for_actors_pedtype 8 to_actors_pedtype 0
Это значит, что Gang2 будет что-то делать, когда увидит игрока. А что именно, параметр 1? К pedevent это отношения не имеет, по крайней мере к тем событиям, что есть в файле PedEvent. Тут видимо те же самые действия, что ты написал
0 - не реагирует на игрока
1 - реагирует, когда в него стреляют
2 - просто стоит
3 - стоит и разговоривает и жестикулирует руками
4 - стоит и просто болтает не жестикулируя руками
5 - ходит по тротуару
или нет?
Offline
Мне бы очень хотелось разгадать секрет *.ped файлов, тем более что теперь ясно, что они имеют связь с опкодами. Вот например файл COP.PED
16,4,200,0.000000,0.000000,0.000000,100.000000,0,1,-1,0.0,0.0,0.0,0.0,0,0,-1,0.0,0.0,0.0,0.0,0,0,-1,0.0,0.0,0.0,0.0,0,0,
16 - это код события, как в файле PedEvent.txt
4 - (точно неизвестно), кол-во групп команд, которые идут после этого числа. Данный параметр всегда равен 4.
После 4-х идут 4 группы команд или флагов
200,0.000000,0.000000,0.000000,100.000000,0,1, -1,0.0,0.0,0.0,0.0,0,0, -1,0.0,0.0,0.0,0.0,0,0, -1,0.0,0.0,0.0,0.0,0,0,
обратите внимание, когда первым числом стоит -1, все остальное установлено в 0. Это значит, что данная группа не используется.
200 это либо код анимации, либо код действия.
Далее идут 4 числа, от нуля до 255. В оригинальных файлах записаны как флоат, но используются как целые числа.
Сравниваем с
0709: set_decision_maker $5350 on_event 37 unknown_info 1029 0.0 100.0 0.0 0.0 1 1 // see *.ped files
совпадение флагов полное (инт, 4 флоата, 2 флага).
На гтафорумс давно исследовали эти файлы, но ничего нового по сравнению с тем, что я написал там нет:
http://www.gtaforums.com/index.php?showtopic=179930
Появилась такая мысль, что эти 4 группы связаны с 4-мя состояниями отношения (Acquaintance) из файла ped.dat.
Т.е. первая группа флагов, это что делать, если событие 16 вызвано педом, с которым у копа отношение HATE, 2-я группа - Dislike, 3 - Like, 4 - Respect.
Еще скажу, что .ped файлы удобно изучать в Excel'е, если открывать с разделителями ,
Last edited by Seemann (15-02-2007 11:26)
Offline
Еще добавлю, что в опкодах типа
07E5: unknown_set 65543 decision_maker $1256
65543 - это маска. При компиляции данное число будет храниться как 0700 0100. Игра не читает целиком все число 65543, а только 1-й байт (07), у остальных 3-х байтов какое-то иное предназначение.
Еще скажу, что предел для Decision Makers это 6. Данный тип поведения ставится для водителей поездов (может еще кому-то пока не знаю). DM 0-4 написаны в первом посте. 5 - пожарный?.
У семерки какое-то особое значение.
Offline
=>>>>
0746: set_default_action 1 for_actors_pedtype 8 to_actors_pedtype 0Это значит, что Gang2 будет что-то делать, когда увидит игрока. А что именно, параметр 1? К pedevent это отношения не имеет, по крайней мере к тем событиям, что есть в файле PedEvent. Тут видимо те же самые действия, что ты написал
0 - не реагирует на игрока
1 - реагирует, когда в него стреляют
2 - просто стоит
3 - стоит и разговоривает и жестикулирует руками
4 - стоит и просто болтает не жестикулируя руками
5 - ходит по тротуаруили нет?
не совсем, я немного загнался, посчитав что эти пареметры принадлежат файлыу pedevent, т.к. этот опкод тестил бегло, те значения которые я тестил(Параметр 1)..., приведены в сл.
0-ничего
3-Если актер вас заметил как вы пробежали мимо него, то он бежти в ту точку откуда вы начали бежать поворачивается к вам и оглядывается
4 - если актер вас заметил он стреляет(атакует)
Стоит выделить также какие еще значения этого параметра я нашел в оригинале..
0,1,3,4
Что означает такая вот строка я не знаю,
0746: (unknown) 1 24 0
может быть этот параметр не изпользуеться, на игроке(т.к. проверял я этот опкод именно с $PLAYER_ACTOR), а изпользуеться для специфичных ситуаций между актеhами с типом отличным от игрока..
Offline
Что означает такая вот строка я не знаю
хмм, ну тоже самое что и предыдущий вариант: установить для актера с типом 24 (Mission1) действие 1, когда видит игрока (или актера с типом 0 - Player1). В саннике же эти типы все написаны.
Ты decision_makers не тестировал (опкоды из первого поста)?
Offline
flacs wrote:Что означает такая вот строка я не знаю
хмм, ну тоже самое что и предыдущий вариант: установить для актера с типом 24 (Mission1) действие 1, когда видит игрока (или актера с типом 0 - Player1). В саннике же эти типы все написаны.
Ты decision_makers не тестировал (опкоды из первого поста)?
нет не тестировал, но протестирую их т.к. это во многом меняет многое...
Offline
200 это либо код анимации, либо код действия.
я почти на 100% уверен что это число, после которого идут 4 флоата и 2 флага, это код задачи (task), которую в настоящий момент выполняет (должен выполнить) актер.
Вот некоторые коды, которые я нашел в ехе:
254 - climb 701 - enter car 1304 - swim
поэтому в опкоде
0709: set_decision_maker $5350 on_event 37 unknown_info 1029 0.0 100.0 0.0 0.0 1 1 // see *.ped files
1029 тоже будет указывать на некий task, который нужно выполнить при возникновении события 37 (с учетом флагов).
Кто-нибудь, постарайтесь найти соответствия этим числам (254, 701, 1304) в каких-либо файлах игры (файлах анимаций и т.п.) Очень хочется найти какую-нибудь связь.
Offline
Offline
2Capushon:
Почему set? Этож было copy?
эти слова надо вообще убрать, эти fill, set, copy ничего не значат в настоящий момент.
Вот есть ещё одна команда из этой серии:
да, написана в первом посте.
Offline
Немного разобрался в смысле первого параметра в опкодах 060A, 06AE. Эта цифра указывает на файл поведения в папке data\decision\allowed.
060A: create_decision_maker_type 2 store_to 39@ 0 - m_empty.ped 1 - m_norm.ped 2 - m_tough.ped 3 - m_weak.ped 4 - m_steal.ped
1-й параметр может принимать только эти значения.
06AE: create_group_decision_maker_type 0 store_to 42@ 0 - MISSION.grp
1-й параметр может принимать только значение 0.
Offline
Вчера был достигнут определенный прогресс в понимании Decision Maker'ов. В частности опкодов 0708, 0709 и их аналогов для групп.
Опкод 0709 выглядит так:
0709: set_decision_maker 22@ on_event 9 taskID 909 unknown 0.0 0.0 chance 40.0 0.0 0 1 // see *.ped files
эта строка означает, что актер, которому присвоен данный DecisionMaker (22@) при возникновении события 9 (т.е. при получении повреждений, см. файл PedEvents.txt), будет выполнять задачу под номером 909 с вероятностью 40%. Код 909 принадлежит действию "убежать прочь". Т.е. актер, если его ударить, с вероятностью 40% убежит.
Если добавить строку
0709: set_decision_maker 22@ on_event 9 taskID 415 0.0 0.0 chance 60.0 0.0 0 1 // see *.ped files
то актер при получении повреждения (событие 9) с вероятностью 60% присядет и закроет голову руками (task 415).
0709: set_decision_maker 22@ on_event 9 taskID 909 0.0 0.0 chance 40.0 0.0 0 1 // see *.ped files 0709: set_decision_maker 22@ on_event 9 taskID 415 0.0 0.0 chance 60.0 0.0 0 1 // see *.ped files
объединением строк можно добиться различной реакции актера на происходящие события. Отмечу, что по умолчанию актер ведет себя в соответствии с поведением, установленным в файлах *.ped в папке Decision\Allowed.
Опкод 0708 сбрасывает информацию для события:
0708: reset_decision_maker 22@ event 9
после этого актер не будет реагировать на событие 9.
Offline
Вопросик. В папке Allowed есть файлы для пожарника, копа, а для медика почему-то нет.
Или для медика есть события в RANDOM`ax?
И еще. В папке Decision есть Cop.ped и в папке Aloowed тоже есть Cop.ped . Они полнотью одинаковы или у них есть различия? (Я не заметил)
Last edited by Agenzvell (04-10-2007 23:48)
Offline
Вопросик. В папке Allowed есть файлы для пожарника, копа, а для медика почему-то нет.
Или для медика есть события в RANDOM`ax?
Ответ смотри в файле pedstats.dat. Медику присвоен тип DecisionMaker 2, что согласно посту #16, относится к файлу m_tough.ped. Файлы Cop.ped и подобные, кажется, вообще не используются.
Они полнотью одинаковы или у них есть различия?
У них немного разные форматы. Попробуй открыть файл в Excel и включить Формат данных с разделителями - запятыми (Excel предложит при открытии).
Offline
@Seemann -
254 - climb 701 - enter car 1304 - swim
где можно найти полную версию кодов taskID?
Появилась такая мысль, что эти 4 группы связаны с 4-мя состояниями отношения (Acquaintance) из файла ped.dat.
Т.е. первая группа флагов, это что делать, если событие 16 вызвано педом, с которым у копа отношение HATE, 2-я группа - Dislike, 3 - Like, 4 - Respect.
Кто-нибудь узнал, как связаны?
[small][/small]
Offline
@VcSaJen - полная есть только для 4ки.
для SA практически все значения совпадают; за счет этого удалось определить порядка сотни (из ~300).
Проблема в том, что оно у меня сейчас в достаточно нечитаемом виде. Нормальный список составлен для 4ки, с пометками, что не изменилось со времен SA.
Для SA есть только иерархия классов, в которой часть уже нормально названа.
На случай, если есть желание поразгребать авгиевы конюшни, я приаттачил файлик.
Offline
Потестил:
0000: {$I stdconsts.txt} {$CLEO} while true if 0AB0: key_pressed VK_I then 04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset 0.0 3.0 -1.0 if 0@ > 0 then 0708: reset_decision_maker 1@ event 9 065C: release_decision_maker 1@ Actor.DestroyWithFade(0@) end 0@ = Actor.Create(CivMale, #MALE01, 1@, 2@, 3@) Actor.Health(0@) = 500.0 060A: create_decision_maker_type 0 store_to 1@ // decision\allowed\m_.ped files 0708: add_decision_maker 1@ event 9 060B: set_actor 0@ decision_maker_to 1@ 0709: set_decision_maker 1@ on_event EVENT_DAMAGE taskID 909 unknown 0.0 0.0 chance 100.0 0.0 0 1 // see *.ped files wait 350 end wait 0 end
Не работает . Актёр не убегает при повреждении.
@listener - некоторые Task требуют передачи параметров. Значит, такие нельзя использовать в OP 0709?
[small][/small]
Offline
Мне не удалось заставить DM работать. @Seemann - покажи пожалуйста весь скрипт, на котором ты тестировал.
Все, кто что-либо знает о данных опкодах, тестировал их, понял назначение - пишите в этой теме.
Тут я попробовал изменять флаги, первый флаг после TaskID за что-то отвечает.
Я тестировал на событии EVENT_GUN_AIMED_AT, и если тот параметр больше десяти, и если актёр поднимет руки, то он когда опустит руки пойдёт по пешеходным дорогам и через некоторое время остановится. (если меньше то не уйдёт)
[---]
Добавлено:
Вот из оригинального мейна взял код, актёр будет стараться уничтожить выбранные педтипы (кстати 0 - педтип игрока). Но другие действия не работают.
{$I stdconsts.txt} {$CLEO} while true if 0AB0: key_pressed VK_I then 04C4: store_coords_to 2@ 3@ 4@ from_actor $PLAYER_ACTOR with_offset 0.0 3.0 -1.0 if 0@ > 0 then 0708: reset_decision_maker 1@ event EVENT_ACQUAINTANCE_PED_HATE 0708: reset_decision_maker 1@ event EVENT_GUN_AIMED_AT 065C: release_decision_maker 1@ Actor.DestroyWithFade(0@) end 0@ = Actor.Create(CivMale, #MALE01, 2@, 3@, 4@) Actor.Health(0@) = 500 // 060A: create_decision_maker_type 0 store_to 1@ // decision\allowed\m_.ped files // 07E5: unknown_set 65543 decision_maker 1@ 0978: copy_decision_maker 65540 to 1@ // 0709: set_decision_maker 1@ on_event 36 taskID 0x3FE unknown 0.0 100.0 chance 0.0 unknown 0.0 1 0 // 0709: set_decision_maker 1@ on_event 37 taskID 0x3FE unknown 0.0 100.0 chance 0.0 unknown 0.0 1 0 0709: set_decision_maker 1@ on_event EVENT_ACQUAINTANCE_PED_HATE taskID 0x400 unknown 0.0 100.0 chance 0.0 unknown 0.0 0 1 060B: set_actor 0@ decision_maker_to 1@ // 077A: set_actor 0@ acquaintance 4 to_actors_pedtype 4 // 077A: set_actor 0@ acquaintance 4 to_actors_pedtype 5 077A: set_actor 0@ acquaintance 4 to_actors_pedtype PEDTYPE_COP 077A: set_actor 0@ acquaintance 4 to_actors_pedtype PEDTYPE_GANG_BALLAS 077A: set_actor 0@ acquaintance 4 to_actors_pedtype PEDTYPE_GANG_VAGOS 077A: set_actor 0@ acquaintance 4 to_actors_pedtype PEDTYPE_GANG_SFRIFA 077A: set_actor 0@ acquaintance 4 to_actors_pedtype PEDTYPE_GANG_DANANGBOYS 077A: set_actor 0@ acquaintance 4 to_actors_pedtype PEDTYPE_GANG_MAFIA 077A: set_actor 0@ acquaintance 4 to_actors_pedtype PEDTYPE_GANG_Triad 077A: set_actor 0@ acquaintance 4 to_actors_pedtype PEDTYPE_GANG_LosAztecas 0350: set_actor 0@ maintain_position_when_attacked 1 0446: set_actor 0@ immune_to_headshots 0 0568: set_actor 0@ targetable 1 02AB: set_actor 0@ immunities BP 0 FP 0 EP 1 CP 1 MP 0 0223: set_actor 0@ health_to 500 while not #MINIGUN.Available wait 0 #MINIGUN.Load end 01B2: give_actor 0@ weapon WEAPON_MINIGUN ammo 999999 01B9: set_actor 0@ armed_weapon_to WEAPON_MINIGUN Actor.WeaponAccuracy(0@) = 100 #MINIGUN.Destroy wait 350 end Player.WantedLevel($PLAYER_CHAR) = 0 wait 0 end
Last edited by VcSaJen (26-08-2008 08:07)
[small][/small]
Offline
Увы, боюсь что тот скрипт был давно затерт. Но там не было ничего особого: просто создавался актер, создавался DM, назначались события как указано в #16.
Offline
В рамках написания статьи о DM, я узнал, что означают последние два флага .
Предпоследний - реакция работает, если пед в машине
Последний - реакция работает, если пед пешком
Например:
0709: set_decision_maker 1@ on_event 36 taskID 1022 unknown 0.0 100.0 chance 0.0 unknown 0.0 1 0 0709: set_decision_maker 1@ on_event 36 taskID 1024 unknown 0.0 50.0 chance 0.0 unknown 0.0 0 1
тогда если актёр в машине и видит ненавистного человека, то он стреляет в DriveBy (task 1022).
если актёр пешком, то он просто нападает на ненавистного человека (task 1024).
А если сделать так:
0709: set_decision_maker 1@ on_event 36 taskID 1024 unknown 0.0 50.0 chance 0.0 unknown 0.0 1 1
то пед нападёт просто (если в машине, то сначала выйдет и нападёт).
Можно подписать так:
0709: set_decision_maker $DM on_event 36 taskID 1024 unknown 0.0 50.0 chance 0.0 unknown 0.0 in_car 1 on_foot 1
И ещё я думаю, какой-то из float параметров отвечает за необходимый уровень настроения (temper) чтобы исполнить задачу. Только сколько я ни тестировал, не нашёл .
Last edited by VcSaJen (07-01-2009 10:23)
[small][/small]
Offline
@Seemann -
Я узнал ещё подробности.
Я потестил на разных отношениях к игроку на событии EVENT_DAMAGE.
При отношении respect шанс - первый float.
При отношении hate шанс - второй float.
При отношении like и dislike непонятность - всякий раз по-разному, от первого float-параметра до четвёртого.
Подписать следует так:
0709: set_decision_maker 1@ on_event 9 taskID 1000 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
Так что узнаны почти все параметры . Жаль что я опоздал на два года, сейчас все на IV .
[small][/small]
Offline