скрипты для сталкер тень чернобыля

S.T.A.L.K.E.R.: Shadow of Chernobyl → Файлы

скрипты для сталкер тень чернобыля. stalker shadow of chernobyl vgdb. скрипты для сталкер тень чернобыля фото. скрипты для сталкер тень чернобыля-stalker shadow of chernobyl vgdb. картинка скрипты для сталкер тень чернобыля. картинка stalker shadow of chernobyl vgdb. S.T.A.L.K.E.R.: Shadow of Chernobyl — постапокалиптический шутер с ролевыми элементами и видом от первого лица. События разворачиваются в. Подробнее

S.T.A.L.K.E.R.: Shadow of Chernobyl — постапокалиптический шутер с ролевыми элементами и видом от первого лица. События разворачиваются в. Подробнее

Сборка скриптов для ТЧ S.T.A.L.K.E.R.: Shadow of Chernobyl

скрипты для сталкер тень чернобыля. . скрипты для сталкер тень чернобыля фото. скрипты для сталкер тень чернобыля-. картинка скрипты для сталкер тень чернобыля. картинка . S.T.A.L.K.E.R.: Shadow of Chernobyl — постапокалиптический шутер с ролевыми элементами и видом от первого лица. События разворачиваются в. Подробнее

скрипты для сталкер тень чернобыля. . скрипты для сталкер тень чернобыля фото. скрипты для сталкер тень чернобыля-. картинка скрипты для сталкер тень чернобыля. картинка . S.T.A.L.K.E.R.: Shadow of Chernobyl — постапокалиптический шутер с ролевыми элементами и видом от первого лица. События разворачиваются в. Подробнее

скрипты для сталкер тень чернобыля. 1593641069 cflhhita7 9nrktdef0l8g. скрипты для сталкер тень чернобыля фото. скрипты для сталкер тень чернобыля-1593641069 cflhhita7 9nrktdef0l8g. картинка скрипты для сталкер тень чернобыля. картинка 1593641069 cflhhita7 9nrktdef0l8g. S.T.A.L.K.E.R.: Shadow of Chernobyl — постапокалиптический шутер с ролевыми элементами и видом от первого лица. События разворачиваются в. Подробнее

скрипты для сталкер тень чернобыля. 1593641066 ppbmwozvcrlgrs417pquew. скрипты для сталкер тень чернобыля фото. скрипты для сталкер тень чернобыля-1593641066 ppbmwozvcrlgrs417pquew. картинка скрипты для сталкер тень чернобыля. картинка 1593641066 ppbmwozvcrlgrs417pquew. S.T.A.L.K.E.R.: Shadow of Chernobyl — постапокалиптический шутер с ролевыми элементами и видом от первого лица. События разворачиваются в. Подробнее

Этот мод добавляет новые скрипты в ТЧ:

Выложил скрипты, мало ли кому нужны для сборок, модов или просто так поиграть

0 не понравилось 2 понравилось

скрипты для сталкер тень чернобыля. 1592635744 505390982f6f. скрипты для сталкер тень чернобыля фото. скрипты для сталкер тень чернобыля-1592635744 505390982f6f. картинка скрипты для сталкер тень чернобыля. картинка 1592635744 505390982f6f. S.T.A.L.K.E.R.: Shadow of Chernobyl — постапокалиптический шутер с ролевыми элементами и видом от первого лица. События разворачиваются в. Подробнее

скрипты для сталкер тень чернобыля. 1546815862 1546815792 467. скрипты для сталкер тень чернобыля фото. скрипты для сталкер тень чернобыля-1546815862 1546815792 467. картинка скрипты для сталкер тень чернобыля. картинка 1546815862 1546815792 467. S.T.A.L.K.E.R.: Shadow of Chernobyl — постапокалиптический шутер с ролевыми элементами и видом от первого лица. События разворачиваются в. Подробнее

скрипты для сталкер тень чернобыля. 1583791483 rlauncher. скрипты для сталкер тень чернобыля фото. скрипты для сталкер тень чернобыля-1583791483 rlauncher. картинка скрипты для сталкер тень чернобыля. картинка 1583791483 rlauncher. S.T.A.L.K.E.R.: Shadow of Chernobyl — постапокалиптический шутер с ролевыми элементами и видом от первого лица. События разворачиваются в. Подробнее

