В данной теме вы можете задавать любые вопросы касательно S.T.A.L.K.E.R. моддинга.
Не флудить
Предварительно просматривайте раздел. Ответ на ваш вопрос может быть там.
В своем вопросе указывайте платформу моддинга - Тень Чернобыля, Чистое небо или Зов Припяти.
1. Какая стоит игра, с каким патчем? 2. Какой мод, версия мода? 3. Что правили своими ручками? 4. Конфиг компа. 5. Лог вылета и последние 25 строк (помещать под спойлер).
Структура папок и файлов в корневом каталоге игры:
...\S.T.A.L.K.E.R\gamedata\anims – папка содержит исполнительные файлы эффектов (например от ПНВ).
...\S.T.A.L.K.E.R\gamedata\config – папка содержит основные конфигурационные файлы (т. е. большинство настроек игры)
...\S.T.A.L.K.E.R\gamedata\meshes – содержит модели игровых предметов и персонажей...
...\S.T.A.L.K.E.R\gamedata\scripts – папка со скриптами (рабочими файлами содержащими в себе наборы функций) – основная папка, отвечающая за ответные действия игры и действия производимых игроком в игре.
...\S.T.A.L.K.E.R\gamedata\shaders – папка содержит в себе конфигурационные файлы шейдеров.
...\S.T.A.L.K.E.R\gamedata\sounds – здесь находятся все звуки игры (разложены по своим каталогам и папкам)
...\S.T.A.L.K.E.R\gamedata\spawns – содержит файл спавна – очень важный файл – не трогать без нужды!!!
...\S.T.A.L.K.E.R\gamedata\textures – содержит разложенные по каталогам и папкам текстуры используемые в игре.
Теперь разберем папки в каталоге «config»
...\S.T.A.L.K.E.R\gamedata\config\creatures - содержит массу конфигурационных файлов, в основном отвечающих за взаимодействие Главного героя игры (в дальнейшем ГГ) и прочего окружения в игре и ТТХ самого ГГ.
...\S.T.A.L.K.E.R\gamedata\config\gameplay – содержит конфиг. файлы персонажей игры (НПС) отвечающие за внешний вид, статус, снаряжение. Файлы: character_desc_ххх (где ххх – название локации) и character_desc_general (отвечает за зомбированного персонажа). Также содержит файлы диалогов и профилей НПС.
…\S.T.A.L.K.E.R\gamedata\config\misc – конфиг.файлы торговцев (папки с именами торговцев), артефактов, брони, квестовых предметов, уникальных предметов, файл отвечающий за награды за автозадания, файл эффектов (алкоголизма, ранения, ПНВ и прочих)...
…\S.T.A.L.K.E.R\gamedata\config\mp – среди прочих содержит важный файл mp_ranks – отвечающий за выпадение оружия и патронов из рук ГГ и НПС – без прописывания добавляемого в игру оружия в этот файл при выпадении нового оружия из рук ГГ\НПС будут следовать вылеты.
…\S.T.A.L.K.E.R\gamedata\config\text\rus – содержит файлы описаний всего и вся находящегося в игре (брони, артефактов, оружия, предметов и прочего).
…\S.T.A.L.K.E.R\gamedata\config\weapons – содержит конфиг.файлы оружия и боеприпасов используемых в игре.
…\S.T.A.L.K.E.R\gamedata\config\weathers – содержит конфиг.файлы настройки погоды на локациях.
Теперь немного подробнее о файлах.
...\S.T.A.L.K.E.R\gamedata\config\misc:
Папка shop_ххх (ххх – имя торговца) – содержит конфиг.файлы ассортимента торговца.
outfits – содержит секции конфигов костюмов.
artefacts - содержит секции конфигов артефактов.
items - содержит секции конфигов предметов.
monster_items - содержит секции конфигов частей монстров
postprocess - содержит секции конфигов пост. процессов (например: ПНВ).
quest_items - содержит секции конфигов квестовых предметов.
task_manager - содержит секции наград за автоквесты.
unique_items - содержит секции конфигов уникального оружия и костюмов.
У кого есть желание, создать FAQ по основным вопросам моддинга - обращаемся в ЛС.
Подскажите, в xr_gulag.script level_groups тоже самое, что и upd:g_group и g_group в all.spawn? И в двух словах объясните, что такое squad в ТЧ.
Добавлено (27.05.2014, 00:48) --------------------------------------------- Подскажите, как узнать что за нпс был только что убит? Мне надо узнать имя секции этого пипла.
function now_death(victim,who) if victim and IsStalker(victim) and victim:character_community()~="zombied" then if victim:section() ~= nil then news_manager.send_tip(db.actor, "%c[255,195,0,0]".."Секция.".."\\n".."%c[default] "..victim:section().."\n", nil, nil, 5000) printf("Секция "..victim:section()) if victim:profile_name() ~= nil then news_manager.send_tip(db.actor, "%c[255,195,0,0]".."Имя профиля.".."\\n".."%c[default] "..victim:profile_name().."\n", nil, nil, 5000) printf("Имя профиля "..victim:profile_name()) if victim:name() ~= nil then news_manager.send_tip(db.actor, "%c[255,195,0,0]".."Имя.".."\\n".."%c[default] "..victim:name().."\n", nil, nil, 5000) printf("Имя "..victim:name()) end end end end end
Вызов ф-ии из xr_motivator.script hwo_is_death.now_death(victim,who)
Сообщение отредактировал ins33 - Вторник, 27.05.2014, 16:01
ins33, в вашем посте абсолютно непонятно, откуда вызывается функция now_death и что это за параметры, которые передаются в неё. Поэтому и дополнил ваш ответ.
Один из способов подключения локаций. Автор: KamikaZze Самое главное - правильно настроенные конфиги заранее. Что нужно сделать с конфигами: game_graphs.ltx - добавить в конец секции [location_0] новую локацию, аналогично тем что там уже прописаны.
Главное - чтобы локация не вклинилась в сетку, надо ей дать новый id - тут у нас он 22. Запомним его, он должен совпадать во всех конфигах. game_levels.ltx - добавить в конец секции [levels], и создать новую подсекцию локации с тем же именем. У меня получилась level22 (id из game_graphs.ltx). Создаём для неё в конце конфига пропись:
[level01] name = L01_Escape caption = "L01_Escape" offset = 3000.0, 1000.0, 0.0 id = 01
[level02] name = L02_Garbage caption = "L02_Garbage" offset = 3000.0, 1000.0, 1000.0 id = 02
[level03] name = L03_Agroprom caption = "L03_Agroprom" offset = 2000.0, 1000.0, 1000.0 id = 03
[level04] name = l03u_agr_underground caption = "l03u_agr_underground" offset = 2000.0, 800.0, 1000.0 id = 04
[level05] name = l04_darkvalley caption = "l04_darkvalley" offset = 4000.0, 1000.0, 1000.0 id = 05
[level06] name = l04u_LabX18 caption = "l04u_LabX18" offset = 4000.0, 800.0, 1000.0 id = 06
[level07] name = L05_Bar caption = "L05_Bar" offset = 3000.0, 1000.0, 2000.0 id = 07
[level08] name = L06_rostok caption = "L06_rostok" offset = 2000.0, 1000.0, 2000.0 id = 08
[level09] name = l08_yantar caption = "l08_yantar" offset = 1000.0, 1000.0, 2000.0 id = 09
[level10] name = l08u_brainlab caption = "l08u_brainlab" offset = 1000.0, 800.0, 2000.0 id = 10
[level11] name = L07_Military caption = "L07_Military" offset = 3000.0, 1000.0, 3000.0 id = 11
[level12] name = L09_Deadcity caption = "L09_Deadcity" offset = 1000.0, 1000.0, 3000.0 id = 12
[level13] name = l10_radar caption = "l10_radar" offset = 3000.0, 1000.0, 4000.0 id = 13
[level14] name = L11_Pripyat caption = "L11_Pripyat" offset = 3000.0, 1000.0, 5000.0 id = 14
[level15] name = L12_Stancia caption = "L12_Stancia" offset = 2000.0, 1000.0, 8000.0 id = 15
[level16] name = L12U_Sarcofag caption = "L12U_Sarcofag" offset = 2000.0, 1200.0, 8000.0 id = 16
[level17] name = l12u_control_monolith caption = "l12u_control_monolith" offset = 2000.0, 1400.0, 8000.0 id = 17
[level18] name = k01_darkscape caption = "k01_darkscape" offset = 4000.0, 1000.0, 0.0 id = 18
[level19] name = L12_Stancia_2 caption = "L12_Stancia_2" offset = 2000.0, 1000.0, 9000.0 id = 19
[level20] name = l10u_bunker caption = "l10u_bunker" offset = 3000.0, 800.0, 4000.0 id = 20
[level21] name = l23_final_battle caption = "l23_final_battle" offset = 2000.0, 800.0, 9000.0 id = 21
[level22] name = marsh ;имя локации, берется по имени папки caption = "marsh" ;имя на карте offset = 2000.0, 1000.0, 0.0 ;точно не помню id = 22 ;id из game_graphs.ltx
game_maps_single.ltx - дописать в конец [level_maps_single] текстовое имя локации - marsh, затем создать новую подсекцию локации - [marsh]. Заполнить параметры:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [marsh] texture = map\map_marsh ;текстура карты global_rect = 22.0, 2113.0, 352.0, 2443.000000 ;расположение на глобальной карте ;1 значение - ширина текстуры (чем значение больше, тем карта уже. правый край неподвижен) ;2 значение - длина текстуры (чем значение больше, тем карта короче. нижний край неподвижен) ;3 значение - ширина текстуры (чем значение больше, тем карта шире. левый край неподвижен) ;4 значение - длина текстуры (чем значение больше, тем карта длиннее. верхний край неподвижен) bound_rect = -445.000000,-445.000000,755.000000,755.000000 ;если не ошибаюсь, то минимальные и максимальные координаты "х" и "у", когда заканчивается земля и начинается обрыв локации. weathers = marsh ;погодный конфиг, файл с конфигом добавляется по адресу config/weathers. Если неохота заморачиваться, то можно взять от другой локации. music_tracks = l13_marsh_musics ;амбиент, секция с конфигом добавляется в файл game_levels_music.ltx. Если неохота заморачиваться, то можно взять от другой локации.
Открываем нашу локацию в le. В настройках сцены выстваляем качество draft (самое плохое качество. Для тестирования пока и так сойдет. Перед финальной компиляцией качество можно поменять.) Правим, если надо геометрию. Добавляем нужные нам спавн элементы. Также добавляем graph_point`ы. Если не изменяет память, на локации обязательно должны присутствовать источники света (light) и glow. Правим/добавляем AI-сетку. Затем в le, выбираем Make AI-map, затем Make game и в конце Build. Если все сделали правильно, то все пройдет успешно. Теперь, если правили AI-сетку и/или геометрию, то надо скомпилировать локацию. Можно воспользоваться стандартным xrLC или ускоренными компиляторами от macron. (Тут дело вкуса. Я пользуюсь ускоренными компиляторами.) В принципе, если качество локации драфтовое, то процесс пройдет быстро на любом компиляторе. Если меняли только спавн, геометрию и/или AI-сетку не трогали,то локацию можно не компилить и переходить к aiwrapper`у или стандартному xrAI. (Тоже дело вкуса, я пользуюсь aiwrapper`ом.) Батник компилятора. Приведен пример батника стандартного xrLC.
Если меняли только спавн, геометрию и/или AI-сетку не трогали, то нас интересует только 4 и 5 батники aiwrapper`а.
Нам понадобятся файлы: Старый геймграф мода Геймграф сформированный при компиляции локации Старый аллспавн мода Аллспавн сформированный при компиляции локации Файлы level.ai и level.gct ВСЕХ локаций, которые уже есть в моде - если новых нету то все оригинала Папка с полностью готовой локацией Утилиты ACDC, gg_cdc_x, ggrc Сначала надо выяснить, правильно ли у нас по геймвертексам села локация. Для этого кидаем геймграф сформированный при компиляции локации в папку с ACDC и прогоняем команду ggtool.pl game.graph Утилита выдаст нам табличку всех переходов и геймвертексов локаций. Нас интересует список вертексов.
Новая локация должна быть САМОЙ последней, и за ней не должно больше идти никаких локаций. Запишем себе её стартовый вертекс - в данном случае 2792. Если локация вклинилась в середину списка значит мы ей дали не самый последний Id - это не годится, так как переколбасит весь игровой граф, спавн и мы вручную устанем это сводить. Поэтому возвращаемся к шагу 1. Если же локация как положено в конце, всё отлично, можно работать дальше. Теперь надо поправить АСДС - открываем acdc.pl, находим по тексту "constant levels_inf" структуру с разбиением локаций по геймграфам. Убеждаемся что границы локаций совпадают с теми что у нас получились при проверке графа, удаляем оттуда лишние и вписываем в самый верх нашу локацию. Получится примерно вот так.
Код
use constant levels_info => ( { gvid0 =>3700, }, { gvid0 => 2792, name => 'marsh' }, { gvid0 => 2661, name => 'l10u_bunker' }, { gvid0 => 2517, name => 'l12_stancia_2' }, { gvid0 => 2467, name => 'l12u_control_monolith' }, { gvid0 => 2402, name => 'l12u_sarcofag' }, { gvid0 => 2273, name => 'l12_stancia' }, { gvid0 => 2117, name => 'l11_pripyat' }, { gvid0 => 1862, name => 'l10_radar' }, { gvid0 => 1545, name => 'l07_military' }, { gvid0 => 1529, name => 'l08u_brainlab' }, { gvid0 => 1438, name => 'l08_yantar' }, { gvid0 => 1308, name => 'l06_rostok' }, { gvid0 => 1168, name => 'l05_bar' }, { gvid0 => 1109, name => 'l04u_labx18' }, { gvid0 => 811, name => 'l04_darkvalley' }, { gvid0 => 703, name => 'l03u_agr_underground' }, { gvid0 => 416, name => 'l03_agroprom' }, { gvid0 => 252, name => 'l02_garbage' }, { gvid0 => 0, name => 'l01_escape' },
Сохраняем acdc.pl, она нам чуть позже понадобится для спавна. Теперь надо свести единый граф с нашей новой локацией. Для этого берём ggrc. Копируем в его папку в папку levels целиком нашу папку с новой локацией, а так же создаём папки всех локаций что уже есть в игре, и копируем туда файлы level.ai и level.gct всех локаций, которые уже есть. В корень копируем старый граф мода, и туда же рядом - новый граф, переименовав его в game2.graph Теперь правим батник для подключения локации - в нём надо указать какие локации брать из первого графа, и какие из второго, а так же типы графов. У меня получился вот такой батник. Пример батника
Запускаем, ждём пока обработается. Если всё прокатило, тогда мы получим новый файл game.graph.new - в который вписана локация. Нужно тут же его утащить и распаковать с помощью gg_cdc_x - проверить game.graph.info.cross_edges.ltx - все ли переходы остались на месте (должны быть все), а так же как вписалась локация - в game.graph.levels.ltx наша локация должна быть конечной и с самым большим level_id. В game.graph.levels_info.ltx она тоже должна быть последней, там же можно увидеть её минимальный и максимальный вертексы. Минимальный вертекс должен быть тот же? что был когда проверяли граф, сделанный компилятором - у нас это был вертекс 2792. Теперь необходимо проверить, не сдвинулись ли идентификаторы локаций в графе. Почти наверняка - сдвинулись, так как в оригинале там есть груда ссылок на тестовые локации разработчиков. Проверить это можно в game.graph.levels.ltx, сравнив идентификаторы локаций там с идентификаторами в конфигах game_graphs.ltx и game_levels.ltx - если они отличаются, то обязательно поправляем идентификаторы в конфигах на те, что в геймграфе!
По добавлению переходов - чтобы их добавить нам желательно было заранее создать кроссграфы на локации. Если мы это сделали, тогда нам нужно сделать вот что - распаковать геймграф, сформированный при компиляции локации. Находим там в конфиге графов новой локации - game.graph.edges.<id_нашей_локации> сделанные нами переходы - они будут помечены как "crosslevel edge". Ещё их легко найти по параметру target_level_id - он у них отличается от исходного для этой локации. После того как нашли - скопируем их прописи в отдельный файл. Затем открываем конфиг новой локации в сведённом вместе графе. При сведении переходы прибились, поэтому надо теперь в новом конфиге найти те же самые графпоинты на которых висели переходы. Ищем их по параметру parent_level_vertex_id. Как только найдем - перед тем как править - скопируем в отдельный файл. Затем заменим им параметры target_level_id, target_level_vertex_id и game_vertex_id на те, которые были у сделанных нами переходов. Не забудем выставить дистанцию - это будет расстояние перехода. Сохраняемся. Теперь откроем конфиги game.graph.edges.<id_нашей_локации> тех локаций на которые создали переходы - нужно же сделать ещё переходы в обратную сторону. Открыв, находим там те графы, с которыми только что сделали соединения с новой локации. Ищем по параметру parent_level_vertex_id - у наиболее подходящего графпоинта он будет равен target_level_vertex_id перехода с новой локации. После того как нашли, открываем файл в который сохранили не изменённые ещё графпоинты новой локации, на которые были сделаны переходы. Теперь аналогично - заменяем им параметры target_level_id, target_level_vertex_id и game_vertex_id на те, которые были у графпоинтов новой локации до изменения. Так мы добьемся того, чтобы входы и выходы с локации были примерно на одном месте. Не забываем выставить дистанцию! Теперь всё сохраняем, и компилируем граф. Если всё сделано правильно граф сохранится, и при проверке его ggtool.pl мы увидем в списке сделанные нами переходы.
Если всё нормально, то можно скопировать граф в итоговый пакет. Теперь важно - нужно так же не забыть скопировать в итоговый пакет файлы, которые при слиянии были поправлены в папке нашей локации. Это: level.gct level.graph level.ai А так же проверить - были ли внесены изменения в файлы level.ai и level.gct уже существующих локаций. Если да, то изменённые файлы тоже надо будет скопировать в итоговый пакет. Теперь займёмся спавном. Берём наш поправленный АСDС и распаковываем спавн, полученный при компиляции локации. Забираем оттуда конфиг нашей новой локации. Затем распаковываем аллспавн мода и кидаем в его папку конфиг нашей новой локации. Прописываем его в all.ltx аллспавна мода, и увеличиваем в all.ltx индекс локаций level_count на единицу. Больше в all.ltx ничего не трогаем. Далее проверяем число объектов в нашем спавне, и перенумеровываем объекты в конфиге нашей новой локации так, чтобы они были добавлены в конец нумерации. Проверяем прописанные в конфиге нашей новой локации геймвертексы объектов - они должны лежать в пределах вертексов, которые мы получили при проверке геймграфа в файле game.graph.levels_info.ltx. Запаковываем спавн обратно и копируем его в итоговый пакет.
В итоговый пакет (папка gamedata) у нас войдут: Конфиги: game_graphs.ltx game_levels.ltx game_maps_single.ltx Папка с самой локацией, при этом в ней должны быть обновлены файлы level.gct level.graph level.ai (теми, которые получили при слиянии графа с помощью ggrc) Изменённые при слиянии графа файлы level.ai и level.gct уже существующих локаций (если локация добавлена нормально, то изменённых может и не быть вообще) Слитый game.graph Слитый all.spawn Необходимые для локации шейдеры Необходимые для локации текстуры
Я знаю, что некоторые иначе подключают себе локации. Но для меня более удобным и приемлемым является данный способ. Если что не понятно, спрашивайте. Спасибо за внимание.
Всем привет! подскажите как можно сделать ГГ "тоньше", что бы легче проходить в узких коридорах и не толкаться с НПС. Я встречал урок в интернете, помню что нужно было в каком то файле конфиги править, а как и где не помню.