Форум Игромании

Форум Игромании (http://forum.igromania.ru/index.php)
-   "Пикник на обочине" (http://forum.igromania.ru/forumdisplay.php?f=115)
-   -   S.T.A.L.K.E.R. - Создание модификаций (http://forum.igromania.ru/showthread.php?t=34826)

Jesh 13.04.2007 21:44

S.T.A.L.K.E.R. - Создание модов


Мануал по созданию модификаций для начинающих
Часть 1.
Часть 2.

Что необходимо:


Статьи участников:
Скрытый текст:
А
Активация артефактов
В
В Зоне только день
В Зоне только день способ 2
Вывод координат на екран
Выдача Волком оружия
Выдача оружия в ЧН
Д
Добавление транспорта
Динамические диалоги
Добавление новых локаций в ЧН и ЗП
И
Изменение первоначального инвентаря у Меченого(1-й урок читерства)
Имитация намокания дороги во время дождя
К
Как менять ломкость брони
Качание оружия при хотьбе
М
Материал про: активацию артефактов, добавление статей в ПДА, редактирование НПС, создание новой группировки, вычисление координат
Н
Настройка AI Wrapper от bardak'a
Настройка конвертора bardak'a
NPC покупают и продают оружие
Носимый вес
О
Описание Actor.ltx
П
Параметры оружия с описанием
Прорисовка уровня и изменение дистанции видимости
Прототип динамических новостей
Р
Работа с acdc от Bardak-a
Размер раны
Редактирование мультиплеерных карт, для последующего их запуска в сингле
С
Создание механика
Создание уровня для сингла
Создание нового оружия
Создание скриптовых роликов
Создание квеста
Создание нового НПС путём редактрирования all.spawn
Создание HUD модели оружия
Спавн предметов в инвентарь (2-й урок читерства)
Свойства костюмов
Cпавн монстра
Т
Транспорт в игре
У
Уменьшение сытости ГГ


Работы участников:

Разрабатываемые моды:
Скрытый текст:
antdiablon, Минор
Nacek 2


Полезные ссылки

Мод-портал. - Официальная вики по модам для сталкера (Не обновляется)
S.T.A.L.K.E.R. Inside Wiki. - Фанатская вики по модострою для сталкера.

X-Ray SDK. Ныне все вопросы с ним обсуждаются тут.
S.T.A.L.K.E.R. Universal Extractor.


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

TBXin 13.04.2007 21:46

Скрытый текст:
Как убрать/увеличить время для обычных квестов?:
В файле gamedata\config\misc\task_manager.ltx найти и изменить все строки вида time = 86400
Чтобы совсем убрать лимит - просто закомментировать их (--)

Как убрать intro-ролики в начале?:
В свойствах ярлыка прописываем после пути к exe-шнику: -nointro
Получиться должно что то вроде(это как у меня):
"D:\Games\S.T.A.L.K.E.R. Shadow of Chernobyl\bin\XR_3DA.exe" -nointro

Как включить motion blur?:

В свойствах ярлыка прописываем после пути к exe-шнику: -mblur
В файле user.ltx(можно и в консоли) параметру r2_mblur присваиваем значение например 0.15
Работает только на DirectX 9.

Как увеличить время спринта?:
В файле actor.ltx меняем параметр sprint_koef.

Как поменять кол-во жизни монстрам?:
В файле m_*.ltx(где * - название монстра, например m_controller.ltx; находится в папке gamedata\config\creatures) меняем параметр health

Как повесить на пояс больше артефактов?:
В файле system.ltx изменяем параметр max_belt с 5 на 10 (max_belt = 10)

Ищем файл inventory_new.xml и в нём меняем

<dragdrop_belt x="645" y="136" width="410" height="60"
cell_width = "60" cell_height="60" rows_num="1" cols_num="5"/>


на

<dragdrop_belt x="590" y="118" width="410" height="104"
cell_width = "52" cell_height="52" rows_num="2" cols_num="5"/>


что соответствует 10 артефактам.
При желании поправив соответствующим образом файлы system.ltx и inventory_new.xml
можно получить 12,14,16 и более слотов под артефакты.

Создание новых веток диалога:
Создание новых веток диалога.
1) Списки веток диалогов содержатся в файлах вида gamedata/config/gameplay/character_desc_*.xml

Это например:
character_desc_zombied.xml
character_desc_stalker.xml
character_desc_g arbage.xml
итд.

Файлы character_desc_*.xml можно сравнить со стволом дерева диалогов.
В них перечисляется названия прикрепляемых веток диалогов

Например вот список веток диалога с Сидоровичем взятый из файла character_desc_escape.xml

<start_dialog>escape_trader_start_dialog</start_dialog>
<actor_dialog>escape_trader_talk_info</actor_dialog>
<actor_dialog>escape_trader_jobs</actor_dialog>
<actor_dialog>tm_trader_dialog</actor_dialog>
<actor_dialog>tm_trader_reward</actor_dialog>
<actor_dialog>escape_trader_done_blockpost_box</actor_dialog>< br>
В свою очередь каждая ветка диалога также может ветвится.

2) Ветвление веток прописывается уже в других файлах.
Например ветвление веток диалога с Сидоровичем содержится в файле gamedata/config/gameplay/dialogs_escape.xml
Возьмем оттуда к примеру ветвление ветки escape_trader_jobs
(ветвление веток обычно очень большое поэтому я приведу только часть):

<dialog id="escape_trader_talk_info">
<precondition>escape_dialog.trader_has_talk_info_w r</precondition >
<has_info>tutorial_end</has_info>
<phrase_list>
<phrase id="1">
<text>escape_trader_talk_info_1</text>
<next>100</next>
<next>99</next>
<next>9995</next>
</phrase>




<phrase id="0">
<text>escape_trader_talk_info_0</text>
<next>1</next>
</phrase>
</phrase_list>
</dialog>

Здесь <precondition>…</precondition> - это проверка выполнения условия. Ветка появится в диалоге, только если условие выполняется.
Конкретно <precondition>escape_dialog.trader_has_talk_info_w r</precondition> из ветки escape_trader_talk_info есть обращение к функции trader_has_talk_info_wr находящейся в файле скрипте gamedata/scripts/escape_dialog*****ipt

Функция выглядит так:

function trader_has_talk_info_wr( trader, actor )
return true
end

Насколько понимаю она возвращает true только в случае если мы разговариваем с trader_ом т.е. с Сидоровичем.
Т.е проверкой условия <precondition>escape_dialog.trader_has_talk_info_w r</precondition> проверяется с кем ведется диалог,
и если диалог ведется с Сидоровичем в ветке <dialog id="escape_trader_talk_info"> по крайней мере этим условием пропускается в списк реплик.
Но для конкретной ветки может быть несколько precondition и других условий.

Далее <has_info>tutorial_end</has_info>Если я верно понимаю, это так же своего рода проверка условия В данном случае проверка на то закончена стадия tutorialа или нет. Т.е ветка допустится в список реплик если стадия tutorialа закончена.

А далее идут конкретные фразы содержащие ссылки на вытекающие фразы

Фраза:

<phrase id="0">
<text>escape_trader_talk_info_0</text>
<next>1</next>
</phrase>

это основа ветки escape_trader_talk_info.
(Вообще как я понял в любой основной ветке любого диалога фраза <phrase id="0"> будет основой из которой далее будет все вытекать)

<next>1</next> - это ссылка на вытекающую фразу <phrase id="1"> :

<phrase id="1">
<text>escape_trader_talk_info_1</text>
<next>100</next>
<next>99</next>
<next>9995</next>
</phrase>

В свою очередь <next>100</next>, <next>99</next>, <next>9995</next> это ссылки на фразы веточки растущие из фразы
<phrase id="1">.

3) Текст каждой фразы содержится уже в четвертом файле. Для диалога с Сидоровичем тексты лежат в файле
gamedata/config/text/rus/stable_dialogs_escape.xml