скрипты для сталкер тень чернобыля. 1601245982 zzq4bpi4pcohagvedkddla. скрипты для сталкер тень чернобыля фото. скрипты для сталкер тень чернобыля-1601245982 zzq4bpi4pcohagvedkddla. картинка скрипты для сталкер тень чернобыля. картинка 1601245982 zzq4bpi4pcohagvedkddla. S.T.A.L.K.E.R.: Shadow of Chernobyl — постапокалиптический шутер с ролевыми элементами и видом от первого лица. События разворачиваются в. Подробнее

Если вы хотите облегчить прохождение S.T.A.L.K.E.R.: Shadow of Chernobyl (Stalker), то можете воспользоваться нашим файловым архивом. Здесь собраны только проверенные и работоспособные файлы для игр, которые можно скачать бесплатно.

При скачивании файлов нужно обратить внимание на версию игры, для которой он предназначен. Трейнеры для игр, например, не всегда совместимы со всеми версиями игры, так как разработчики, выпуская обновления, могут менять архитектуру игры и принципы работы тех или иных ее механик. Обычно версия, с которой совместим файл, указывается прямо в его названии.

Источник

Скрипты для сталкер тень чернобыля

Любая функция начинается со слов

Обращаю внимание, что все функции вызываются из других скриптов. Допустим нам из одного скрипта, нужно вызвать(запустить функцию в другом) для этого мы пишем
название скрипта . название функции в скрипте (парметр если есть)
my.my_function()

Глобальные можно объявлять вначале скрипта и она будет сохранятся в коде, в памяти процесса (если я правильно понял)
Переменная объявляется только перед функцией и логическими выражениями, где используется переменная и её использует только та функция, перед которой она объявляется (На пальцах перед строкой с вашей функцией). Т.е елси функция простая без логических решений(if, elseif, for и.т.д) То ставим перед функцией, если же есть переменная, которая находится в теле такого логического решения, то она ставится строго перед этим логическим решением!

local helth = db.actor.helth
function my_function()
.
end

function my_function()
if db.actor.psy==0.5 then
db.actor:kill(db.actor)
end
end

Перевод: Если подходит условие то
1 действие
иначе (т.е условие не выполняется)
2 действие
конец тега
Пример:

function my_function()
if db.actor.psy==0.5 then
db.actor:kill(db.actor)
else
db.actor.give_info_portion(«info»)
end
end

Допустим нам нужно проверить несколько условий:
Чтобы они все выполнялись!

Если подходит хоть один элемент.
if (db.actor) or (db.actor.helth==1) or (db.actor.psy ==0.5) then
действие
end

Данный метод заменяет перебор через таблицу. Отличается простотой и потерей производительности.

Тон ничего хорошего не вышло бы. Так как проверялись бы все функции. А в первом варианте до первого попавшегося.

Но правильнее и эстетичнее, сразу писать так.

if (db.actor) then
.
end

Проверкой советую проверять многие элементы, так как в игре они зачастую не существуют в определенные моменты.

if имя скрипта then
.
end

И делайте всегда, потому как, просто удалите этот скрипт из каталога и не надо будет мучаться с переписыванием других скриптов.

if math.random(0,1) then
действие
end
Если выбранное число меньше 1, то срабатывает функция.

if math.random(0,1) then
действие
else
.
end
Добвавляется другое действие.
Советую брать целые числа от 1 до 10 для создания процентного срабатывания, но лучше 0 и 1.

Текстовый.
Допустим вы отправляете сообщение и хотите выбрать рандомный текст.
1) Создается таблица с вашими переменными (Это может быть и секция для спавна, и слово, и любая другая переменная)

for i =1, 5000 do
действие
end

Это цикл, который прокрутнет ваше действие 5000 раз. Переменная i любая буква, число 5000 обозначает количество циклов(сколько раз пройдет ваше действие).

Допустим мы сделали такую функцию

— удаляем объект из игры(Взято из АМК )

function remove( remove_item )
if remove_item

Допустим, идет проверка и если она оканчивается удачно, то функция должна вернуть одну переменную, если нет, то другую.

function my()
if proverka () == true then
.
end
end

function proverka ()
if db.actor then
return true
else
return false
end

Функции вызваются из других скриптов, нужно лишь найти место. Если она вызывается постоянно. То нужно пихать в колбэк на апдет в bind_stalker.script

function actor_binder:update(delta)
object_binder.update(self, delta)

if string.find(command_line(), «-designer») then
return
end

if self.already_jumped==false and jump_level.need_jump==true and (device().frame > self.spawn_frame+2000) then
jump_level.try_to_jump()
self.already_jumped = true
return
end

