[81]
; cse_abstract properties
section_name = stalker
name = esc_soldier_death
position = -150.2001953125,-29.2462558746338,-228.743957519531
direction = -150.2001953125,-29.2462558746338,-228.743957519531
; cse_alife_trader_abstract properties
money = 5000
character_profile = esc_sold_dead
; cse_alife_object properties
game_vertex_id = 98
distance = 16.1000003814697
level_vertex_id = 339597
object_flags = 0xffffffbf
custom_data = <<END
[smart_terrains]
none=true
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 = 0
upd:timestamp = 0
upd:creature_flags = 0
upd:position = -150.2001953125,-29.2462558746338,-228.743957519531
upd:o_model = 0
upd:o_torso = -150.2001953125,-29.2462558746338,-228.743957519531
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Английские буквы..цифры...
. Сейчас всё будет понятней:
[81] порядковый номер обьекта(не должен повторяться)
; cse_abstract properties (имя секции в acdc.pl или функции я не кодер, так шо хз но ето нам и не надо)
section_name = stalker (системное имя которое задано acdc.pl=> функция package alife_object;)
name = esc_soldier_death (свободное имя на английском языке)
position = -150.2001953125,-29.2462558746338,-228.743957519531 (позиция типа x,y,z, на уровне)
direction = -150.2001953125,-29.2462558746338,-228.743957519531 (направление взгляда x,y,z, на уровне)
; cse_alife_trader_abstract properties (пропорции для торговли)
money = 5000 (кол-во деньжат на старте игры)
character_profile = esc_sold_dead (профиль сталкера из xml,ltx файлов смотри урок по созданию нового НПС)
; cse_alife_object properties (опции обьекта)
game_vertex_id = 98 (вертекс уровня, подробно будет разобрано ниже)
distance = 16.1000003814697 (хз чё за фигня, в переходах например как радиус действия)
level_vertex_id = 339597 (всё понятно, вертекс на уровне )
object_flags = 0xffffffbf (флаг обьекта, типа offset для чтения движком и респавнером)
custom_data = <<END (далее идёт логика, эта строчка может отсутствовать)
[smart_terrains]
none=true {далее логика, смотреть в другой статье
END (завершение логики)
; cse_visual properties (Опция визуализации)
; cse_alife_creature_abstract properties (опции создания обьекта, если дословно)
g_team = 0 (команда НПС, все сталкеры 0)
g_squad = 1 (...)
g_group = 2 (группа, чё то около движка
)
health = 1 (количество жизней при старте НПС)
dynamic_out_restrictions = (...)
dynamic_in_restrictions = (...)
upd:health = 0 (...)
upd:timestamp = 0 (...)
upd:creature_flags = 0 (...)
upd:position = -150.2001953125,-29.2462558746338,-228.743957519531 (дополнительная позиция, лично я её учитываю при спавне)
upd:o_model = 0
upd:o_torso = -150.2001953125,-29.2462558746338,-228.743957519531 (кординаты те же что и в дирекции)
upd:g_team = 0 (...)
upd:g_squad = 1 (...)
upd:g_group = 2 (...)кое что: upd, скорее всего параметры которые не используются, или почти не используются
cse_alife_monster_abstract properties
upd:next_game_vertex_id = 31 (работает как гейм_вертекс) upd:prev_game_vertex_id = 15523 (работает как левел вертекс) upd:distance_from_point = 0 (...) значения не менять upd:distance_to_point = 0 (...) значения не менять
cse_alife_human_abstract properties
predicate5 = 2,2,0,1,1 (...) значение не менять predicate4 = 0,2,0,2 (...) значение не менять
cse_ph_skeleton properties (...)
upd:start_dialog = (...)
se_stalker properties (...)
Автора не забываем указать
Участник:Rez@niy Участник:Loxotron
[править]Подробный разбор некоторых секций
game_vertex. Действительно, очень интересная секция. Как известно, можно поставить лишь начальный вертекс уровня и НПС заспавнится там где надо. Но уровни у GSC большие. Для удобства движок делит уровень на секции (сектора, поля, полигоны, называйте как хотите). Каждому уровню присвоен свой начальный game_vertex и исходя из него он делится на части.
[править]Разбор некоторых "штук" и закидонов acdc.pl
Разберём некоторые секции acdc.pl package alife_object; содержит:
actor => 'cse_alife_creature_actor',
graph_point => 'cse_alife_graph_point',
stalker => 'se_stalker',
stalker_monolith => 'se_stalker',
stalker_zombied => 'se_stalker',
stalker_trader => 'se_stalker',
stalker_sakharov => 'se_stalker',
m_barman => 'se_stalker',
m_osoznanie => 'se_stalker',
mil_killer_respawn_1 => 'se_stalker',
m_trader => 'cse_alife_trader',
mil_freedom_respawn_1 => 'se_stalker',
mil_freedom_respawn_3 => 'se_stalker',
dolg_regular => 'se_stalker',
m_bloodsucker_e => 'se_monster',
bloodsucker_weak => 'se_monster',
bloodsucker_normal => 'se_monster',
bloodsucker_strong => 'se_monster',
bloodsucker_arena => 'se_monster',
bloodsucker_mil => 'se_monster',
m_boar_e => 'se_monster',
boar_weak => 'se_monster',
boar_normal => 'se_monster',
boar_strong => 'se_monster',
m_burer_e => 'se_monster',
burer_arena => 'se_monster',
m_burer_normal => 'se_monster',
m_burer_normal_black => 'se_monster',
burer_indoor => 'se_monster',
burer_outdoor => 'se_monster',
m_cat_e => 'se_monster',
cat_weak => 'se_monster',
cat_normal => 'se_monster',
cat_strong => 'se_monster',
m_chimera_e => 'se_monster',
chimera_weak => 'se_monster',
chimera_normal => 'se_monster',
chimera_strong => 'se_monster',
m_controller_e => 'se_monster',
m_controller_normal => 'se_monster',
m_controller_normal_fat => 'se_monster',
m_controller_old => 'se_monster',
m_controller_old_fat => 'se_monster',
controller_tubeman => 'se_monster',
m_crow => 'cse_alife_creature_crow',
m_dog_e => 'se_monster',
dog_weak => 'se_monster',
dog_normal => 'se_monster',
dog_strong => 'se_monster',
m_flesh_e => 'se_monster',
flesh_weak => 'se_monster',
flesh_normal => 'se_monster',
flesh_strong => 'se_monster',
m_fracture_e => 'se_monster',
fracture_normal => 'se_monster',
fracture_strong => 'se_monster',
m_gigant_e => 'se_monster',
gigant_normal => 'se_monster',
gigant_strong => 'se_monster',
m_phantom => 'cse_alife_creature_phantom',
m_poltergeist_e => 'se_monster',
m_poltergeist_normal => 'se_monster',
m_poltergeist_normal_tele => 'se_monster',
m_poltergeist_tele_outdoor => 'se_monster',
m_poltergeist_normal_flame => 'se_monster',
m_poltergeist_strong_flame => 'se_monster',
m_pseudodog_e => 'se_monster',
pseudodog_weak => 'se_monster',
pseudodog_normal => 'se_monster',
pseudodog_strong => 'se_monster',
pseudodog_arena => 'se_monster',
psy_dog => 'se_monster',
psy_dog_phantom => 'se_monster', # cse_alife_psy_dog_phantom really
psy_dog_radar => 'se_monster',Теперь по русски.
dodik(класс из dll) => 'se_dodik', (имя скрипта)
Чтобы не переименовывать all.spawn смотрите конец acdc.pl и просто смените формат с all.spawn.new на all.spawn