<string id="escape_trader_talk_info_0">
<text>Есть несколько вопросов.</text>
</string>
<string id="escape_trader_talk_info_1">
<text>Спрашивай, только я ведь всего не знаю. Сам понимаешь, сижу тут целыми днями, а жизнь - она вся там, снаружи, в Зоне. Могу рассказать о Зоне вообще, а немного могу о ближайших окрестностях, где сам ходил.</text>
</string>

Эти строки содержат тексты для фраз <phrase id="0"> и <phrase id="1">

Итого диалоги разложены по 4 а то и более файлам.

Да кстати, путь по веткам может быть зацикленным если того требует диалог. Например так:

<phrase id="0">
<text>…</text>
<next>1</next>
<next>2</next>
</phrase>
<phrase id="1">
<text>…</text>
<next>11</next>
<next>12</next>
</phrase>
<phrase id="11">
<text>…</text>
<next>1</next> - Это возврат к фразе 1. (зацикливание)
<next>111</next>
</phrase>

Теперь пример практического применения того, о чем было сказано выше:
Добавим в диалог с Сидоровичем ветку своего собственного изготовления.

Например такую:
Меченый: Сидрыч а что это у тебя зеленые человечки, что по столу бегают, такие худые?
Сидорович: Чего?!!
Меченый: Ты их совсем, совсем не кормишь?
Сидорович: В следующий раз, как пойдешь в зону, бери-ка вместо водяры побольше антирада. А то мало что таким перегаром дышишь, уже до зеленых человечков долечился… Шутник.