— Вызов апдейта переноса игрока проводником
if travel_func

— DEBUG slowdown
—slowdown.update()
local time = time_global()
game_stats.update (delta, self.object)
— апдейт погоды
self.weather_manager:update()

— Обновление отключения ввода с клавиатуры.
if self.st.disable_input_time

= nil and
game.get_game_time():diffSec(self.st.disable_input_time) >= self.st.disable_input_idle
then
level.enable_input()
self.st.disable_input_time = nil
end

— обновление пси-антенны
if sr_psy_antenna.psy_antenna then
sr_psy_antenna.psy_antenna:update(delta)
end
—[[
—‘ Вывод сообщения о большой радиации
if self.object.radiation >= 0.7 then
local hud = get_hud()
local custom_static = hud:GetCustomStatic(«cs_radiation_danger»)
if custom_static == nil then
hud:AddCustomStatic(«cs_radiation_danger», true)
hud:GetCustomStatic(«cs_radiation_danger»):wnd():TextControl():SetTextST(«st_radiation_danger»)
end
else
local hud = get_hud()
local custom_static = hud:GetCustomStatic(«cs_radiation_danger»)
if custom_static

if self.bCheckStart then
printf(«SET DEFAULT INFOS»)
if not has_alife_info(«global_dialogs») then
self.object:give_info_portion(«global_dialogs»)
end
if not has_alife_info(«level_changer_icons») then
self.object:give_info_portion(«level_changer_icons»)
end
self.bCheckStart = false

—if self.actor_weapon_on_start == true then
—db.actor:activate_slot(3)
—self.actor_weapon_on_start = false
—end
end
—device().precache_frame== 0 and
if not self.loaded_slot_applied then
self.object:activate_slot(self.loaded_active_slot)
self.loaded_slot_applied = true
end
xr_s.on_actor_update(delta)

= true) then
self.surge_manager:initialize()
self.f_surge_manager_loaded = true
end
if(self.surge_manager.levels_respawn[level.name()]) then
self.surge_manager:respawn_artefacts_and_replace_anomaly_zone()
end
self.surge_manager:update()
end
— Апдейт доступности для симуляции.
simulation_objects.get_sim_obj_registry():update_avaliability(alife():actor())

if not self.loaded then
get_console():execute(«dump_infos»)
self.loaded = true
end
treasure_manager.get_treasure_manager():update()

if not(primary_objects_filled) then
pda.fill_primary_objects()
primary_objects_filled = true
end
pda.fill_sleep_zones()
—СЮДА в САМЫЙ КОНЕЦ
end

В том же скрипте есть колбэки на взятие, потерю, использование предметов. Нужно лишь искать.
Этим вы займетесь сами, или спросите у меня.

В диалогах можно вызывать через тег (без () )

Источник

Информация для создателей скриптов

Информация для создателей скриптов

В каждом скрипте должны быть:

action : reset _ scheme () – вызывается в момент включения схемы другим скриптом ( gulag и т.п.), также вызывается из initialize при включении схемы по GOAP

Вся инициализация должна производиться в reset _ scheme (), а не в initialize ()!

Работа с customdata :

Чтобы не переписывать парсинг заново в каждом скрипте, можно воспользоваться функциями из xr _ utils :

function conf_get_bool(char_ini, section, field, override, object, mandatory)

function conf_get_string(char_ini, section, field, override, object, mandatory)

function conf_get_number(char_ini, section, field, override, object, mandatory)

st.enabled = utils.conf_get_bool(char_ini, «guard», «enabled», enable, object, true)

Описание параметров – в xr _ utils в месте, где определена функция.

1) В _init создается экземпляр movement manager- а:

2) В initialize грузим информацию о путях из их имен:

3) В reset_scheme инициализируем movement manager:

function move_mgr:reset(path_walk, path_walk_info, path_look, path_look_info,

team, mode, move_cb_info)

team – команда для синхронизации нескольких персонажей (произвольная текстовая строка)

mode – таблица, поля которой задают начальный режим перемещения:

move _ cb _ info – таблица, поля которой задают информацию о callback-методе, который будет вызван, если персонаж прибыл в точку, в которой установлено значение ret:

obj – ссылка на объект класса, которому принадлежит функция, или nil, если функция определена вне класса.

func – ссылка на функцию, которая будет вызвана.

Переключение скорости и режима перемещения до прибытия в первый вейпоинт.

