Статья из M.O.D.S. Август 2013
Добавляем тайник в S.T.A.L.K.E.R. Тень Чернобыля
Всем привет! Наверняка, многие играли в сталкер и хотели что либо изменить, или просто с самого начала игры не мучаться, а найти тайник, где будет лежать пулемет и куча всего-всего. Так вот, сейчас мы попробуем это осуществить, а заодно я объясню вам как это все работает на примере Теней Чернобыля.
Начнем с самого малого- нахождения координат. Для этого нам понадобится чистая версия S.T.A.L.K.E.R. ТЧ и программа S.T.A.L.K.E.R. Position Informer (см. ссылки). Хотя нет, Это будет слишком сложно, давайте все сделаем при автоматизации скриптов (спасибо за способ человеку под ником panzyuza). Откроем файл
ui_main_menu.script из папки
gamedata/scripts. Ищем строку (через SHIFT+F)
self:OnMessageQuitWin(). Как только нашли пропускаем строчку пишем следующее:
elseif dik == DIK_keys.DIK_F4 then
self:OnButtonLogCoordinate()
Примерно должно получиться вот так:
if dik == DIK_keys.DIK_Q then
self:OnMessageQuitWin()
elseif dik == DIK_keys.DIK_F4 then
self:OnButtonLogCoordinate()
end
После, идем в самый самый конец файла и вписываем эти строчки:
function dbglog(fmt,...)
local msg = string.format(fmt, ...)
local msg_no_ws = string.gsub(msg, "%s", "_")
get_console():execute("dbg:" .. msg_no_ws)
get_console():execute("flush")
end
function main_menu:OnButtonLogCoordinate()
local lvid, gvid = db.actor:level_vertex_id(), db.actor:game_vertex_id()
local pos = db.actor:position()
dbglog("("..pos.x..","..pos.y..","..pos.z.."),"..lvid..","..gvid)
end
Все. Готово, сохраняем и запускаем игру. Как только подошли к нужному месту для тайника выходим в меню и жмем F4. Данные сохранятся в
C:\Users\Юзер\Documents\STALKER-SHOC\файл.log.
Смотрим последнюю строчку. Там будет что то типа:
dbg:(-137.06607055664,9.9998416900635,-199.71380615234),101714,629
Так вот, координаты записались в виде
x,y,z,level_vertex,game_vertex.
Приступаем с спавну. Мы будем уже работать со скриптами, так что возьмите себя в руки и готовьтесь. Как я уже писал начинаем кодить. Для повышения вашего образования скажу, что скрипты под сталкер пишутся на языке
Lua, и как я вычитал в "интернетах" синтаксис похож на
Java, хотя как по мне, то он больше похож на дельфи- наверное во мне сидит скептик-паскалист). В любом случае язык довольно простой, но и расслабляться не стоит- функций очень много.
Создадим в папке
gamedata/scripts/ текстовый документ. Я назвал его
mytajnik. Изменим расширение .txt на .script. Да, очень напоминает времена когда кодили под
Counter-Strike 1.6). Кстати, кодировку лучше выбирать
ANSI, и вообще в дальнейших действиях тоже выбирайте ее. Проблем меньше будет.
Введем в созданный файл текст:
function super_puper_tajnik()
-- Ниже координаты
local a = vector()
a.x = -137.066
a.y = -9.999
a.z = -199.713
alife():create("tajnikazi",a,101714,629)
end
Думаю, здесь все понятно что к чему ставится из координат
Кстати, точку после end ставить не нужно)
[IMG]
ninadaplis.png
Начало положено, заполним наш тайник вещами. Для этого создадим в папке
gamedata/config любой файл. Я назвал его
tajnikazi.ltx. Вводим туда то, что нужно спавнить:
[spawn]
wpn_val= 1
medkit = 5
medkit_army=10
vodka=40
Закрываем. В итоге у нас получились один вал, 5 аптечек, 10 армейских аптечек и 40 бутылок водки. Вместо антирада- водяру пить рады) Названия всех предметов можно найти в папке
gamedata/config/misc, в файлах с началом trader- просто названия всего в этой статье вряд ли поместится, да и долго это мне писать
=/.
Теперь пропишем тайник в файл общего спавна. Это
spawn_sections.ltx в папке
gamedata/config/creatures. Введем в самом конце (если есть, в конце, перед строчкой ;#include) текст:
[tajnikazi]:inv_box
visual = equipments\item_rukzak
radius = 1
custom_data = scripts\tajnikazi.ltx
Думаю, кроме
visual ничего объяснять не нужно. А вот визуал- это модель, как будет выглядеть тайник. У нас он в виде рюкзака.
Теперь пропишем в файл общих вещей (devices.ltx в папке gamedata\config\misc) наш рюкзак. Тут уже особо пока в подробности лучше не вдаваться, просто пишите, а в следующих номерах я объясню это).
Вводим:
[inv_box]
GroupControlSection = spawn_group
discovery_dependency =
$spawn = "devices\inventory box"
class = O_INVBOX
cform = skeleton
visual = physics\box\expl_dinamit.ogf
script_binding = bind_physic_object.init
Теперь нужно заспавнить тайник. Сделаем это, после какого нибудь диалога, например после диалога с Кротом на агропроме в файле
gamedata/config/gameplay/dialogs_agroprom.xml после строчек
<text>agr_krot_about_agroprom_120</text>
добавим своё:
<action> mytajnik.super_puper_tajnik</action>
Все, готово. Возможно я и не очень понятно объяснил, но статью уже нужно сдавать. Если что непонятно пишите мне в личку на
mods.tf9.ru или ищите информацию в интернете
^).
Статью писал Az@