1) В файле gamedata/config/gameplay/character_desc_escape.xml в конце списка веток для trader_а суем свою ветку с произвольным названием. (например <actor_dialog>escape_trader_letat_gusi</actor_dialog>)

Т.е у нас получится так

<specific_character id="escape_trader" no_random = "1">



<start_dialog>escape_trader_start_dialog</start_dialog>
<actor_dialog>escape_trader_talk_info</actor_dialog>
<actor_dialog>escape_trader_jobs</actor_dialog>
<actor_dialog>tm_trader_dialog</actor_dialog>
<actor_dialog>tm_trader_reward</actor_dialog>
<actor_dialog>escape_trader_done_blockpost_box</actor_dialog>< br> <actor_dialog>escape_trader_letat_gusi</actor_dialog>
</specific_character>

Записываем изменения и с файлом character_desc_escape.xml все.

2) Теперь берем файл gamedata/config/gameplay/dialogs_escape.xml

Диалогу:

Меченый: Сидрыч а что это у тебя зеленые человечки, что по столу бегают, такие худые?
Сидорович: Чего?!!
Меченый: Ты их совсем, совсем не кормишь?
Сидорович: В следующий раз, как пойдешь в зону, бери-ка вместо водяры побольше антирада. А то мало что таким перегаром дышишь, уже до зеленых человечков долечился… Шутник.

Который мы хотим реализовать будет соответствовать такая структура:

<phrase id="0">
<text>escape_trader_ letat_gusi_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>escape_trader_ letat_gusi_1</text>
<next>2</next>
</phrase>
<phrase id="2">
<text> escape_trader_ letat_gusi_2</text>
<next>3</next>
</phrase>
<phrase id="3">
<text> escape_trader_ letat_gusi_3</text>
</phrase>

условия наличия ветки в диалоге можно взять из ветки <dialog id="escape_trader_talk_info">
Т.е берем условия <precondition>escape_dialog.trader_has_talk_info_w r</precondition > и <has_info>tutorial_end</has_info>
(Можно было конечно прописать в скрипте еще одно условие для ветки, чтоб она появилась только один раз,
а потом больше не возникала. Но об этом как нибудь позже допишу.)

В итоге у нас получилась такая структура:

<dialog id="escape_trader_letat_gusi">
<precondition>escape_dialog.trader_has_talk_info_w r</precondition >
<has_info>tutorial_end</has_info>
<phrase_list>
<phrase id="0">
<text>escape_trader_letat_gusi_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>escape_trader_letat_gusi_1</text>
<next>2</next>
</phrase>
<phrase id="2">
<text> escape_trader_letat_gusi_2</text>
<next>3</next>
</phrase>
<phrase id="3">
<text> escape_trader_letat_gusi_3</text>
</phrase>
</phrase_list>
</dialog>