Для того, чтобы сменить режим движения до прибытия в первый вейпоинт пути (например, переключиться с ходьбы на бег при каких-то условиях), выполните в своем скрипте в любой момент после reset-а:

// ВНИМАНИЕ – вызывать update_movement_state при last_index

if self.move_mgr.last_index == nil then

self.move_mgr.running = true / false

self.move_mgr.danger = true / false

self.move_mgr.crouch = true / false

Примечание: в большинстве случаев переключать режим перемещения не понадобится. Рекомендуется задавать стартовый режим перемещения с помощью параметра mode функции reset(), а не менять его вышеописанным способом.

Функция-callback может быть как свободной функцией, так и членом класса.

Прототип свободной функции имеет следующий вид:

function my_callback(self, mode, number)

Прототип функции класса :

function class:my_callback(mode, number)

Здесь в качестве первого параметра ( self ) будет передано значение поля obj таблицы move_cb_info, т.е. фактически это объект, которому принадлежит функция-callback.

Параметр mode может быть одним из:

number – значение поля ret.

В коллбеке можно прервать движение персонажа (остановить его, но нежелательно сбрасывать пути) и выполнять свои custom действия (апдейты movement manager-а при этом вызывать не нужно по понятным причинам). Для прерывания нормальной работы схемы с целью вмешательства в перемещение, нужно вернуть значение true из callback-а, после чего перестать вызывать апдейты. Если это не сделать – значения, которые Вы установите персонажу в коллбеке могут быть сбиты схемой сразу же по возврату из Вашего коллбека! Чтобы продолжить затем движение по маршруту, вызовите:

После чего продолжайте вызывать апдейты movement manager-а как обычно.

self.move_mgr.running = true / false

self.move_mgr.danger = true / false

self.move_mgr.crouch = true / false

Если коллбек выполняет задачи, никак не влияющие на перемещение и персонажа в целом (например, просто ставит info portion), то из коллбека нужно вернуть nil или false. Вызов коллбека тогда останется для схемы незамеченным.

Взаимодействие path_walk c path_look:

Прийдя на точку path_walk, где установлена какая-то комбинация флажков, сталкер найдет такую же комбинацию флажков в path_look и посмотрит в эту точку. Если же ни один флажок не установлен, сталкер пойдет дальше не останавливаясь.

Проверка текущего состояния персонажа:

Часто с персонажем должны взаимодействовать другие персонажи, например, follower-ы командира должны знать его состояние.

Движется ли персонаж в данный момент можно узнать, опросив у move_mgr переменную moving.

if self.move_mgr.moving then движется end

При этом, если moving == true, можно узнать подробности о перемещении:

if self.move_mgr.crouch then идет в присяде end

if self.move_mgr.running then бежит end

if self.move_mgr.danger then находится в состоянии danger end

Если moving == false, то :

if self.move_mgr.standing_crouch then сидит end

if self.move_mgr.standing_danger then сидит в состоянии danger end

Задание имен вейпоинтов:

Имя вейпоинта должно иметь следующий вид:

Первое слово является именем и игнорируется парсером. Остальные фразы, разделенные символом ‘|’ будут обработаны.

Если задано имя поля, но не задано значение – автоматически парсер подставит true.

Т.е. не надо писать “ wp 0|r=true| d = true ”, достаточно просто написать “ wp 0|r| d ”.

Внимание – для поддержки зацикленных маршрутов, сталкеры на точке с минимальным n дожидаются сталкеров на точке с максимальным n. Поэтому минимальное количество точек синхронизации для корректной работы схемы должно составлять 3 точки или больше!

s = имя_звуковой_схемы – пробегая через эту точку, сталкер включит указанную звуковую схему. Звук стартует ДО начала поворота и старта анимации. Для того, чтобы звук стартовал синхронно с анимацией – задавайте его в path_look соответствующей точки, а не в path_walk. Если нужно стартовать звук одновременно с ЛЮБОЙ из анимаций в этой точке, можно воспользоваться параметром sa.

sp = с какой вероятностью будет проигран звук (по умолчанию 100)

sa = true – ждать начала анимации в точке, прежде чем стартовать проигрывание звука (по умолчанию false).

sc = true – разрешить проигрывать звуки схемы неоднократно (по умолчанию false).

c = true – дальше перемещаться в присяде (по умолчанию false)

r = true – дальше перемещаться бегом (по умолчанию false)

d = true – перемещаться в состоянии danger (по умолчанию false)

