Спавн через скрипт(облегченная версия).
Wiki-версия статьи на эту тему(с сайта S.T.A.L.K.E.R Inside) излагает все основные принципы спавна через скрипт,
но, как я убедился, посещая некоторые форумы, многие новички просто не понимают сам
принцип скрипт-спана, поэтому для них я и изготовил данную статью.
Итак, выберем в качестве подопытного кролика Гордона Фримена
1. Скрипт спавна.
Заранее оговорюсь:скрипт не мой. Но я попытаюсь максимально разобрать секции, необходимые для редактирования.
function spawn_novice ()
spawn_name = "mil_stalker_freeman" --'
end
function spawn_test ()
local xpos, ypos, zpos, spawn_pos
xpos = -25,69036
ypos = -4,117243
zpos = -27,08046
spawn_pos = vector():set(
xpos,
ypos,
zpos
)
spawn_novice ()
local obj=alife():create(spawn_name,
spawn_pos,
db.actor:level_vertex_id() ,
db.actor:game_vertex_id() )
-- level.map_add_object_spot_ser(obj.id, "alife_presentation_stalker", spawn_name )
-- dbglog('SPAWN_COMPLETE'..' '..'Name'..' '..tostring(spawn_name))
end
Итак, секции:
function spawn_test () - функция спавна, вызывается из диалога(об этом ниже).
xpos = -25,69036 - координаты спавна. Они получаются несколькими способами(об этом ниже)
ypos = -4,117243
zpos = -27,08046
spawn_name = "mil_stalker_freeman" - секция сталкера из spawn_sections.ltx
db.actor:level_vertex_id() - вертексы. Подробнее о вертексах можно прочитать в вышеуказанной статье.
db.actor:game_vertex_id() Внимание! Вертексы отвечают за глобальное местонахождение объекта, поэтому, спавня НПС на другой карте(не на той, на которой находится Актор) - изучите эту тему внимательнее.
-- level.map_add_object_spot_ser(obj.id, "alife_presentation_stalker", spawn_name )
-- dbglog('SPAWN_COMPLETE'..' '..'Name'..' '..tostring(spawn_name)) - тестовые строки. Раскоментировав их, мы получим на заспавненном НПС его координаты.
Со скриптом разобрались. Теперь создадим файл-скрипт spawn_freeman.script и скопируем в него вышеуказанный пример.
2. Диалоги и профиль.
Как мы знаем, сам по себе скрипт погоды не сделает, для него нужен вызов(запуск) через диалог и секции в spawn_sections.ltx С них и начнем.
Открываем этот файл и после строчки
;----------Miltary-----------
добавляем следующую секцию:
[mil_stalker_freeman]:stalker
$spawn = "respawn\mil_stalker_freeman"
character_profile = mil_stalker_freeman
spec_rank = novice
community = stalker
Разберем ее:
[mil_stalker_freeman] - секция, которую мы указываем в скрипте,
$spawn = "respawn\mil_stalker_freeman" - ссылка на спавн(после слеша прописываем название секции)
character_profile = mil_stalker_freeman - профиль персонажа, указывается в character_desc_military.xml
spec_rank = novice - ранг НПС (в данн. случае-новичок)
community = stalker - группировка персонажа
Теперь-диалоги. Как правило, скрипт вызывается через диалог строчкой вида <action>name.function</action>,
где name-имя скрипта, function-функция из самого скрипта.
Заставим Фримена спавниться после диалога с часовым у базы Свободы:
<dialog id="mil_bodyguard_dialog">
<phrase_list>
<phrase id="5">
<text>mil_bodyguard_dialog_5</text>
<action>spawn_freeman.spawn_test</action>
<next>6</next>
</phrase>
Думаю, вы сами увидите, где была добавлена строка <action> и какие изменения были в нее внесены
Теперь займемся профилем Фримена. Скопируем в character_desc_military и слегка изменим его секцию:
<!-- ************************ Гордон Фримен *********************** -->
<specific_character id="mil_stalker_freeman" team_default = "1">
<name>ros_freeman_name</name>
<icon>ui_npc_u_green_stalker_7</icon>
<map_icon x="0" y="0"></map_icon>
<bio>ros_freeman_bio</bio>
<class>mil_stalker_freeman</class>
<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>
<money min="200" max="6000" infinitive="0"></money>
<rank>201</rank>
<reputation>90</reputation>
<visual>actors\novice\green_stalker_7</visual>
<snd_config>characters_voice\human_01\newbie\</snd_config>
<crouch_type>0</crouch_type>
<supplies>
[spawn] \n
wpn_desert_eagle \n
ammo_11.43x23_fmj \n
</supplies>
#include "gameplay\character_criticals_3.xml"
#include "gameplay\character_dialogs.xml"
<start_dialog>mil_freeman_start</start_dialog>
<actor_dialog>mil_freeman_quest_start</actor_dialog>
<actor_dialog>mil_freeman_quest_finish</actor_dialog>
</specific_character>
Примечание: детальную информацию по этой теме вы найдете в статье "Редактирование НПС", секция с диалогами создана мной для квеста от Фримена,
без ее правки игра вылетит.
<specific_character id="mil_stalker_freeman" team_default = "1"> <class>mil_stalker_freeman</class> - строчки, в которые необходимо прописать
id и класс, указанные в spawn_sections.ltx
3. Координаты.
Существует 2 сравнительно точных способа получения координат, я опишу оба.
1 способ. Консоль.
Вводим в консоль 2 команды - rs_stats 1 и demo_record 1 для вывода информации и полета. "Летим" в место спавна, распологаем камеру в точке спавна
(на уровне земли, иначе Фримен провалится) и записываем координаты из Camera Position
2 способ. xrSpawner.
Этот способ наиболее точный. Для него:
*делаем сохранение на месте спавна
*запускаем xrSpawner
*грузим ЛЮБОЙ all.spawn и наш сейв
*тыкаем в произвольную строчку в "Имя объекта"
*нажимаем кнопку "Получить коор. из сохранения"
*в строчках "координаты x/y/z значения меняются, записываем и используем их
Собираем мод и тестируем. Приятной игры.
Все!