Которую нужно вставить в любом месте между dialog id_шниками других веток в файле dialogs_escape.xml.
Главное не промахнутся и засунуть именно между, а не внутрь одного из dialog id
Все что находится между тегами <dialog id="***"> и </dialog> это внутенности конкретного dialog id
Т.е совать наш
<dialog id="escape_trader_letat_gusi">
….
</dialog>

надо

<dialog id="*** ">

</dialog>
здесь
<dialog id="*** ">

</dialog>

но

<dialog id="*** ">
не здесь
</dialog>

После сохранения внесенных изменений с файлом dialogs_escape.xml все.

3) Теперь вбиваем сами текстовички в файле gamedata/config/text/rus/stable_dialogs_escape.xml


Т.е нам надо в файле stable_dialogs_escape.xml вставить такую конструкцию:

<string id="escape_trader_letat_gusi_0">
<text>Сидрыч а что это у тебя зеленые человечки, что по столу бегают, такие худые?</text>
</string>
<string id="escape_trader_letat_gusi_1">
<text>Чего?!!</text>
</string>
<string id="escape_trader_letat_gusi_2">
<text>Ты их совсем, совсем не кормишь?</text>
</string>
<string id="escape_trader_letat_gusi_3">
<text>В следующий раз, как пойдешь в зону, бери-ка вместо водяры побольше антирада. А то мало что таким перегаром дышишь, уже до зеленых человечков долечился… Шутник.</text>
</string>

в любом месте между уже существующими string id

<string id="*** ">
</string>
сюда
<string id="*** ">
</string>

Но не внутрь одного из существующих string id
<string id="*** ">
не сюда
</string>

После сохранения изменений, у нас все готово. Можно грузить игру и смотреть что получилось.

Оружие загораживает пол-экрана. Как это исправить?:
В файле конфига выбранного оружия меняем:
position = 0, -0.075, 0 ; было 0,0,0
zoom_offset = -0.112400,0.091800,-0.115000 ; было -0.112400,0.016800,-0.115000

Где найти файл user.ltx?:
Для Windows XP в директории X:\Documents and Settings\All Users\ Общие документы \STALKER-SHOC
Для Windows Vista в директории X:\Users\Public\Documents\STALKER-SHOC

Как изменить силу врагов?:
В файле gamedata\config\creatures\actor.ltx найти строки
hit_probability_gd_novice = 0.20
hit_probability_gd_stalker = 0.30
hit_probability_gd_veteran = 0.40
hit_probability_gd_master = 0.50
Они отвечают за вероятность попадания по вам при разных уровнях сложности.

Гармошка:
Для возврата в игру губной гармошки, ищем в папке gamedata\scripts файл xr_kamp*****ipt и открываем его блокнотом. Далее ищем строку -- играть на гармошке . Сам скрипт выглядит так:
-- играть на гармошке
-- if npc:object("harmonica_a") then
-- self.npc[npc_id].states["play_harmonica"] = true
-- self.npc[npc_id].states["wait_harmonica"] = true
-- self.kamp_states["pre_harmonica"] = true
-- self.kamp_states["harmonica"] = true
-- self.kamp_states["post_harmonica"] = true
-- else
self.npc[npc_id].states["play_harmonica"] = false
self.npc[npc_id].states["wait_harmonica"] = false
self.kamp_states["pre_harmonica"] = false
self.kamp_states["harmonica"] = false
self.kamp_states["post_harmonica"] = false
-- end

В данном случае знак -- означает, что строки скрипта игра не использует, а просто пропускает их, переходя к следующей части. Значит нужно убрать знак – из тех строк, которые нам нужны. Должно получится:
-- играть на гармошке
if npc:object("harmonica_a") then
self.npc[npc_id].states["play_harmonica"] = true
self.npc[npc_id].states["wait_harmonica"] = true
self.kamp_states["pre_harmonica"] = true
self.kamp_states["harmonica"] = true
self.kamp_states["post_harmonica"] = true
else
self.npc[npc_id].states["play_harmonica"] = false
self.npc[npc_id].states["wait_harmonica"] = false
self.kamp_states["pre_harmonica"] = false
self.kamp_states["harmonica"] = false
self.kamp_states["post_harmonica"] = false
end
Всё, теперь можете запускать игру и наслаждаться.*