ds = имена_диалогов – имена диалогов, которые разрешено стартовать начиная с этой точки (разрешение действует до следующей точки). Имена задаются в виде текстовой строки, разделенной запятыми: ds=bandits_talk,weather_talk и т.д.

ret = число – сразу же по прибытии в точку вызывает зарегистрированный при инициализации movement manager-а callback с этим числом в качестве второго аргумента.

p = 100 – вероятность, с которой персонаж посмотрит именно в эту точку. Значения p всех возможных точек суммируются, т.е. если у одной точки p = 100, а у другой 300, то персонаж посмотрит в первую с вероятностью 25%! (т.е. 100 из 400).

Рекомендуется задавать p так, чтобы их сумма составляла 100.

По умолчанию у всех точек p = 100.

a = анимация, которую проиграет персонаж, посмотрев в эту точку (по умолчанию idle). Для того, чтобы персонаж стоял в точке без анимации, задайте значение nil : “a= nil ”

c = true – смотреть в точку в присяде (по умолчанию используется значение одноименного поля из path_walk)

d = true – смотреть в точку в состоянии danger (по умолчанию используется значение одноименного поля из path_walk)

att = 1 или 2 – номер атаки (основная, вспомогательная). Можно использовать вместо анимации (например ” a = nil | att =1”), можно вместе с анимацией (”a=стреляем_в_потолок|att=1»).

t = время, которое персонаж будет ждать, играя анимацию или стреляя (по умолчанию 5000). Если требуется ждать бесконечно долго (например, это финальная точка пути), нужно задать t равным “-1”.

sp = с какой вероятностью будет проигран звук (по умолчанию 100)

sl = имя_прожектора – если задано, то при повороте в указанную точку персонаж также повернет и прожектор в неё.

ret = число – после поворота в целевую точку вызывает зарегистрированный при инициализации movement manager-а callback с числом ret в качестве второго аргумента. При этом время ожидания (поле t) игнорируется, т.е. после того как callback вызовет update_movement_state – персонаж сразу же пойдет дальше.

Источник

More Armor Mod v.2

скрипты для сталкер тень чернобыля. 032c757136c4. скрипты для сталкер тень чернобыля фото. скрипты для сталкер тень чернобыля-032c757136c4. картинка скрипты для сталкер тень чернобыля. картинка 032c757136c4. S.T.A.L.K.E.R.: Shadow of Chernobyl — постапокалиптический шутер с ролевыми элементами и видом от первого лица. События разворачиваются в. Подробнее

Название: More Armor Mod v.2

Сборка билд HUD

скрипты для сталкер тень чернобыля. d86365020a54. скрипты для сталкер тень чернобыля фото. скрипты для сталкер тень чернобыля-d86365020a54. картинка скрипты для сталкер тень чернобыля. картинка d86365020a54. S.T.A.L.K.E.R.: Shadow of Chernobyl — постапокалиптический шутер с ролевыми элементами и видом от первого лица. События разворачиваются в. Подробнее

Название: Сборка билд HUD

Сборка билдовских худов на Тень Чернобыля. Присутствуют несколько вариантов худов: 1098 (синий и серый), 1114-1472, 1511-1844, 1865-2232.

скрипты для сталкер тень чернобыля. bb22c4e1deb3. скрипты для сталкер тень чернобыля фото. скрипты для сталкер тень чернобыля-bb22c4e1deb3. картинка скрипты для сталкер тень чернобыля. картинка bb22c4e1deb3. S.T.A.L.K.E.R.: Shadow of Chernobyl — постапокалиптический шутер с ролевыми элементами и видом от первого лица. События разворачиваются в. Подробнее

Переделка ХУДа за авторством DronQ.

Симулятор выживания 2.1

скрипты для сталкер тень чернобыля. 6fe6dbfc7397. скрипты для сталкер тень чернобыля фото. скрипты для сталкер тень чернобыля-6fe6dbfc7397. картинка скрипты для сталкер тень чернобыля. картинка 6fe6dbfc7397. S.T.A.L.K.E.R.: Shadow of Chernobyl — постапокалиптический шутер с ролевыми элементами и видом от первого лица. События разворачиваются в. Подробнее

Название: Симулятор выживания 2.1

Сталкер ТЧ: Симулятор выживания 2.1, неофициальное обновление.
Автор 1.2: DukeKan
Автор 2.1: Ignat.Birulin
Делалось на основе Симулятора выживания 1.2

