Работа с ACDC — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
(орфография) |
RedPython (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
− | Сегодня мы разберем основу работы с ACDC. Но... | + | Сегодня мы разберем основу работы с ACDC. Но... для начала небольшое отступление. |
− | У нас есть программа ACDC, руки и мозги в голове. Кладём all.spawn в папку utils и жмём на батник "распаковка". Итак all.spawn распакован! | + | Вы зададите вопрос, почему же лучше работать с '''ACDC''', нежели чем с '''xrSpawner'''? Отвечаю: xrSpawner, при всех его преимуществах, имеет множество более значительных минусов. Во первых, xrSpawner не определяет не '''game_vertex''', ни '''level_vertex'''. А также он измеряет только позицию. Я думаю, работающие с xrSpawner замечали, что порой обьекты, которые они спаунят, не всегда появляются на месте. Или вообще не появляются. Потому что - повторяю - xrSpawner не определяет вертексы, т.е. точную позицию и распределение по АИ-сетке. Итак, начнём работу! |
+ | |||
+ | У нас есть программа ACDC, руки и мозги в голове. Кладём '''all.spawn''' в папку '''utils''' и жмём на батник "распаковка". Итак, all.spawn распакован! Видим файлы '''alife_***''' и '''way_***'''. В файлах alife_*** только обьекты, которые спаунятся. А в way_*** только пути. Я думаю с алайфом всё понятно. Разберем way. Пути. Путь это и есть путь. По которому может двигаться живой обьект. Сейчас мы это рассмотрим. | ||
+ | |||
Для начала устроим текстовый беспредел:) | Для начала устроим текстовый беспредел:) | ||
− | Найдём файл alife_l01_escape, а в нём | + | |
− | <pre>[869] | + | Найдём файл '''alife_l01_escape''', а в нём примерно такие строки: |
+ | <pre> | ||
+ | [869] | ||
; cse_abstract properties | ; cse_abstract properties | ||
section_name = actor | section_name = actor | ||
Строка 11: | Строка 16: | ||
direction = 0,0.00895109120756388,0 | direction = 0,0.00895109120756388,0 | ||
s_flags = 0x29 | s_flags = 0x29 | ||
− | |||
[dont_spawn_character_supplies] | [dont_spawn_character_supplies] | ||
Строка 58: | Строка 62: | ||
upd:actor_radiation = 0 | upd:actor_radiation = 0 | ||
upd:actor_weapon = 110 | upd:actor_weapon = 110 | ||
− | upd:num_items = 0</pre> | + | upd:num_items = 0 |
− | + | </pre> | |
− | Для начала расщедримся:) | + | Для начала расщедримся:) |
− | <pre>[spawn] | + | Припишем актору в ''[dont_spawn_character_supplies]'' такие строки: |
+ | <pre> | ||
+ | [spawn] | ||
[dont_spawn_character_supplies] | [dont_spawn_character_supplies] | ||
Строка 72: | Строка 78: | ||
ammo_11.43x23_hydro = 22 | ammo_11.43x23_hydro = 22 | ||
novice_outfit | novice_outfit | ||
− | device_torch</pre> | + | device_torch |
− | + | </pre> | |
+ | |||
+ | Получится, что мы подарим Меченому при начале игры Винторез, 600 патронов к нему, пистолет USP и 420 патронов к нему. | ||
Так. Теперь Меченый у нас будет крутым рэмбо:) | Так. Теперь Меченый у нас будет крутым рэмбо:) | ||
− | Теперь ещё и подарим ему денежек | + | Теперь ещё и подарим ему денежек: |
− | <pre>; cse_alife_trader_abstract properties | + | <pre> |
+ | ; cse_alife_trader_abstract properties | ||
money = 40 | money = 40 | ||
trader_flags = 0 | trader_flags = 0 | ||
− | character_profile = actor</pre> | + | character_profile = actor |
− | В | + | </pre> |
− | Ну теперь Меченый не только рэмбо но и миллионер:). | + | В строке ''money'' напишем любое число. Тока астрономические не надо (не проверял). |
+ | Ну, теперь Меченый не только рэмбо, но и миллионер:). | ||
+ | |||
Теперь займемся кординатами. У нас они такие: | Теперь займемся кординатами. У нас они такие: | ||
− | <pre>position = -139.449829101563,-29.6908683776855,-351.492797851563 | + | <pre> |
− | direction = 0,0.00895109120756388,0</pre> | + | position = -139.449829101563,-29.6908683776855,-351.492797851563 |
+ | direction = 0,0.00895109120756388,0 | ||
+ | </pre> | ||
Это наши позиция и дирекция. | Это наши позиция и дирекция. | ||
− | <pre>; cse_alife_object properties | + | |
− | game_vertex_id = 19 | + | <pre> |
+ | ; cse_alife_object properties | ||
+ | game_vertex_id = 19 ;тот самый вертекс на игре | ||
distance = 0.699999988079071 | distance = 0.699999988079071 | ||
− | level_vertex_id = 111256 | + | level_vertex_id = 111256 ;вертекс на уровне |
object_flags = 0xffffffbf | object_flags = 0xffffffbf | ||
− | custom_data = <<END</pre> | + | custom_data = <<END |
+ | </pre> | ||
+ | |||
А теперь пропишем туда такие кординаты: | А теперь пропишем туда такие кординаты: | ||
− | <pre>position = -167.232299804688,-25.4363708496094,-354.692901611328 | + | <pre> |
+ | position = -167.232299804688,-25.4363708496094,-354.692901611328 | ||
direction = 0,-0.365248799324036,0 | direction = 0,-0.365248799324036,0 | ||
Строка 101: | Строка 119: | ||
level_vertex_id = 82413 | level_vertex_id = 82413 | ||
object_flags = 0xffffffbf | object_flags = 0xffffffbf | ||
− | custom_data = <<END</pre> | + | custom_data = <<END |
− | <pre>upd:health = 1 | + | </pre> |
+ | |||
+ | <pre> | ||
+ | upd:health = 1 | ||
upd:timestamp = 0x75732029 | upd:timestamp = 0x75732029 | ||
upd:creature_flags = 0x70 | upd:creature_flags = 0x70 | ||
Строка 110: | Строка 131: | ||
upd:g_team = 0 | upd:g_team = 0 | ||
upd:g_squad = 0 | upd:g_squad = 0 | ||
− | upd:g_group = 0</pre> | + | upd:g_group = 0 |
− | + | </pre> | |
+ | |||
+ | Теперь игра начнётся в здании блокпоста на 2 этаже:). | ||
С этим мы закончим. | С этим мы закончим. | ||
+ | |||
Теперь создадим нового НПС: | Теперь создадим нового НПС: | ||
− | <pre>[871] | + | <pre> |
+ | [871] | ||
; cse_abstract properties | ; cse_abstract properties | ||
section_name = stalker | section_name = stalker | ||
Строка 174: | Строка 199: | ||
upd:start_dialog = | upd:start_dialog = | ||
− | ; se_stalker properties</pre> | + | ; se_stalker properties |
− | Так вот он наш друг НПС солдат на блокпосте:) | + | </pre> |
− | Тут уже знакомы строки. Позиция, дирекция вертексы... Но есть кое что новое:) | + | |
− | <pre>[logic] | + | Так вот он наш друг НПС - солдат на блокпосте:) |
+ | Тут уже знакомы строки. Позиция, дирекция, вертексы... Но есть кое что новое:) | ||
+ | <pre> | ||
+ | [logic] | ||
active = walker | active = walker | ||
[walker] | [walker] | ||
− | path_walk = hodim_dvor</pre> | + | path_walk = hodim_dvor |
− | Элементарная логика НПС. hodim_dvor- | + | </pre> |
− | Создадим его в файле way_l01_escape. Припишем вот такие строчки | + | |
− | <pre>[hodim_dvor] | + | Элементарная логика НПС. ''hodim_dvor'' - это путь, по которому будет ходить НПС. НПС есть, всё готово. Но путя то у нас нет:) |
+ | Создадим его в файле '''way_l01_escape'''. Припишем вот такие строчки: | ||
+ | <pre> | ||
+ | [hodim_dvor] | ||
points = p0,p1 | points = p0,p1 | ||
p0:name = name00 | p0:name = name00 | ||
Строка 192: | Строка 223: | ||
p0:links = p1(1) | p0:links = p1(1) | ||
− | p1:name = name01 номер точки | + | p1:name = name01 ;номер точки |
p1:position = -132.61611938477,-30.142726898193,-363.87365722656 - только позиция | p1:position = -132.61611938477,-30.142726898193,-363.87365722656 - только позиция | ||
− | p1:game_vertex_id = 19 вертекс на игре | + | p1:game_vertex_id = 19 ;вертекс на игре |
− | p1:level_vertex_id = 118862 вертекс на уровне | + | p1:level_vertex_id = 118862 ;вертекс на уровне |
− | p1:links = p0(1) на какую точку после этой перейдёт НПС | + | p1:links = p0(1) ;на какую точку после этой перейдёт НПС (тут он будет ходить туда-сюда, если не написать линкс, то он остановится |
− | Всё! Вгоняем в | + | на месте.) |
− | Всё готово можно тестить изменения:_))))). Как снимать | + | </pre> |
− | Статью написал [[Rez@niy | + | Всё! Вгоняем в '''way_***''' эти строки (тока мои коментарии писать не надо). |
− | ]] | + | Всё готово, можно тестить изменения :_))))). Как снимать координаты и работать с '''PI''', расскажу в следующей статье. Теперь жмём на батник "запаковка" и усё! Пихаем all.spawn в игру. Только лучше ещё поправить отношения актора к военным и наоборот в лучшую сторону. Чтобы непись сразу пошёл по своему пути. Он будет ходить от казармы до дома (там поймёте). |
+ | |||
+ | ===Автор=== | ||
+ | |||
+ | Статью написал [[Rez@niy]] | ||
[[Категория:Скрипты]] | [[Категория:Скрипты]] |
Версия 18:09, 3 июня 2010
Сегодня мы разберем основу работы с ACDC. Но... для начала небольшое отступление. Вы зададите вопрос, почему же лучше работать с ACDC, нежели чем с xrSpawner? Отвечаю: xrSpawner, при всех его преимуществах, имеет множество более значительных минусов. Во первых, xrSpawner не определяет не game_vertex, ни level_vertex. А также он измеряет только позицию. Я думаю, работающие с xrSpawner замечали, что порой обьекты, которые они спаунят, не всегда появляются на месте. Или вообще не появляются. Потому что - повторяю - xrSpawner не определяет вертексы, т.е. точную позицию и распределение по АИ-сетке. Итак, начнём работу!
У нас есть программа ACDC, руки и мозги в голове. Кладём all.spawn в папку utils и жмём на батник "распаковка". Итак, all.spawn распакован! Видим файлы alife_*** и way_***. В файлах alife_*** только обьекты, которые спаунятся. А в way_*** только пути. Я думаю с алайфом всё понятно. Разберем way. Пути. Путь это и есть путь. По которому может двигаться живой обьект. Сейчас мы это рассмотрим.
Для начала устроим текстовый беспредел:)
Найдём файл alife_l01_escape, а в нём примерно такие строки:
[869] ; cse_abstract properties section_name = actor name = level_prefix_actor_0001 s_rp = 0 position = -139.449829101563,-29.6908683776855,-351.492797851563 direction = 0,0.00895109120756388,0 s_flags = 0x29 [dont_spawn_character_supplies] [spawn] wpn_binoc novice_outfit device_torch END ; cse_visual properties visual_name = actors\hero\stalker_novice ; cse_alife_creature_abstract properties g_team = 0 g_squad = 0 g_group = 0 health = 1 dynamic_out_restrictions = dynamic_in_restrictions = upd:health = 1 upd:timestamp = 0x75732029 upd:creature_flags = 0x70 upd:position = -139.449829101563,-29.6908683776855,-351.492797851563 upd:o_model = 0 upd:o_torso = 0.00895109120756388,0,-0.999959945678711 upd:g_team = 0 upd:g_squad = 0 upd:g_group = 0 ; cse_alife_trader_abstract properties money = 40 trader_flags = 0 character_profile = actor ; cse_ph_skeleton properties ; cse_alife_creature_actor properties upd:actor_state = 0xd20 upd:actor_accel_header = 0 upd:actor_accel_data = 0 upd:actor_velocity_header = 0 upd:actor_velocity_data = 0 upd:actor_radiation = 0 upd:actor_weapon = 110 upd:num_items = 0
Для начала расщедримся:)
Припишем актору в [dont_spawn_character_supplies] такие строки:
[spawn] [dont_spawn_character_supplies] [spawn] wpn_binoc wpn_vintorez ammo_9x39_pab9 = 20 wpn_usp ammo_11.43x23_hydro = 22 novice_outfit device_torch
Получится, что мы подарим Меченому при начале игры Винторез, 600 патронов к нему, пистолет USP и 420 патронов к нему. Так. Теперь Меченый у нас будет крутым рэмбо:) Теперь ещё и подарим ему денежек:
; cse_alife_trader_abstract properties money = 40 trader_flags = 0 character_profile = actor
В строке money напишем любое число. Тока астрономические не надо (не проверял). Ну, теперь Меченый не только рэмбо, но и миллионер:).
Теперь займемся кординатами. У нас они такие:
position = -139.449829101563,-29.6908683776855,-351.492797851563 direction = 0,0.00895109120756388,0
Это наши позиция и дирекция.
; cse_alife_object properties game_vertex_id = 19 ;тот самый вертекс на игре distance = 0.699999988079071 level_vertex_id = 111256 ;вертекс на уровне object_flags = 0xffffffbf custom_data = <<END
А теперь пропишем туда такие кординаты:
position = -167.232299804688,-25.4363708496094,-354.692901611328 direction = 0,-0.365248799324036,0 ; cse_alife_object properties game_vertex_id = 0 distance = 0.699999988079071 level_vertex_id = 82413 object_flags = 0xffffffbf custom_data = <<END
upd:health = 1 upd:timestamp = 0x75732029 upd:creature_flags = 0x70 upd:position = -167.232299804688,-25.4363708496094,-354.692901611328 upd:o_model = 0 upd:o_torso = -0.365248799324036,0,0.930909931659698 upd:g_team = 0 upd:g_squad = 0 upd:g_group = 0
Теперь игра начнётся в здании блокпоста на 2 этаже:). С этим мы закончим.
Теперь создадим нового НПС:
[871] ; cse_abstract properties section_name = stalker name = esc_bridge_soldier1 position = -133.27989196777,-30.146812438965,-372.0263671875 direction = 0.028013030067086,0,0.9996075630188 ; cse_alife_trader_abstract properties money = 5000 character_profile = esc_soldier_regular ; cse_alife_object properties game_vertex_id = 20 distance = 16.1000003814697 level_vertex_id = 118083 object_flags = 0xffffffbf custom_data = <<END [logic] active = walker [walker] path_walk = hodim_dvor END ; cse_visual properties visual_name = actors\soldier\soldier_bandana_3 ; cse_alife_creature_abstract properties g_team = 0 g_squad = 1 g_group = 2 health = 1 dynamic_out_restrictions = dynamic_in_restrictions = upd:health = 1 upd:timestamp = 0 upd:creature_flags = 0 upd:position = -133.27989196777,-30.146812438965,-372.0263671875 upd:o_model = 0 upd:o_torso = 0.028013030067086,0,0.9996075630188 upd:g_team = 0 upd:g_squad = 1 upd:g_group = 2 ; cse_alife_monster_abstract properties upd:next_game_vertex_id = 65535 upd:prev_game_vertex_id = 65535 upd:distance_from_point = 0 upd:distance_to_point = 0 ; cse_alife_human_abstract properties predicate5 = 1,2,2,1,2 predicate4 = 0,1,1,1 ; cse_ph_skeleton properties upd:start_dialog = ; se_stalker properties
Так вот он наш друг НПС - солдат на блокпосте:) Тут уже знакомы строки. Позиция, дирекция, вертексы... Но есть кое что новое:)
[logic] active = walker [walker] path_walk = hodim_dvor
Элементарная логика НПС. hodim_dvor - это путь, по которому будет ходить НПС. НПС есть, всё готово. Но путя то у нас нет:) Создадим его в файле way_l01_escape. Припишем вот такие строчки:
[hodim_dvor] points = p0,p1 p0:name = name00 p0:position = -120.44634246826,-30.15016746521,-363.68786621094 p0:game_vertex_id = 24 p0:level_vertex_id = 132887 p0:links = p1(1) p1:name = name01 ;номер точки p1:position = -132.61611938477,-30.142726898193,-363.87365722656 - только позиция p1:game_vertex_id = 19 ;вертекс на игре p1:level_vertex_id = 118862 ;вертекс на уровне p1:links = p0(1) ;на какую точку после этой перейдёт НПС (тут он будет ходить туда-сюда, если не написать линкс, то он остановится на месте.)
Всё! Вгоняем в way_*** эти строки (тока мои коментарии писать не надо). Всё готово, можно тестить изменения :_))))). Как снимать координаты и работать с PI, расскажу в следующей статье. Теперь жмём на батник "запаковка" и усё! Пихаем all.spawn в игру. Только лучше ещё поправить отношения актора к военным и наоборот в лучшую сторону. Чтобы непись сразу пошёл по своему пути. Он будет ходить от казармы до дома (там поймёте).
Автор
Статью написал Rez@niy