Как менять скорострельность и удобность оружия?:
В папке gamedata/config/weapons в файлах конфигурации оружия ищи

control_inertion_factor

чем меньше параметр - тем выше удобство.
и
rpm - скорострельность.

Как положить оружие в другой слот?:
В папке gamedata/config/weapons в файлах конфигурации оружия ищи
SLOT и меняй на 1 (вместо ножа) или 2 (пистолетный слот)

Добавление новых опций в меню игры?:
Открываем файл gamedata\config\ui\ui_keybinding.xml. В нём находим строку
<group name="kb_grp_common">
и после неё пишем:
<command id="kt_turn_engine" exe="turn_engine"/>
<command id="kb_cam_1" exe="cam_1"/>
<command id="kb_cam_2" exe="cam_2"/>
<command id="kb_cam_3" exe="cam_3"/>
Таким образом в меню игры добавляются 4 новых опции, а именно: смена камеры и кнопка включения двигателя. Также можно добавлять сюда др. клавиши(если знать консольные команды)

Скрипты дверей:
Покажу вам на примере, как открыть дверь в саркофаге без дешифра) мы просто сделаем дверь открытой по умолчанию, этот трюк можно использовать в любом направлении, в том числе и для новых квестов;)
Идём в gamedata\config\scripts и ищем скрипт нужной двери или объекта, нам нужна дверь в саркофаге и это sar_door.ltx
Вот вам скрипт с моими комментариями, мои комментарии после символа ;, в вашем скрипте они не нужны, так что удалите их если будете копировать отсюда...

[logic] ;Основное действие
active = ph_door@locked ; При нажатии кнопки "Действия" выполняется скрипт [ph_door@locked]

[ph_door@locked] ; То что выполняется сейчас
locked = true ; Закрыто на замок, значение правда ("Закрыто", при нажатии на кнопку действия ничего не произойдёт)
closed = true ; Прикрыта, правда ("Прикрыта", при нажатии на кнопку действия дверь октроется)
tip_open = tip_door_coded ; Всплывающая подсказка "Дверь закодирована"
on_info = {=actor_has_decoder} ph_door@coded ; При нажатии на кнопку действия идёт проверка есть ли декодер

[ph_door@coded] ; Если есть декодер то...
locked = true ;Закрыто, правда
closed = true ;Прикрыто, правда
tip_open = tip_door_decode ; Всплывающая подсказка "Декодировать"
on_info = {!actor_has_decoder} ph_door@locked
on_use = ph_door@decoding %+sar_access_decoding% ; При начале декодирования, пошёл процесс декодирования и выполняется скрипт sar_access_decoding

[ph_door@decoding] ; В процессе декодирования
locked = true
closed = true
tip_open = tip_door_decoding
on_info = {+sar_finish_decoding} ph_door@unlocked ; Завершение скрипта sar_finish_decoding и выполнение ph_door@unlocked

[ph_door@unlocked] ; Дверь разкодирована и открыта
locked = false
closed = false
show_tips = false

Если мы хотим увидеть правдивые концовки, но мы уже в саркофаге и у нас нет дешифра, то мы просто можем изменить везде
locked = false на true
closed = false на true
И в зависимости что вам надо и где можете менять и изменять, тут всё предельно просто и понятно...

Deworn 14.04.2007 00:32

Все это прекрасно, но что делать, если после распаковки архивов в каталог игры она вылетает с ошибкой в дебуге? Удалять оригинальные архивы прошу не советовать - пробовал, не помогает. Версия игры лицензионная отечественная, пропатченная до 1.001.

TBXin 14.04.2007 00:39

Deworn ищи проблемму в своих руках и поступках и вспоминай что делал не так...
Принцип распаковки придельно прост, указываешь архив, и ждёшь, указал все архивы, создалась папка gamedata, потом убираешь оригинальные архивы куда хочешь и радуешься жизни... и вообще почитай что дебагер пишет) там будет написано почему вылетел...