Новая Анимация Кулаков

скрипты для сталкер тень чернобыля. be5d5cf7f714. скрипты для сталкер тень чернобыля фото. скрипты для сталкер тень чернобыля-be5d5cf7f714. картинка скрипты для сталкер тень чернобыля. картинка be5d5cf7f714. S.T.A.L.K.E.R.: Shadow of Chernobyl — постапокалиптический шутер с ролевыми элементами и видом от первого лица. События разворачиваются в. Подробнее

Название: Новая Анимация Кулаков

Шейдеры из билдов Чистого неба

скрипты для сталкер тень чернобыля. 377f80ae8cea. скрипты для сталкер тень чернобыля фото. скрипты для сталкер тень чернобыля-377f80ae8cea. картинка скрипты для сталкер тень чернобыля. картинка 377f80ae8cea. S.T.A.L.K.E.R.: Shadow of Chernobyl — постапокалиптический шутер с ролевыми элементами и видом от первого лица. События разворачиваются в. Подробнее

Название: Шейдеры из билдов Чистого неба

Шейдеры из билдов Чистого неба (билд 3120 сборка 2007 года).

Эхо Чернобыля 2: Второе дыхание + Спавнер

скрипты для сталкер тень чернобыля. a778b1a5b59c. скрипты для сталкер тень чернобыля фото. скрипты для сталкер тень чернобыля-a778b1a5b59c. картинка скрипты для сталкер тень чернобыля. картинка a778b1a5b59c. S.T.A.L.K.E.R.: Shadow of Chernobyl — постапокалиптический шутер с ролевыми элементами и видом от первого лица. События разворачиваются в. Подробнее

Название: Эхо Чернобыля 2: Второе дыхание + Спавнер

Фриплейно-графическая модификация на платформе Тень Чернобыля 1.0006.

Источник

Спавн через скрипт

В скриптах есть одна единственная функция, отвечающая за спавн объектов:
alife():create(section,position,levelvertex,gamevertex)

Строго говоря, их две: create create_ammo но различия между ними не существенны. Imp 22:45, 23 июля 2007 (EEST)

Дальше сложнее, так как сам толком сформулировать не могу.

Начнем от простого к сложному. На каждом уровне много объектов, все объекты состоят из полигонов, у каждого полигона есть вершины – вертексы.

Соответственно, чтобы заспавнить что-нибудь на другой карте, достаточно указать game_vertex в четвертом параметре Например:
db.actor:game_vertex()

Итак, чтобы, например, заспавнить болт под ногами актора, пишем:
alife():create(«bolt»,db.actor():position(),1,db.actor:game_vertex())

Пример (спавним артефакт Медуза в инвентаре у актора):
alife():create(«af_medusa», db.actor():position(), 1, db.actor:game_vertex(), db.actor:id())

Функция спавна возвращает серверный объект, то есть ни NPC, ни монстра ни что-либо еще.

Что мы делаем? Сверяем ID онлайн объекта с сохраненным ID!

Итак, мы поймали нашего киллера по ID.

Зачем такие сложности? Просто в оффлайне NPC как бы не существует, есть только косвенное упоминание о нем, и, плюс, все эти функции работают именно с объектом типа «NPC», а не с серверными объектами.
Практика (часть 1)

1. Чтобы не повторяться в описании создания нового квеста, просто изучите статью по созданию квестов от Fr3nzy – лучшей статьи на эту тему я просто не видел 🙂 Мы просто свяжем все воедино и научимся спавнить объекты из скрипта.

Почему предпочтительнее делать спавн скриптом, а не через тот же xrSpawner? Программа xrSpawner, при всех своих достоинствах, обладает одним недостатком, а именно – она делает спавн через файл all.spawn, что приводит к:
Невозможности совместить два мода, такой спавн использующих
Необходимости каждый раз начинать новую игру

При спавне через скрипт ситуация иная: в подавляющем большинстве случаев, ранее сохраненные игры будут работать, что не может не радовать 🙂

Итак, определимся с квестом.

Задача: после разговора с Сидоровичем спавним зомби на территории фабрики в первой локации. Для того, чтобы не повредить оригинальный сюжет игры, задание будет выдаваться после прохождения квеста с флешкой Шустрого, так как появись там зомби одновременно с бандитами и Шустрым. я думаю, исход боя предрешен 🙂

Реализация: Постараюсь описать все действия максимально подробно, буквально по шагам. Первым делом запустите игру 🙂

