Общие правки игровых файлов Сталкер
Обратите внимание:
- В некоторых модах невозможно изменить их файлы, так как они используют систему "античит", которая скрывает важнейшие файлы для редактирования. Примером таких модов является серия "Гладиатор".
- Также, в некоторых модах игровые файлы запакованы в архивы, которые лучше не трогать, так как процесс их редактирования очень сложен. Примером таких модов является "Упавшая звезда. Честь Наёмника".
Как правильно, установить несколько Сталкеров одной версии, на один компьютер!
Устанавливаем игру, в установщике ни чего не меняем, всё по умолчанию.
Регистрировать или вводить коды, не надо. (Это если установщик попросит.)
За тем, пропатчить игру до нужной версии.
Установить no-DVD, только нужной версии. (Все no-DVD, правильные, без ошибок.)
Скопировать правленый файл: fsgame.ltx (Для каждого Сталкера, это отдельный файл), в папку с игрой и согласиться на замену, этого файла.
После установки правленого файла: fsgame.ltx, при запуске игры, она создаст свою папку: profile, в которой будут: logs, savedgames, screenshots, user.ltx. Эта папка будет находиться в основной папке: S.T.A.L.K.E.R, там же где и bin, и gamedata.
fsgame.ltx для ТЧ - yadi.sk/d/np5Sq9s6ps3cS
fsgame.ltx для ЧН - yadi.sk/d/3AOVs-vZps3cX
fsgame.ltx для ЗП - yadi.sk/d/z6ntkbqRps3ch
С установкой закончили.
Теперь, открываем ту папку, в которую установилась игра.
Для ТЧ - Это (C:\Program Files (x86)\GSC World Publishing\S.T.A.L.K.E.R)
Для ЧН - Это (C:\Program Files (x86)\GSC World Publishing\С.Т.А.Л.К.Е.Р. - Чистое Небо)
Для ЗП - Это (C:\Program Files (x86)\GSC World Publishing\S.T.A.L.K.E.R. - Зов Припяти)
И просто копируем всю папку под названием: S.T.A.L.K.E.R, в любое место.
Можно на диск С:
Можно на диск D:
ну и так далее, в общем, куда душе угодно.
Как всё скопировалось, открываем в скопированной папке: S.T.A.L.K.E.R, папку: bin,
находим в ней файл: XR_3DA.exe, кликаем на него правой клавишей мышки и выбираем пункт: Отправить - Рабочий стол (создать ярлык).
За тем сам ярлык, можно переименовать в название мода.
После всех выполненных действий, установленную по умолчанию игру, можно полностью удалить (Деинсталлировать) из системы, что бы освободить место на Жёстком диске.
ТАКИМ СПОСОБОМ МОЖНО СОЗДАВАТЬ, НЕ ОГРАНИЧЕННОЕ ЧИСЛО СТАЛКЕРОВ, ПРИЧЁМ КАЖДЫЙ СТАЛКЕР, БУДЕТ НЕ ЗАВИСИМЫМ.
!!! ВНИМАНИЕ !!!
Эта информация, касается только Сталкеров ЧН и ЗП, для Сталкера ТЧ, этого делать нельзя !!!
В Сталкерах ЧН и ЗП, при запуске с ярлыка, будет выскакивать ошибка:
Cannot open file "fsgame.ltx" Check your working folder.
Что бы исправить её:
Надо в свойствах ярлыка, на рабочем столе, удалить только слово: bin, из строчки.
Пример: Если вы ставили игру, на диск C:
Для ЗП.
БЫЛО.
"C:\Program Files-GSC World Publishing\С.Т.А.Л.К.Е.Р.-Зов Припяти\bin"
СТАЛО.
"C:\Program Files-GSC World Publishing\С.Т.А.Л.К.Е.Р.-Зов Припяти\"
Для ЧН.
БЫЛО.
"C:\Program Files-GSC World Publishing\С.Т.А.Л.К.Е.Р.-Чистое Небо\bin"
СТАЛО.
"C:\Program Files-GSC World Publishing\С.Т.А.Л.К.Е.Р.-Чистое Небо\"
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
ВНИМАНИЕ: Спойлер!
Заходим в папку со своим модом и идём по пути gamedata\config\creatures. В папке creatures ищем файл actor.ltx, который открываем блокнотом. Далее, в данном файле находим строчку jump_speed и меняем значение после знака равно, например, на число 22. Сохраняем изменения в файле. На этом всё, высота прыжка увеличена.
Внимание: необходимо помнить о том, что не нужно ставить запредельные числовые значения, иначе при приземлении ваш ГГ просто разобьётся. Максимальное число для увеличения прыжка, при котором персонажу не будет нанесено урона для здоровья - 23.
ВНИМАНИЕ: Спойлер!
Заходим в папку с установленным модом и идём по пути gamedata\configs\creatures. В папке creatures находим файл actor.ltx, который открываем блокнотом. В данном файле ищем строчку max_walk_weight и меняем значение после знака равно на любое желаемое значение. Например, на число 100. Сохраняем изменения в файле.
Теперь необходимо зайти в файл system.ltx, который находится в gamedata\configs. В этом файле ищем строчку max_weight и меняем значение после знака равно ВНИМАНИЕ! на то же число, которое ставили в строчке max_walk_weight файла actor.ltx. В моём случае это число 100. Сохраняем изменения и в этом файле.
На этом с увеличением переносимого веса закончено.
Немного теории: параметр max_walk_weight в файле actor.ltx показывает максимальный переносимый вес, а параметр max_weight, находящийся в файле system.ltx, показывает после какого предела веса у ГГ будет расходоваться энергии больше, чем обычно.
ВНИМАНИЕ: Спойлер!
Заходим в папку с установленным модом и идём по пути gamedata\config\creatures. В папке creatures ищем файл actor.ltx, который открываем блокнотом. Далее, ищем в этом файле такие блоки:[actor_immunities_gd_novice] burn_immunity = 0.3 ;0.45 strike_immunity = 0.3 ;0.45 shock_immunity = 0.3 ;0.45 wound_immunity = 0.05 ;0.45 radiation_immunity = 0.3 ;0.45 telepatic_immunity = 0.3 ;0.45 chemical_burn_immunity = 0.3 ;0.45 explosion_immunity = 0.05 ;0.45 fire_wound_immunity = 0.15[actor_immunities_gd_stalker] burn_immunity = 0.7 strike_immunity = 0.5 shock_immunity = 0.7 wound_immunity = 0.15 radiation_immunity = 0.7 telepatic_immunity = 0.7 chemical_burn_immunity = 0.7 explosion_immunity = 0.15 fire_wound_immunity = 0.5 ;0.65[actor_immunities_gd_veteran] burn_immunity = 0.85 strike_immunity = 0.75 shock_immunity = 0.85 wound_immunity = 0.5 radiation_immunity = 0.85 telepatic_immunity = 0.85 chemical_burn_immunity = 0.85 explosion_immunity = 0.5 fire_wound_immunity = 0.75Шапки этих блоков означают следующее:[actor_immunities_gd_master] burn_immunity = 1.0 strike_immunity = 1.0 shock_immunity = 1.0 wound_immunity = 0.75 radiation_immunity = 1.0 telepatic_immunity = 1.0 chemical_burn_immunity = 1.0 explosion_immunity = 1.0 fire_wound_immunity = 1.0Меняем блок под той шапкой, на каком уровне сложности играем. Например, уровень сложности у нас "Сталкер". Редактируем следующий блок:1. [actor_immunities_gd_novice] - уровень сложности "Новичёк" 2. [actor_immunities_gd_stalker] - уровень сложности "Сталкер" 3. [actor_immunities_gd_veteran] - уровень сложности "Ветеран" 4. [actor_immunities_gd_master] - уровень сложности "Мастер"Редактируем следующим образом: после знака равно каждого параметра ставим 0.0 - и наш ГГ бессмертен.[actor_immunities_gd_stalker] burn_immunity = 0.7 strike_immunity = 0.5 shock_immunity = 0.7 wound_immunity = 0.15 radiation_immunity = 0.7 telepatic_immunity = 0.7 chemical_burn_immunity = 0.7 explosion_immunity = 0.15 fire_wound_immunity = 0.5 ;0.65
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Мне кажется многие задавались вопросом "Как же создать худ маски"? Немного пораздумав, я создал функцию, которая крепит текстуру к определенному костюму.
Опытным модмейкерам может показаться моя функция усложненной, но главное, что все работает и не вылетает!
[править] Практика
[править] Работа со скриптами
Первым делом в директории gamedata\scripts создайте файл с названием xr_mask.script
Открываем его пишем:
function hud_gas()
local slot_stalker = db.actor:item_in_slot(6)
local object_1 = db.actor:object("stalker_outfit")
local slot_killer = db.actor:item_in_slot(6)
local object_2 = db.actor:object("killer_outfit")
if slot_stalker and slot_stalker:section() == "stalker_outfit" and object_1 ~= nil or
slot_killer and slot_killer:section() == "killer_outfit" and object_2 ~= nil then
local hud = get_hud()
local custom_static = hud:GetCustomStatic("hud_gas")
if custom_static == nil then
hud:AddCustomStatic("hud_gas", true)
end
else
local hud = get_hud()
local custom_static = hud:GetCustomStatic("hud_gas")
if custom_static ~= nil then
hud:RemoveCustomStatic("hud_gas", false)
end
end
end
Теперь поясню:
function hud_gas() -- функция
local slot_stalker = db.actor:item_in_slot(6) -- переменная костюма
local object_1 = db.actor:object("stalker_outfit") -- переменная объекта
local slot_killer = db.actor:item_in_slot(6) -- переменная костюма
local object_2 = db.actor:object("killer_outfit") -- переменная объекта
if slot_stalker and slot_stalker:section() == "stalker_outfit" and object_1 ~= nil or
slot_killer and slot_killer:section() == "killer_outfit" and object_2 ~= nil then -- проверяем надет ли костюм сталкера\наемника
local hud = get_hud() -- худ
local custom_static = hud:GetCustomStatic("hud_gas")
if custom_static == nil then -- если худа нет, выдаем, если одет костюм
hud:AddCustomStatic("hud_gas", true)
end
else
local hud = get_hud()
local custom_static = hud:GetCustomStatic("hud_gas")
if custom_static ~= nil then -- если худ есть, убираем при смене костюма
hud:RemoveCustomStatic("hud_gas", false)
end
end
end
Теперь зайдем в bind_stalker.script, который находится в gamedata\scripts, найдем функцию: function actor_binder:update(delta) и после пишем: xr_mask.hud_gas() в итоге:
function actor_binder:update(delta)
xr_mask.hud_gas()
object_binder.update(self, delta)
local time = time_global()
game_stats.update (delta, self.object)
[править] Работа с XML - описателем
Итак, заходим в директорию gamedata\config\ui, находим файл с названием ui_custom_msgs, открываем его и в самом конце перед строкой: </header> пишем:
<hud_gas x="0" y="0" width="1024" height="768" stretch="1">
<texture>hud\hud_gas</texture>
</hud_gas>
Теперь поясню:
<hud_gas x="0" y="0" width="1024" height="768" stretch="1">
<texture>hud\hud_gas</texture> -- текстура маски. Посмотрите внимательно в скрипте мы указывали '''hud_gas'''
</hud_gas>
[править] Текстура
Теперь заходим в gamedata\textures\ui, находим файл с названием ui_mainmenu.dds. Копируем его, заходим в gamedata\textures\hud вставляем его и переминуем в hud_gas.dds Открываем программой Adobe Photoshop и рисуем подходящую для вас маску.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
[zoom_inertion_effector]
camera_move_epsilon = 0.03 ;разница между двумя векторами направления камера, когда считается что камера двинулась
disp_min = 0.01
speed_min = 0.00001
zoom_aim_disp_k = 1.0 ;коэффициенты соотношения полной дисперсии стрельбы
zoom_aim_speed_k = 0.0025 ;и покачивания прицела
delta_time = 3000 ;время через которое эффектор меняет направление движения (в милисекундах)
у меня лично стоит так:
[zoom_inertion_effector]
camera_move_epsilon = 0.03 ;разница между двумя векторами направления камера, когда считается что камера двинулась
disp_min = 0.02
speed_min = 0.0001
zoom_aim_disp_k = 1.18 ;коэффициенты соотношения полной дисперсии стрельбы
zoom_aim_speed_k = 0.0015 ;и покачивания прицела
delta_time = 1350 ;время через которое эффектор меняет направление движения (в милисекундах)
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
для всех остальных сталкеров - gamedata\configs\misc\trade_generic.ltx
Структура файла
Секция [trader_generic_buy]
Эта секция описывает какие товары торговец будет покупать.
Название предмета = минимальная цена покупки, максимальная цена покупки
Например:
wpn_vintorez = 0.5, 0.7Это значит что торговец купит оружие от 50% полной его стоимости до 70%, т.е. если Винторез стоит 1000, то торговец купит его в диапазоне от 500 до
700 рублей. Диапазон зависит от отношения торговца к Меченому - чем лучше, тем дороже купит
Секция [supplies_start]
Эта секция описывает какие товары у торговца будут вначале.
Название предмета = количество, вероятность появления
Например:
bandage = 5, 1Это значит что у торговеца всегда будут 5 бинтов, с 100 процентной вероятностью появления в магазине.
bandage = 5, 0.6 А тут уже вероятность появления 60%. Т.е. бинты не всегда будут.
Секция [supplies_after_***]
Тоже самое, что в секции [supplies_start], но после выполнения квестов торговца.
Секция [trader_start_sell]
Эта секция описывает за какую цену торговец будет продавать.
Название предмета = минимальная цена продажи, максимальная цена продажиНапример:
wpn_vintorez = 1, 2Это значит что торговец продаст оружие от 100% полной его стоимости до 200%, т.е. если Винторез стоит 1000, то торговец продаст его в диапазоне от
1000 до 2000 рублей. Диапазон зависит от отношения торговца к Меченому - чем лучше, тем дешевле продаст
Секция [trader_after_***_sell]
Тоже самое, что в секции [trader_start_sell], но после выполнения квестов торговца.
деньги торговцев правятся в character_desc_название локации.xml, например, в character_desc_escape.xml такая строка:
<money min="100000" max="100000" infinitive="1"/> (если infinitive="1" - бесконечные деньги)
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Сложность: Легко
Как сделать простой диалог.
1. Открываем, например файл dialogs_escape.xml (gamedata/config/gameplay) и пишем в конец:
Код
<dialog id="test_dialog">
<phrase_list>
<phrase id="0">
<text>test_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>test_dialog_1</text>
</phrase>
</phrase_list>
</dialog>
Это скелет диалога. В нём будут написаны все инфопоршни и actions.
<dialog id="test_dialog"> - это название диалога, которое нужно будет написать НПС.
<phrase id="0"> - номер фразы.
<text>test_dialog_0</text> - это текст фразы.
<next>?</next> - переход к фразе.
2. Теперь нужно написать тексты диалога. Заходим в файл "stable_dialogs_bar.xml" (gamedata/config/text/rus) и пишем в конце:
Код
<string id="test_dialog_0">
<text>Это тэстовый диалог</text>
</string>
<string id="test_dialog_1">
<text>Угу.</text>
</string>
<string id="test_dialog_0"> - это то, на что ссылается скелет диалога.
<text>Это тэстовый диалог</text> - собственно текст.
!!!ВНИМАНИЕ!!!
Все диалоги начинаются со слов Меченого.
3. Теперь нужно прописать этот диалог НПС. Например Бармену.
Открываем файл "character_desc_bar.xml" и находим секцию Бармена. Она идёт самой первой.
После всех
<actor_dialog>???</actor_dialog>
Прописываем свой:
<actor_dialog>test_dialog</actor_dialog>
Часть 2
Сложность:Средне
Как создать диалог посложнее.
Как создать диалог с разными вариантами ответов.
Как создать диалог который исчезнет после прочтения.
1. Открываем, например файл dialogs_escape.xml (gamedata/config/gameplay) и пишем в конец:
Код
<dialog id="test_dialog">
<phrase_list>
<phrase id="0">
<text>test_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>test_dialog_1</text>
<next>2</next>
<next>3</next>
</phrase>
<phrase id="2">
<text>test_dialog_2</text>
</phrase>
<phrase id="3">
<text>test_dialog_3</text>
</phrase>
</phrase_list>
</dialog>
<next>2</next>
и
<next>3</next> это возможные ответы Меченого.
2. Теперь нужно написать тексты диалога. Заходим в файл "stable_dialogs_bar.xml" (gamedata/config/text/rus) и пишем в конце:
Код
<string id="test_dialog_0">
<text>Как дела?</text>
</string>
<string id="test_dialog_1">
<text>Нормально, а у тебя?</text>
</string>
<string id="test_dialog_2">
<text>Нормально</text>
</string>
<string id="test_dialog_3">
<text>Хреново.</text>
</string>
3.Чтобы этот диалог не появлялся, пишем инфопоршень. Например в файле info_l01escape.xml
Пишем:
<info_portion id="test_pogovoril"></info_portion>
4.Дописываем инфопоршень в скелет диалога:
Код
<dialog id="test_dialog">
<dont_has_info>test_pogovoril</dont_has_info>
<phrase_list>
<phrase id="0">
<text>test_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>test_dialog_1</text>
<next>2</next>
<next>3</next>
</phrase>
<phrase id="2">
<text>test_dialog_2</text>
<give_info>test_pogovoril</give_info>
</phrase>
<phrase id="3">
<text>test_dialog_3</text>
<give_info>test_pogovoril</give_info>
</phrase>
</phrase_list>
</dialog>
<dont_has_info>test_pogovoril</dont_has_info> - если ГГ получил инфопоршень, диалог не показывать.
<give_info>test_pogovoril</give_info> - дать ГГ инфопоршень.
Получается, что когда ГГ скажет любую из 2 фраз, диалог больше не появится.
Часть 3
Сложность:Сложно
-Как сделать разные action в диалогах.
1.Создаём обычный диалог:
Код
<dialog id="test_dialog">
<dont_has_info>test_pogovoril</dont_has_info>
<phrase_list>
<phrase id="0">
<text>test_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>test_dialog_1</text>
<next>2</next>
<next>3</next>
<next>4</next>
</phrase>
<phrase id="2">
<text>test_dialog_2</text>
</phrase>
<phrase id="3">
<text>test_dialog_3</text>
</phrase>
<phrase id="4">
<text>test_dialog_4</text>
</phrase>
</phrase_list>
</dialog>
C такими текстами:
Код
<string id="test_dialog_0">
<text>Я тестю функции.</text>
</string>
<string id="test_dialog_1">
<text>Ок, какую?</text>
</string>
<string id="test_dialog_2">
<text>Дать деньги</text>
</string>
<string id="test_dialog_3">
<text>Дать ПМ</text>
</string>
<string id="test_dialog_4">
<text>Заспавнить ПМ</text>
</string>
2.Создаём свой скрипт в папке gamedata/script например test.script и пишем в него 3 функции:
Код
function dat_dengi(first_speaker, second_speaker)
dialogs.relocate_money(second_speaker, 3000, "in")
end
Это функция отдачи денег ГГ. На месте 3000 любое число.
На месте dat_dengi любое название.
Код
function dat_item(first_speaker, second_speaker)
dialogs.relocate_item_section(second_speaker, "wpn_pm", "in")
end
Это функция отдачи предмета ГГ. На месте wpn_pm любой предмет.
На месте dat_item любое название.
Код
function spawn_item_or_monster_or_stalker()
alife():create("wpn_pm",vector():set(pos),lvid,gvid)
end
Это функция спавна чего либо. На месте wpn_pm любой предмет,монстр или сталкер.
На месте (pos),lvid,gvid) любые координаты.
На месте spawn_item_or_monster_or_stalker любое название.
Так же функция может быть одна, но с несколькими действиями.
Например:
Код
function all(first_speaker, second_speaker)
dialogs.relocate_money(second_speaker, 3000, "in")
dialogs.relocate_item_section(second_speaker, "wpn_pm", "in")
alife():create("wpn_pm",vector():set(pos),lvid,gvid)
end
Значит что одновременно ГГ дадут 3000 рублей, ПМ и по заданным координатам заспавнится ПМ.
3.Впишем функции в диалог:
Код
<dialog id="test_dialog">
<phrase_list>
<phrase id="0">
<text>test_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>test_dialog_1</text>
<next>2</next>
<next>3</next>
<next>4</next>
</phrase>
<phrase id="2">
<text>test_dialog_2</text>
<action>test.dat_dengi</action>
</phrase>
<phrase id="3">
<text>test_dialog_3</text>
<action>test.dat_item</action>
</phrase>
<phrase id="4">
<text>test_dialog_4</text>
<action>test.spawn_item_or_monster_or_stalker</action>
</phrase>
</phrase_list>
</dialog>
Это значит что после после фразы
<text>test_dialog_2</text>
ГГ дадут 3000руб.
Это значит что после после фразы
<text>test_dialog_3</text>
ГГ дадут ПМ.
Это значит что после после фразы
<text>test_dialog_3</text>
Заспавнится ПМ.
Часть 4
Сложность: Очень сложно
Cложность: Сложно.
-Как сделать разные precondition в диалогах.
Прекондишоны - это проверки на появление диалога
1.Создаём обычный диалог:
Код
<dialog id="test_dialog">
<phrase_list>
<phrase id="0">
<text>test_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>test_dialog_1</text>
<next>2</next>
<next>3</next>
</phrase>
<phrase id="2">
<text>test_dialog_2</text>
</phrase>
<phrase id="3">
<text>test_dialog_3</text>
</phrase>
</phrase_list>
</dialog>
C такими текстами:
Код
<string id="test_dialog_0">
<text>Тест прекондишонов.</text>
</string>
<string id="test_dialog_1">
<text>Какой?</text>
</string>
<string id="test_dialog_2">
<text>Эта фраза появляется если у ГГ есть ??? рублей.</text>
</string>
<string id="test_dialog_3">
<text>Эта фраза появляется если у ГГ есть ??? предмет.</text>
</string>
2.Создаём свой скрипт в папке gamedata/script например test.script и пишем в него 3
функции-прекондишона:
Код
function has_money_???()
local money = math.floor(200 *
xr_statistic_freeplay.get_freeplay_statistic():get_found_pda_discount())
return db.actor:money()>=money
end
Это функция проверки количества денег ГГ. На месте 200 любое число.
На месте has_money_??? любое название.
Код
function has_item(task, objective)
if db.actor ~= nil then
return db.actor:object("wpn_pm") ~= nil
end
return false
end
Это функция проверки наличия какого либо предмета у ГГ. На месте wpn_pm любой предмет.
На месте has_item любое название.
3.Впишем функции в диалог:
Код
<dialog id="test_dialog">
<phrase_list>
<phrase id="0">
<text>test_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>test_dialog_1</text>
<next>2</next>
<next>3</next>
</phrase>
<phrase id="2">
<text>test_dialog_2</text>
<precondition>test.has_money???</precondition>
</phrase>
<phrase id="3">
<text>test_dialog_3</text>
<precondition>test.has_item</precondition>
</phrase>
</phrase_list>
</dialog>
Это значит что фраза <text>test_dialog_2</text> появится если у ГГ есть 200рублей
Это значит что фраза <text>test_dialog_3</text> появится если у ГГ есть ПМ.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
[af_medusa]:af_base ---Название артефакта
GroupControlSection = spawn_group ---хз
$spawn = "artifacts\moscito medusa" ---спаун
$prefetch = 64 -=-
cform = skeleton =-=Эти три строки не трогать.
class = ARTEFACT -=-
visual = physics\anomaly\artefact_blackdrip.ogf ----визуал артефакта
description = enc_zone_artifact_af-medusa ---описание
inv_name = af-medusa ---имя
inv_name_short = ---имя но короткое,в игре для артов не испоьлзуется
inv_weight = 0.5 ---вес
inv_grid_x = 9 -=-Координаты по оси Х
inv_grid_y = 4 -=-Координаты по оси У
cost = 250 ---цена
jump_height = .5 ---высота прыжка
particles = anomaly2\artefact\artefact_gravi
;подсветка арта
lights_enabled = true
trail_light_color = 2.5, 2.4, 0
trail_light_range = 1.0
;скорости увеличения (уменьшения) --- думаю обьяснять не нужно
health_restore_speed = 0.0
radiation_restore_speed = 0.0007
satiety_restore_speed = 0.0
power_restore_speed = 0.0
bleeding_restore_speed = 0.0
hit_absorbation_sect = af_medusa_absorbation
artefact_activation_seq = af_activation_bold
[af_medusa_absorbation] - а вот здесь загвоздочка.Допустим вы поставили burn_immunity = 2.0. а в игре заметили что она уменьшает на 100 защиту от ожогов.Ставить нужно наоборот,то есть.хочешь чтобы медуза давала 30 пулестойкости из 100-30=70.Ставишь на fire_wound_immunity = 0.70
burn_immunity = 1.0
strike_immunity = 0.97
shock_immunity = 1.0
wound_immunity = 1.0
radiation_immunity = 1.0
telepatic_immunity = 1.0
chemical_burn_immunity = 1.0
explosion_immunity = 1.0
fire_wound_immunity = 1.0
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
;
; ОБЫЧНЫЙ КОСТЮМ ДОЛГА
;
[dolg_outfit]:outfit_base ---Название костюма в документах(в скриптах и ltx файлах)
GroupControlSection = spawn_group ---Этого я не знаю,и лучше не трогать,обычно вылет
discovery_dependency = ---Тоже какая то функция
$spawn = "outfit\dolg_outfit" ---Спаун,то есть,костюм лежащий на земле
;$prefetch = 32 ---ХЗ
class = E_STLK ---класс
cform = skeleton ---НЕ ТРОГАТЬ!
visual = equipments\dolg_suit ---Визуал костюма лежащий на земле
actor_visual = actors\hero\stalker_dolg.ogf ---Визуал НПС,В нашем случае ГГ
ef_equipment_type = 3 ---Опять же ХЗ
inv_name = dolg_outfit_name ---Название костюма
inv_name_short = dolg_outfit_name ---Название костюма(короткое)
description = dolg_outfit_description ---Описание(можно и не прописывать их в string_table,можно писать через кавычки.Ставьте "" и пишите описание костюма.Например: "Костюм долга,хорошая защита." Без кавычек пробелы не буду засчитыватся)
inv_weight = 7.0 ---ВЕС
inv_grid_width = 2 -=Эти четыре строки отвечают за иконку в инвентаре,не одетого костюма
inv_grid_height = 3 -=
inv_grid_x = 12 -=
inv_grid_y = 16 -=
full_icon_name = npc_icon_dolg_outfit ---Название иконки
cost = 15000 ---Цена
slot = 6 ---Слот для костюма.НЕ ТРОГАТЬ!
full_scale_icon = 8,11 ---иконка сталкера в костюме в полный рост
nightvision_sect = effector_nightvision_good ---Прибор ночного видения
immunities_sect = sect_dolg_outfit_immunities ---Название иммунитета,для нового костюма введите свой вместо dolg_outfit
ЭТО ЗАЩИТА КОТОРУЮ ДАЕТ КОСТЮМ
burn_protection = 0.1 = Ожог
strike_protection = 0.1 = Удар
shock_protection = 0.1 = Электрошок
wound_protection = 0.1 = Разрыв
radiation_protection = 0.1 = Радиация
telepatic_protection = 0.1 = Телепатия
chemical_burn_protection = 0.1 = Хим.ожог
explosion_protection = 0.1 = Взрыв
fire_wound_protection = 0.1 = Пулестойкость
additional_inventory_weight = 13 ---Дополнительный переносимый вес
additional_inventory_weight2 = 13 ---Дополнительный переносимый вес второй,но ставьте как на первом
bones_koeff_protection = kombez_antigas_damage ---ХЗ,но если делать костюм со средней защитой ставьте такой.Научу ниже
[sect_dolg_outfit_immunities]
burn_immunity = 0.03 ---коэффициенты иммунитета самого костюма(чем меньше значение,тем медленнее костюм портиться.Если на все поставить 0.0 костюм не будет портиться никогда)
strike_immunity = 0.01
shock_immunity = 0.03
wound_immunity = 0.015
radiation_immunity = 0.00
telepatic_immunity = 0.00
chemical_burn_immunity = 0.03
explosion_immunity = 0.03
fire_wound_immunity = 0.01
Обещал рассказать что такое Бонес коэфф протекшн
bones_koeff_protection = kombez_antigas_damage
Оно отвечает за то,как сильно будет защищать костюм.Если например поставить вместо: kombez_antigas_damage ,вот это: kurtka_mask_damage,то сколько бы ты не ставил защиту,она будет слабой.А если поставить exo_helmet_damage то будет высокая защита.Поставите очень много защиты,вы будете бессмертны,и костюм будет защищать вас очень хорошо(то есть,бывает например,оденешь экзоскелет,и иногда пули попадают и наносят совсем крохотный урон.Вот,если поставить экзо хелмет то такие маленьки уроны будут чаще,а если поставить куртка маск то такие случаи будут редкими.)
КСТАТИ:если вы хотите создать свой документ с костюмами,нужно будет в конфиге outfit в само конце написать
#include "Название вашего документа.ltx"
Например я создал документ с названием nanosuit, я написал вот так.
#include "nanosuit.ltx"
Все,можете приступать к созданию ваших костюмов,при это зная,в каком документе лежат новые костюмы.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Это очень важный метод для модостроителей. Сам лично пользуюсь
Открываем его и в конце пишем вот это:
function main_menu:OnButton_credits_clicked()
local text
local vid
local gvid
local a = vector()
local text
a = db.actor:position()
vid = db.actor:level_vertex_id()
gvid = db.actor:game_vertex_id()
text = "Позиция:\nX= "..a.x.."
\nY= "..a.y.."
\nZ= "..a.z.."
\nlevel_vertex= "..vid.."
\ngame_vertex_id= "..gvid
news_manager.send_tip(db.actor, text, nil, nil, 30000)
end
Закрываем.Заходим в игру.Доходим до нужного места,нажимаем Esc и нажимаем на титры.Но титры не открываются,а будет звук сообщения.Возвращаемся в игру,заходим в ПДА,Журналы.Скриним или пишем на бумажку.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
[postprocess_death]
ppe_file = radiation.ppe
radius_min = 0.5
radius_max = 1.1
[postprocess_flame]
ppe_file = radiation.ppe
radius_min = 0.5
radius_max = 0.8
[postprocess_fuzz]
ppe_file = radiation.ppe
radius_min = 0.5
radius_max = 0.8
[postprocess_gravi]
ppe_file = radiation.ppe
radius_min = 0.3
radius_max = 1.0
[postprocess_electra]
ppe_file = radiation.ppe
radius_min = 0.5
radius_max = 0.9
[mosquito_bald]
ppe_file = radiation.ppe
radius_min = 0.2
radius_max = 2.7
вставьте
[postprocess_death]
ppe_file = alcohol.ppe
radius_min = 0.5
radius_max = 1.1
[postprocess_flame]
ppe_file = alcohol.ppe
radius_min = 0.5
radius_max = 0.8
[postprocess_fuzz]
ppe_file = alcohol.ppe
radius_min = 0.5
radius_max = 0.8
[postprocess_gravi]
ppe_file = alcohol.ppe
radius_min = 0.3
radius_max = 1.0
[postprocess_electra]
ppe_file = alcohol.ppe
radius_min = 0.5
radius_max = 0.9
[mosquito_bald]
ppe_file = alcohol.ppe
radius_min = 0.2
radius_max = 2.7
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Разберу,как случайным образом в трупах генеретятся предметы.За спавн предметов отвечают 4 файла в папке "config\misc":
-death_generic.ltx
-death_items_by_communities.ltx
-death_items_by_levels.ltx
-death_items_count.ltx
Разберем их структуру.
DEATH_GENERIC.LTX
Является главным файлом с инклюдами остальных. В нем описываются зависимости спавна патронов при наличии определенного оружия (то есть если у нпс есть ТОЗ-34, то заспавненые патроны должны быть для него, а не для СВД, например), секция:
[item_dependence]
Перечисляются уникальные, квестовые предметы, которые не должны удаляться, если они есть у нпс, секция:
[keep_items]
И предметы, относящиеся к патронам (их надо спавнить другим методом), секция:
[ammo_sections]
DEATH_ITEMS_BY_COMMUNITIES.LTX
В ней указывается вероятность заспаунить или нет какой либо предмет в процентах,например:
af_medusa = 0.015
af_cristall_flower = 0.01
af_night_star = 0.005
Означает,что артефакт медуза заспавнится с вероятностью 1.5%,кристальная колючка с 1%,а ночная звезда с вероятностью 0.5%.Если стоит 1,то предмет заспавнится со 100% вероятностью. Во всех остальных секциях пишется соответствие на именно эту секцию,например:
[bandit]:stalker
Это значит,что у всех членов группировки "Бандиты" генерация предметов точно такая же,как и у сталкеров.Если необходимо задать другой шанс спавна,то просто пишется строка с новым значением, например у наемников отключен спавн хлеба,колбасы,водки,однако увеличен шанс сгенеретить энергетический напиток:
[killer]:stalker
;Еда
bread = 0
kolbasa = 0
vodka = 0
energy_drink = 0.3
Стоит дополнительно оговориться, что учитываются только сотые доли, то есть писать меньше, чем 0.01 не имеет смысла, поскольку в этом случае цифра будет округляться до нуля. Иными словами, шанса меньше 1% в игре не может быть.
DEATH_ITEMS_BY_LEVEL.LTX
Генерирование предметов для разных уровней(локаций). Опять таки главной секцией является:
[default]А во всех других пишется соответствие на нее. В этом файле задается значение,спавнить или нет предмет на уровне:
af_medusa = 1
af_cristall_flower = 0
То есть если стоит цифра 1,то спавним,если 0-не спавним.
DEATH_ITEMS_COUNT.LTX
Количественное отношение заспавненных предметов для разных уровней сложности прохождения игры.
[item_count_0] -новичек
[item_count_1] -опытный
[item_count_2] -ветеран
[item_count_3] -мастер
Как видите,с каждым уровнем сложности спавн предметов уменьшается.Главной как всегда является первая секция(новичек). Отличительная особенность написания,это две цифры.Первая цифра указывает минимальное количество заспавненных предметов,вторая максимальное. Если стоит одно значение,то спавнится всегда в определенном количестве. Пример:
bandage = 2
medkit = 1, 2
Значит будет генеретится всегда 2 бинта, и 1 или 2 атпечки.
ДОБАВЛЕНИЕ В ГЕНЕРАЦИЮ НОВОГО ПРЕДМЕТА
Для примера разберу добавление энергитического напитка "S.T.A.L.K.E.R."(патч 5,напиток отсутствует).Создание собственного предмета я разбирать не буду,так как такая статья уже имеется,я просто напишу его конфиг:
[energy_drink_stalker]:vodka
$spawn = "food and drugs\energy_drink_stalker"
inv_name = energy_drink_stalker_name
inv_name_short = energy_drink_stalker_short_name
visual = equipments\drink_stalker.ogf
description = enc_equipment_energydrink_stalker
cost = 75
inv_grid_width = 1
inv_grid_height = 1
inv_grid_x = 11
inv_grid_y = 0
inv_weight = 0.3
inv_name = drink_stalker
eat_health = 0
eat_satiety = 0
eat_power = 1.0
eat_alcohol = 0
eat_radiation = 0
wounds_heal_perc = 0
eat_portions_num = 1
eat_max_power = 0.2
attach_angle_offset = 0.000000, 0.000000, 0.000000
attach_position_offset = 0.087266, -0.078540, 0.052360
attach_bone_name = bip01_r_hand
auto_attach = false
Само собой добавте описание... Сделаем упрошенной генерирование,то есть для всех:группировок,уровней сложности,локаций оно будет одинаковым... Для этого добавим наш энергетик во все главные секции:
-death_items_by_communities.ltx
[stalker]energy_drink_stalker =0.2
af_medusa = 0.015
-death_items_by_levels.ltx
[default]energy_drink_stalker = 1
af_medusa = 1
-death_items_count.ltx
[item_count_0]
energy_drink_stalker = 1
af_medusa = 1
Вписывать спавн нашего предмета можно в любое место в этих секциях между другими предметами,не обращая внимание на записи разрабов(;Еда,;Медикаменты и т.п.),так как сделаны они просто для удобства,игра это не учитывает. Все,новый предмет добавлен в игру,появлятся он будет с 20%-ой вероятностью в количестве 1 шт.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Функция довольно таки проста:
Создаем в gamedata/scripts/ script документ с названием xr_mask
Не знаете как сделать script документ? Все очень просто:
Создаем текстовый блокнот.Открываем его,нажимаем Файл/Сохранить как/ Вместо Тип файла ставим Все файлы.А на имя файла пишем xr_mask.script
Дальше:
Открываем файл bind_stalker.script и находим примерно в середине писаки с названием
function actor_binder:update(delta)
object_binder.update(self, delta)
Между ними пишем xr_mask.hud_gas
Закрываем.
Потом:
Открываем созданный документ,пишем туда эту функцию:
function hud_gas()
local slot_stalker = db.actor:item_in_slot(6)
local object_1 = db.actor:object("stalker_outfit")
local slot_killer = db.actor:item_in_slot(6)
local object_2 = db.actor:object("killer_outfit")
if slot_stalker and slot_stalker:section() == "stalker_outfit" and object_1 ~= nil or
slot_killer and slot_killer:section() == "killer_outfit" and object_2 ~= nil then
local hud = get_hud()
local custom_static = hud:GetCustomStatic("hud_gas")
if custom_static == nil then
hud:AddCustomStatic("hud_gas", true)
end
else
local hud = get_hud()
local custom_static = hud:GetCustomStatic("hud_gas")
if custom_static ~= nil then
hud:RemoveCustomStatic("hud_gas", false)
end
end
end
Но это только на костюм Наемника и сталкера.
Теперь заходим в gamedata/config/ui/ui_custom_msgs и пишем
<hud_gas x="0" y="0" width="1024" height="768" stretch="1">
<texture>hud\hud_gaz</texture>
</hud_gas>
Дальше текстуры.
Заходим в gamedata\textures\ui, находим файл с названием ui_mainmenu.dds. Копируем его, заходим в gamedata\textures\hud вставляем его и переминуем в hud_gas.dds Открываем программой Paint.net 3.5.11,Стираем все внутри, и рисуем подходящую для вас маску.
Можно тестить.
СТОП!А как же сделать под каждый костюм свой худ?Задались таким вопросом.Функция такая.
Открываем файл bind_stalker.script
Там где написали xr_mask.hud_gas нажимаем Enter и пишем вот так:
xr_mask1.hud_gas1
Это для того чтобы не было конфликта из-за одинаковых названий.
Создаем документ xr_mask1.script
Там пишем так
function hud_gas1()
local slot_stalker = db.actor:item_in_slot(6)
local object_1 = db.actor:object("monolit_outfit")
local slot_killer = db.actor:item_in_slot(6)
local object_2 = db.actor:object("dolg_outfit")
if slot_stalker and slot_stalker:section() == "monolit_outfit" and object_1 ~= nil or
slot_killer and slot_killer:section() == "dolg_outfit" and object_2 ~= nil then
local hud = get_hud()
local custom_static = hud:GetCustomStatic("hud_gas1")
if custom_static == nil then
hud:AddCustomStatic("hud_gas1", true)
end
else
local hud = get_hud()
local custom_static = hud:GetCustomStatic("hud_gas1")
if custom_static ~= nil then
hud:RemoveCustomStatic("hud_gas1", false)
end
end
end
Опять же открываем gamedata/config/ui/ui_custom_msgs
<hud_gas1 x="0" y="0" width="1024" height="768" stretch="1">
<texture>hud\hud_gaz</texture>
</hud_gas1>
Теперь у нас уже для костюма Долга и Монолита.Если хотите уже другие маски,то создаем в textures/hud/ текстурку с названием hud_new(можно любое название галвное на англ.языке)
В это случае вместо
<hud_gas1 x="0" y="0" width="1024" height="768" stretch="1">
<texture>hud\hud_gaz</texture>
</hud_gas1>
Пишем
<hud_gas1 x="0" y="0" width="1024" height="768" stretch="1">
<texture>hud\hud_new</texture>
</hud_gas1>
ВНИМАНИЕ!Чтобы сделать под каждый костюм нужно будет создавать новые документы с названием xr_mask и любое число.И писать уже в bind_stalker xr_mask(ваше число без пробелов).hud_gas2 И т.д. Потом же опять прописывать в xr_mask Новые названия костюмов и вместо hud_gas1 писать hud_gas2.Таким темпом делаем для каждого костюма свой.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Параметры погоды
[sect_default_weather]
01:00:00 = default_weather_01
02:00:00 = default_weather_02
...
Здесь указывается время смены типов погоды, каждый тип включает в себя свой скайбокс и индивидуальные параметры освещения, дождя, грозы, и звука окружения. Переход осуществляется не скачкообразно, а плавно, практически не заметно.
[default_weather_01] ; имя типа погоды, описание которого ведется в этом блоке.
flares = flares_gradient1 ; здесь указывается имя заготовки блика
от солнца (заготовки прописаны в файле flares.ltx).
sky_texture = skysky_14_cube ; это имя используемого скайбокса. cкайбокс - это куб,
окружающий всю локацию, на 6 граней которого натянуты 6 текстур из файла, указанного
в этой строке. нужно обратить внимание, что строка содержит еще и путь к файлу.
sky_rotation = 0 ; определяет положение (азимут) скайбокса на описываемый час.
sky_color = 1.0, 1.0, 1.0 ; это цвет неба, или, точнее, цвет рассеянного света,
формат из 3 цифр, как и в параметрах ниже, подразумевает цветовую модель RGB,
учитывая то, что здесь максимальная интенсивность цвета (255), здесь равна 1.0.
например, цвет неба, равный [1.0, 0.0, 0.0] - зальет окрестность ярко красным светом.
стоит учитывать, что здесь описывается не цвет, а свет, поэтому параметр,
например, [0,0,0] - даст не черный цвет, а отсутствие вообще какого либо света.
аналогично эффекту смешивания в фотошопе (screen).
clouds_texture = skysky_oblaka ; это - имя тектуры облаков. не путать со скайбоксом.
clouds_color = 0.333, 0.341, 0.431, 0.7, 1.7 ; это цвет облаков, первые 3 цифры -
это RGB (см.выше), четвертая - это видимость (непрозрачность) текстуры облаков,
т.е 0 - облаков не видно, а 1 - полная видимость. пятая цифра - скорость движения
облаков.
far_plane = 350 ; это, судя по всему, дальность видимости (расстояние, на котором
"обрезается" карта).
fog_distance = 350 ; в DX9 это расстояние, на котором туман фактически "прекращает"
действовать. непосредственно дымка, интенсивность которой задаётся fog_density,
"висит" в радиусе fog_distance. за пределами этого радиуса часть геометрии "съедается"
и вместо неё отображается небо (скайбокс). правильно подобранная текстура неба
имитирует вдали клубы тумана. а уже дальше снова проявляется геометрия уровня (холмы
и т.д.). в DX8-режиме туман рудиментарен и обсуждать его нет особого смысла.
fog_color = 0.043, 0.043, 0.055 ; непосредственно сам цвет тумана.
fog_density = 0.9 ; это плотность тумана, выставив значение в 0, можно увидеть
четкие края карты.
rain_density = 0.2 ; это плотность дождя, действует, видимо, как и туман.
rain_color = 0.21, 0.21, 0.27 ; цвет (непосредственно капель) падающего дождя.
thunderbolt = thunderbolt_collection_default ; это имя заготовки грозы, если грозы
не предусмотрено, значение можно оставить пустым.
bolt_period = 4.5f ; это время между вспышками молний. значение прописано не в
секундах. В принципе, эмпирически установлено, что в грозовую погоду желательно
ставить значения около 20f, в дождливую - в районе 50f.
bolt_duration = 0.35f ; это собственно продолжительность фазы вспышки молнии.
выставив высокое значение, можно вовсе получить не молнию, а некое плавно
нарастающее свечение.
wind_velocity = 0.0 ; сила ветра.
wind_direction = 0.0 ; направление ветра.
ambient = 0.0425, 0.045, 0.0475 ; общее освещение локации, те тона, в которые она
будет окрашена (цвет и интенсивность света фонового освещения там, где не светит солнце -
выставив значения в [0,0,0] - получим кромешную тьму в зданиях и под навесами.
работает только на R2.
lmap_color = 1.0, 1.0, 1.0 ; видимо, цвет лайтмапа.
hemi_color = 0.0425, 0.045, 0.0475, 0.1 ;по слухам, параметр, идентичный амбиенту,
только предназначенный для статичного освещения. насчет четвертой цифры - не в курсе.
sun_color = 0.0, 0.0, 0.0 ; свет солнца, его интенсивность также влияет на тени,
если солнце не светит, теней от него не будет.
sun_dir = -18.0, 291 ; положение солнца, первая цифра - это высота, знак минус означает,
что солнце выше горизонта. от горизонта до горизонта солнце описывает полукруг, значения
в игре соотносятся с градусами, то есть от -0 до -180, зенит -90, вторая цифра определяет
положение солнца относительно сторон горизонта, нулевое значение вроде соответствует югу.
env_ambient = ambient_env_rain ; это набор звуков окружения.
Параметры бликов
Находятся в файле flares.ltx.
[flares_sun_rise] ; название cекции, параметры которой описываются ниже
flare_opacity = 0.340, 0.260, 0.500, 0.420, 0.260, 0.260 ; непрозрачность
каждого отражения, в порядке от дальнего к ближнему.
flare_position = 1.300, 1.000, 0.500, -0.300, -0.600, -1.000 ; позиция каждого
отражения на оси, порядок соотв. верхнему.
flare_radius = 0.080, 0.120, 0.040, 0.080, 0.120, 0.300 ; радиус каждого
отражения, порядок соотв. верхнему.
flare_textures = fxfx_flare1.tga, fxfx_flare2.tga,
fxfx_flare2.tga, fxfx_flare2.tga, fxfx_flare3.tga,
fxfx_flare1.tga
; имена текстур, использованных на каждое отражение, порядок аналогичен.
можно заметить, что прописан формат *.tga, в действительности используются,
как и везде, текстуры *.dds, а вообще - поддержка формата *.tga под вопросом.
flare_shader = effectsflare ; шейдер.
flares = on ; параметр включает или выключает блики, например, для луны -
они не уместны.
gradient = on ; параметр, включающий/выключающий ореол вокруг светила,
дающий эффект ослепления.
gradient_opacity = 1.0 ; непрозрачность ореола.
gradient_radius = 0.7 ; радиус ореола.
gradient_texture = fxfx_gradient.tga ;имя текстуры ореола.
gradient_shader = effectsflare ; аналогично [flare_shader].
source = on ;параметр, включающий/выключающий отображение источника, то есть
самого солнца или луны.
source_radius = 0.03 ; радиус источника.
source_texture = fxfx_sun_rise.tga ;имя используемой для источника текстуры.
source_shader = effectssun ; аналогично [flare_shader].
source_ignore_color = false ; игнорирование цвета источника.
Параметры фонарика
Файл находится по следующему пути:
config\models\objects\light_night.ltx
[torch_definition]
range = 30 ; дистанция в метрах.
range_r2 = 30 ; дистанция в метрах (для динамического освещения).
color = 0.22,0.22,0.22,0.2 ; цвет, из 4 компонентов <r,g,b,a> значением от 0 до 3.
color_r2 = 1.1,1.1,1.1,0.0 ; цвет, из 4 компонентов <r,g,b,a> значением от 0 до 3
(для динамического освещения).
omni_range = 3 ; дистанция освещения от фонариков неписей в метрах.
omni_range_r2 = 3 ; дистанция освещения от фонариков неписей в метрах (для динамического
освещения).
omni_color = 1.0,1.0,1.0,0.1 ; цвет фонариков неписей, из 4 компонентов <r,g,b,a>
значением от 0 до 3.
omni_color_r2 = 1.0,1.0,1.0,0.1 ; цвет фонариков неписей, из 4 компонентов <r,g,b,a>
значением от 0 до 3 (для динамического освещения).
color_animator = empty ; цвет аниматора (empty - аниматор не используется).
spot_texture = internalinternal_light_torch_r2 ; текстура яркой точки (для динамического
освещения).
spot_angle = 45 ; угол освещения в градусах.
glow_texture = glowglow_torch_r2 ; текстура свечения фонарика, когда он направлен в глаза
(обязательный параметр).
glow_radius = 0.3 ; радиус свечения в метрах.
guide_bone = lights_bone ; кость, к направлению которой привязывается фонарик (изменять
строго не рекомендуется).
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
важные параметры:
destroy_time = 1800 ; Время детонации 1.8 секунды
blast = 3.0 ; Урон наносимый фугасным воздействием
blast_r = 8 ; радиус фугасного воздействия
blast_impulse = 550 ; Сила удара от фугаса
frags = 300 ; Количество осколков
frags_r = 25 ; Радиус разлета осколков
frag_hit = 3.50; Урон от осколка
frag_hit_impulse = 300 ; Сила удара от осколков
fragment_speed = 500 ; Скорость осколков
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Чтобы менять размер придется менять и визуалы (кости в том числе) работа довольно хлопотная.PRO100 STALKER пишет: Кто знает как редактировать размер мутантов?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- StALKer1999
-
- Не в сети
- Новый участник
-
- Сообщений: 5
- Спасибо получено: 3
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Разбор структуры конфига
Возьмем, для примера, конфиг w_g36.ltx. Он делится на разделы:
Первый раздел
Здесь хранится общая информация о оружии - его класс, тип, ссылки на спавн и т.д. Нас интересуют следующие строки:
description = enc_weapons1_wpn-g36 - ссылка на string_id, из которого игра подгружает описание этого оружия.
ef_main_weapon_type = 2 - основной тип, к которому принадлежит оружие
ef_weapon_type = 6 - подтип, к которому принадлежит оружие
Второй раздел
Содержит модификаторы, которые даются к углу зрения/дальности обзора NPC, держащего это оружие в руках:
holder_range_modifier = 1.85 - во сколько раз увеличивается eye_range
holder_fov_modifier = 0.3 - во сколько раз увеличивается eye_fov
Третий раздел
Содержит данные о самом оружии, его некоторых характеристиках:
cost = 18000 - базовая цена (торговцы умножают её на некоторый коэффициент)
weapon_class = assault_rifle - класс оружия (здесь - штурмовая винтовка)
ammo_mag_size = 30 - размер магазина
ammo_class = ammo_5.56x45_ss190, ammo_5.56x45_ap - типы используемых патронов
grenade_class = ammo_m209 - тип используемых гранат
fire_modes = 1, -1 - режимы ведения огня
hand_dependence = 1 - засивимость о рук (?) - возможно, речь идет о качании ствола
single_handed = 0 - держится ли только в одной руке
slot = 2 - слот в инвентаре
animation_slot = 2 - вид анимации (для пистолета/для винтовки)
inv_name = wpn-g36 - ссылка на имя, отображаемое в инвентаре, тоже берется из string table, как и описание
inv_name_short = wpn-g36 - короткое имя; в данном случае используется то же самое
inv_weight = 3.6 - вес
inv_grid_width = 5 - координаты первого угла иконки по x
inv_grid_height = 2 - координаты первого угла иконки по y
inv_grid_x = 0 - координаты второго угла иконки по x
inv_grid_y = 10 - координаты второго угла иконки по y
Четвертый раздел
В четвертом разделе хранится информация о износе/отдаче оружия. Практически все параметры там снабжены комментариями, поэтому приведу лишь самые интересные:
cam_relax_speed = 5.7 - скорость возврата в исходное положение
cam_dispersion = 0.2 - увеличения угла (в градусах) с каждым выстрелом
fire_dispersion_condition_factor = 5 - увеличение дисперсии в процентах при максимальном износе
misfire_probability = 0.003 - вероятность осечки при максимальном износе
misfire_condition_k = 0.05 - порог (в данном случае - 5%), после которого оружие может заклинивать
condition_shot_dec = 0.0002 - увеличение износа при каждом выстреле
Пятый раздел
Здесь хранится множество параметров, из которых наиболее интересны эти:
hit_power = 0.50, 0.54, 0.57, 0.60 - сила выстрела
hit_impulse = 105 - импульс пули (сила, которую летящая пуля передает жертве, влияет на поведение ragdoll-тела)
hit_type = fire_wound - тип причиняемых повреждений, в данном случае - пулевые ранения (параметр в синглплеере ни на что не влияет)
fire_distance = 600 - максимальная дистанция для выстрела
bullet_speed = 925 - начальная скорость пули
hud = wpn_g36_hud - внешний вид оружия
Шестой раздел
position = -0.026, -0.132, 0.0 - позиция по отношению к игроку (?)
orientation = 0, 0, 0 - направление, в которое смотрит ствол (?)
Седьмой раздел
Содержит описания визуальной стороны оружия и некоторые другие параметры:
startup_ammo = 90 - как нетрудно догадаться, стартовое количество патронов (в синглплеере ни на что не влияет)
visual = weapons\g36\wpn_g36.ogf - модель оружия, используемая NPC, а также игроком при виде от третьего лица
ph_mass = 4 - физическая масса, используемая при расчетах
scope_status = 1 - ситуация со съемным прицелом
silencer_status = 0 - ситуация со съемным глушителем
grenade_launcher_status = 0 - ситуация с подствольным гранатометом
Параметры:
0 - нет, новый прикрепить нельзя
1 - уже есть, несъемный
2 - можно прикрепить
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Сталкеров в Зоне
|