Прощу модераторов удалить флуд этого идиота) и прикрепить тему ;)

Cep}I{AHT 14.04.2007 19:24

2TBXin
Почему не ссылаешься на источник, и нет имени автора, ведь это не ты писал. Некрасиво как-то.

TBXin 14.04.2007 19:44

Cep}I{AHT а я где нить написал что это я писал... всё равно статью переделывал и выложил сюда, чтобы все знали что и где, я и так один из самых первых мод мейкеров для сталкер ))

Cep}I{AHT 14.04.2007 19:55

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

TBXin 14.04.2007 20:47

Cep}I{AHT имхо ты не прав. статья не для меня и не для моей личной выгоды, а для пользы людям и всё. хватит уже оффтопить...
теперь прошу вопросы обсуждать касающиеся только модов в этой теме...

Меченый 14.04.2007 21:14

внимание:ты сам попросил =))
Вообщем скачал сталкер русский. поставил патч. распаковал с помощью проги все архивы в папку gamedata в каталоге игры. Но когда я пытаюсь убрать архивы игра мне показывает шиш. И из всех модов, которые я ПРАВИЛЬНО ставил, работает только мод на анамалии =\ что делать?

Cep}I{AHT 14.04.2007 21:41

2Меченый
Бывает так, что новый установленный мод может конфликтовать с сохранениями и приходиться начинать новую игру, или сносить мод.
Попробуй не распаковывать архивы игры, а просто закинь мод в папку gamedata.
P.S. Это тема по созданию модов а не по их установки.

2TBXin
Ладно, завязали с оффтопом.
Да и ещё, может лучше выложить ссылку на Faq, а то так читать не удобно. И в первом посте написть: "ПРЕЖДЕ ЧЕМ ЗАДАВТЬ ВОПРОСЫ ПРОЧТИТЕ ДАННЫЙ FAQ"

Mixas 18.04.2007 17:48

TBXin
Подскажи в каком файле прописаны звуковые файлы, которые проигрываются сталкерами у костра.
У костра слакеры травят только анегдоты и играют на гитаре, а истории и легенды, которые присутвуют в звуковых файлах не рассказывают. Хотелось бы исправить эту досадную оплошность. =)

Midnight 18.04.2007 18:43

У меня прога пишет Unsupported File.
Что делать? Прогу закинул в каталог игры.

Feanor62rus 18.04.2007 19:05

А где хранятся модели оружия и разных обьектов? В каком они формате?

TBXin 18.04.2007 19:19

Цитата:

Сообщение от TBXin (Сообщение 1695799)
Папка meshes – игровые модели, в формате .ogf

Feanor62rus хотябы читать научись для начала...
Midnight какой стралкер и какой распаковщик?

Thunderbird 19.04.2007 19:00

TBXin
Ты неподеЦЦЦЦки крут! Побольше таких статей! :mania:

TBXin 19.04.2007 19:21

Добавил:
1.Гармошка
2.Как менять скорострельность и удобность оружия?
3.Как положить оружие в другой слот?
4.Добавление новых опций в меню игры?
5.Скрипты дверей

!!FrEeZeR!! 19.04.2007 20:35

TBXin помоги плиззззз!!! Решил тож занятся модингом сталкера.
Когда добавляю оружие Бармену оно вовсе изчезае. Могу преслать этот фаил. Помоги

TBXin 19.04.2007 20:45

!!FrEeZeR!! проверяй синтаксис и смотри внимательно в какой раздел добавляешь оружие...

Tribolus 19.04.2007 23:28

Вот такой вопрос.
Скачал я мод, делающий из "ножичка" "мясорубку"(почти) (называется сей мод Meat Wish если что). И вот у меня мысля появилась - как добавить скорострельности(если к ножику это применимо) и "взрывной" эффект(да гранаты, рпг, подствольник). конфиги ножа смотрел - ненашел ничего такого. токо если рпм...
Так вот, как всё это сделать?

зы.надеюсь сюда.

Cep}I{AHT 20.04.2007 10:10

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


Часовой пояс GMT +4, время: 20:28.

Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.