В консоли введите команду:
rs_stats on или rs_stats 1

Тем самым мы включаем вывод информации на экран. Далее вводим еще одну команду:
demo_record 1

Для выхода из режима demo_record нажимаем Esc, в консоли пишем rs_stats off или rs_stats 0 (убираем вывод информации).

Добавим пятую модель.

Для этого в конце файла создадим секцию:
[zombie_ghost]:zombie_strong

Это означает, что наш пятый зомби наследует все параметры zombie_strong, мы добавим лишь визуальное представление.

Пишем дальше:
$spawn = «monsters\zombies\zombie_ghost»
visual = monsters\zombi\zombi_1_ghost

Все. Сохраняем изменения и закрываем файл.

2. Пишем скрипт спавна. В папке gamedata создаем новую папку scripts, в ней создаем новый текстовый документ и называем его esc_zombie.script.

При написании статьи использовался оригинальный скрипт zombie_story.script из horror-mod’а. Концепция спавна перенесена практически без изменений, поэтому на авторство этого способа спавна я никоим образом не претендую 🙂

Итак, открываем наш пустой файл на редактирование, первой строкой объявляем переменную, в которой хранятся наши зомби:
local zombie_types =

Все. Сохраняем и закрываем файл.

Для того, чтобы игра не вылетала после того, как мы добавили новый тип монстров, их нужно добавить в файл xr_statistic.script. Итак, скопируем этот файл из папки игры scripts в нашу папку к файлу esc_zombie.script и откроем на редактирование.

Добавим в local killCountProps к монстрам строчку:
zombie_weak = 1, zombie_normal = 2, zombie_str 3

В local sect_alias строчку:
zombie_weak = «zombie_weak», zombie_normal = «zombie_normal», zombie_str «zombie_strong»

А ниже в monster_classes строчку:
[clsid.zombie_s ] = «zombie»

В функцию getNpcType(npc) добавляем конструкцию:
elseif npc:character_community() == «zombie» then
community = «zombie»

Сохраняем изменения и закрываем файл.

Все будет работать на ура, пока мы не попробуем обыскать убитого зомби. Как только мы это сделаем, игра вылетит с примерно такой ошибкой.
Expression : fatal error
Function : CInifile::r_string
File : D:\xray-svn\xrCore\Xr_ini.cpp
Line : 351
Description :
Arguments : Can’t find variable icon in [zombie_weak]

Все верно – игра не знает какую иконку нам показывать для зомби. Иконки монстров хранятся в файле ui_npc_monster.dds. Здесь есть два варианта:
Если дружите с Фотошопом, отредактировать этот файл (нарисовать, добавить иконки);
Взять готовый из любого мода, естественно, с разрешения авторов мода. Сейчас мы пропустим данный аспект и присвоим нашим зомби иконки контролера 🙂

Вернемся к файлу m_zombie.ltx и в секцию [m_zombie_e]:monster_base впишем параметр
icon = ui_npc_monster_kontroler

Все. Вылетов не будет.

3. Тема данной статьи не предусматривает подробного описания того, как сделать новый диалог. В начале статьи я упомянул источник, где можно найти исчерпывающую информацию по созданию диалогов, могу также привести в пример статью по созданию диалогов от BAC9-FLCL.

Нам нужно просто проверить работоспособность скриптового спавна, поэтому я приведу просто собственно сам измененный диалог из файла dialogs_escape.xml:

escape_trader_talk_info_999
7770
9991
9992
9993
9994
9995
9996

escape_trader_talk_info_99922
9996
9995

escape_trader_talk_info_3121
9996
9995

escape_trader_talk_info_3131
9996
9995

escape_trader_talk_info_41
9996
9995

escape_trader_talk_info_7771
7772
7773

escape_trader_talk_info_7779
9996
9995

escape_trader_talk_info_7777
esc_zombie.zombie_story_1
9996
9995

escape_trader_talk_info_51
9996
9995

И также связанный с ним файл stable_dialogs_escape.xml. В самом начале файла пишем следующее:

Происшествий никаких не было?

Да я как-то не собирался в ту сторону.

Ну, смотри сам, все равно будь осторожен.

Ага. Сходи, проветрись. Потом зайдешь, расскажешь, что там и как.

Здесь проход воспрещён, сталкер.

Все. Можно запускать игру, идти на Кордон, после разговора с Сидоровичем, в зависимости от выбранного Меченным решения, бежим на фабрику и … смотрим сами 🙂
Готовые файлы примера
Spawn Lib

