Работа с ACDC — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Работа с ACDC — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
(орфография)
Строка 1: Строка 1:
Сегодня мы разберем основу работы с ACDC. Но... Для начала небольшое отступление. Вы зададите вопрос, почему же лучше работать с ACDC нежели чем с xrSpawner? Отвечаю: xrSpawner при всех его преимуществах имеет множество более значительных минусов. Во первых, xrSpawner не определяет не game_vertex, ни level_vertex. А также он измеряет только позицию. Я думаю работающие с xrSpawner, замечали что, порой обьекты которые они спаунят спаунером не всегда появляются на месте. Или вообще не появляются. Потому что повторяю xrSpawner не определяет вертексы т.е. точная позиция и распределение по АИ-сетке. Итак начнём работу!
+
Сегодня мы разберем основу работы с ACDC. Но... для начала небольшое отступление.
У нас есть программа ACDC, руки и мозги в голове. Кладём all.spawn в папку utils и жмём на батник "распаковка". Итак all.spawn распакован!Мы там видим файлы alife и way. В файлах alife только обьекты которые спаунятся. А в way только пути. Я думаю с алайфом всё понятно. Разберем way. Пути. Путь это и ест путь. По которому может двигаться живой обьект.Сейчас мы это рассмотрим:
+
Вы зададите вопрос, почему же лучше работать с '''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>
Для начала расщедримся:) Припишем актору в [dont_spawn_character_supplies]
+
Для начала расщедримся:)
  
<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
Получиться что мы подарим Меченому при начале игры Винторез, 600 патронов к нему, пистолет USP и 420 патронов к нему.
+
</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
В строчке money напишем любое число. Тока астрономические не надо(не проверял).
+
</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
Тепер игра начнётся в здании блокпоста на 2 этаже:).
+
</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) на какую точку после этой перейдёт НПС. (тут он будет ходить туда сюда, если не написать линкс то он остановиться на месте)</pre>
+
p1:links = p0(1)   ;на какую точку после этой перейдёт НПС (тут он будет ходить туда-сюда, если не написать линкс, то он остановится
Всё! Вгоняем в way  эти строки(тока мои коментарии  писать не надо)
+
на месте.)
Всё готово можно тестить изменения:_))))). Как снимать корзинаты и работать с PI расскажу в следующей статье. Теперь жмём на батник запаковка  и усё! Пихаем all.spawn в игру. Только лучше ещё поправить отношения актора к военным и наоборот в лучшую сторону. Чтобы непись сразу пошёл по своему пути. Он удет ходить от казармы до дома(там поймёте)
+
</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

Другие места
LANGUAGE