Продолжение следует…
Практика (часть 2)

Файл модели до редактирования

Файл модели после редактирования

На скринах видно, что мы просто изменили для этой модели путь к текстуре. Все. Без использования 3D-редакторов и затраты кучи времени на обработку модели в них, мы получили абсолютно новую (на внешний вид) модель. 🙂

5. Теперь пропишем нашего нового зомби во все файлы, которые мы создали ранее. В файл m_zombie.ltx в самый конец добавляем секцию:
[zombie_old]:zombie_normal
$spawn = «monsters\zombies\zombie_old»
visual = monsters\zombi\zombi_3

в файле esc_zombie.script изменяем массив в первой строке:
local zombie_types = <"zombie_weak", "zombie_normal", "zombie_strong", "zombie_immortal",
«zombie_old», «zombie_ghost»>

В функции spawn_zombies изменяем строку спавна:
alife():create(zombie_types[math.random(6)],new_pos,
db.actor:level_vertex_id(),db.actor:game_vertex_id())

в функции zombie_story_1 меняем число объектов на кратное 6-ти (необязательно):
spawn_zombies( spawn_point, 12 )

Всё. Сохраняем и закрываем.

6. Копируем в папку gamedata\config\gameplay\ файл encyclopedia_mutants.xml, добавляем описание зомби в энциклопедию:

И в связанный с ним файл string_table_enc_mutants.xml в папке gamedata\config\text\rus\ добавляем:

Зомби-привидение отличается от обычного зомби лишь тем, что
воздействие Выжигателя мозгов полностью разрушило не только структуру личности, но и
тело, поэтому зомби-призрак несколько более живуч по сравнению с обычным зомби.

Воздействие Выжигателя мозгов полностью разрушает структуру личности,
оставляя только телесную оболочку.\n\n Побродив немного по Зоне, лишённые разума тела
начинают превращаться в настоящих зомби. Из рефлексов у них остаются лишь самые примитивные,
оружие и экипировка скоро приходят в негодность. В результате зомби становятся собой ни чем
иным, как медлительными полутрупами, которых наличествуют лишь два эффективных раздражителя:
еда и сон. Зомби совершенно неразборчивы в выборе пищи и питья, поэтому их тела буквально
пропитаны радиацией и токсинами. Как правило, эти существа бесцельно бродят по Зоне или,
словно трупы, валяются внутри заброшенных построек. Однако, лишь только зомби почует близкое
присутствие живого человека, он сразу же пытается атаковать. Умудрённые опытом сталкеры
стараются обходить эти неуклюжие опустошённые оболочки.

Копируем сюда же файл stable_statistic_caption.xml и изменяем в нем 3 строчки:

Сохраняем и закрываем.

Вкратце, что описывает файл ui_npc_monster.xml: в нем задаются координаты иконок, расположенных в файле ui_npc_monster.dds, применительно к каждому типу монстров в игре.

Заключительный штрих. Откройте файл m_zombie.ltx и в первой секции замените строку
icon = ui_npc_monster_kontroler

В секцию [zombie_ghost] добавьте строку:
icon = ui_npc_monster_zombieg

Сохраняйте изменения. Всё.

Вот готовые файлы примера. Удачи и спасибо за внимание 🙂
Спавн NPC

Эта часть статьи написана Arhet и создана на примере того, как в SRP Mod были созданы NPC группировки «Грех».

Начнем с character_desc_escape.xml. Описание что значит каждая строка писать не буду, так как все до меня уже сделано.

Тут создадим нового персонажа:

[spawn] \n
wpn_dark_colt1911 \n
ammo_11.43x23_hydro \n
#include «gameplay\character_items.xml» \n
#include «gameplay\character_drugs.xml» \n
#include «gameplay\character_food.xml»

Впишем наш код после какого-нибудь

Теперь идем в npc_profile.xml и туда вгоняем:

Теперь надо заняться spawn_sections.ltx. Скрипт будет «брать NPC» как раз из этого файла. Пишем туда:
[esc_dark_stalker_1]:stalker – имя секции для скрипта..
$spawn = «respawn\esc_dark_stalker_1»
character_profile = esc_dark_stalker_1 – ссылка на описание нашего NPC
spec_rank = regular – спец ранг
community = dark_stalker – группировка.

Теперь берем любой скрипт спавна NPC, вгоняем туда имя секции из spawn_sections.ltx и ву-а-ля.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *