В данной теме вы можете задавать любые вопросы касательно 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 по основным вопросам моддинга - обращаемся в ЛС.
народ многие наверняка слышали о Free Play моде на тч, подскажить как сделать подобную систему для зп, и соответственно убрать старые квесты и создать новые?
На какой вопрос конкретно?
Добавлено (26.11.2012, 21:39) --------------------------------------------- ins33, В твоем квесте создан скрипт о передаче денег и предмета?
Uyman358, говоришь на Кордоне граф не трогал. А на Свалке? Самое простое - удали этот графпойнт exit_escape_02 и на Свалке удали этот gar_sim_exit. Перебери графы лок, общий граф и оллспавн.
Теперь нужно прописать эти диалоги Волку, для этого заходим в gamedata\config\gameplay\character_desc_escape.xml и находим профиль Волка(он называется esc_wolf), перед строкой </specific_character> пишем:
Нам понадобятся два диалога: 1 для получения квеста, 2 для передачи ствола.
<dialog id="escape_volk_ak74u_quest"> - Это название диалога
<has_info>esc_kill_bandits_quest_done</has_info> - эта строка означает что квест появится только если получен инфопоршень esc_kill_bandits_quest_done
<dont_has_info>escape_volk_ak74u_start</dont_has_info> - эта строка означает что если получен инфопоршень escape_volk_ak74u_start , то этот диалог больше не появится.
<text>escape_volk_ak74u_quest_0</text> - это ссылка на текст фразы меченого
<next>1</next> - это ссылка на текст с id= 1 , а id= 1 это <text>escape_volk_ak74u_quest_1</text> (ссылка на текст Волка)
<next>2</next> <next>3</next> - эти две строчки означают что идет разветвление диалога
<give_info>escape_volk_ak74u_start</give_info> - выдача инфопоршня, после которого начинается квест
<action>new_life.spawn_ak74u</action> - функция вызываемая из скрипта new_life, в данном случае спаунится предмет AK74У
<action>dialogs.break_dialog</action> - функция отвечающая за выход из диалога
Во втором диалоге есть строка <precondition>new_life.escape_volk_ak74u_have</precondition> - она отвечает за появление диалога если выполняется функция escape_volk_ak74u_have
Теперь нужно сделать текст диалога на русском языке, для этого заходим в gamedata\config\tex\rus\stable_dialogs_escape.xml и в нём пишем следующее(в конце перед </string_table>):
<string id="escape_volk_ak74u_quest_0"> <text>Здорова Волк, для меня есть какая-нибудь работа?</text> </string> <string id="escape_volk_ak74u_quest_1"> <text>Да, есть одно дело: вобщем шёл сюда в лагерь к Сидырычу, решил пройти через тоннель чтоб воякам денег не платить, а там собак было штук десять. Ну я начал отстреливаться, где-то шестерых убил и патроны кончились, пришлось АКСУ выкинуть, чтоб от стаи собак убежать. Таки лежит там наверно АКСУ. \nНу как, возьмёшься? Только осторожней там, после последнего выброса появились в тоннеле перещающиеся аномалии электра.</text> </string> <string id="escape_volk_ak74u_quest_2"> <text>Да, я как раз буду рядом проходить, конечно принесу...</text> </string> <string id="escape_volk_ak74u_quest_3"> <text>Нет, Волк, сам туда иди...</text> </string> <string id="escape_volk_ak74u_quest_completed_0"> <text>Привет, Волк, ну как оно?...</text> </string> <string id="escape_volk_ak74u_quest_completed_1"> <text>Сидор водку не даёт, хе хе, а так всё хорошо.</text> </string> <string id="escape_volk_ak74u_quest_completed_2"> <text>Вот, нашел я твой АКСУ.</text> </string> <string id="escape_volk_ak74u_quest_completed_3"> <text>Эх спасибо тебе Меченый, вот держи, может на что-нибудь хватит.</text> </string>
Итак, диалог готов, теперь нужно сделать сам квест, для этого заходим в gamedata\config\gameplay\tasks_escape.xml и в самом конце пишем:
<infoportion_complete>escape_volk_ak74u_done</infoportion_complete> - квест будет выполнен, если был получен инфопоршень escape_volk_ak74u_done
<article>tex_escape_volk_ak74u</article> - ссылка на текстовый файл с описанием задания
<text>Найти АКСУ</text> - название подзадачи
<function_complete>new_life.escape_volk_ak74u_have</function_complete> - проверка на наличие предмета
<infoportion_set_complete>escape_volk_ak74u_have</infoportion_set_complete> если функция new_life.escape_volk_ak74u_have выполнилась, то выдаётся инфопоршень escape_volk_ak74u_have и выполняется подзадача
<text>Принести АКСУ Волку</text> - название второй подзадачи
<map_location_type hint="Волк">blue_location</map_location_type> - указатель на Волка
<object_story_id>Escape_novice_lager_volk</object_story_id> - id Волка в Файле gamedata\config\game_story_ids.ltx
<infoportion_complete>escape_volk_ak74u_done</infoportion_complete> - если будет получен этот инфопоршень, то выполнится подзадача и соответственно сам квест
Нужно сделать инфопоршни, заходим в gamedata\config\gameplay\info_l01escape.xml и в нём в конце до строчки </game_information_portions> пишем:
Сделаем описание на русском, заходим в stable_dialogs_escape.xml и в конце до строки </string_table> пишем:
<string id="tex_escape_volk_ak74u"> <text>Волк попросил принести потерянный в туннеле АКСУ</text> </string>
Теперь создадим скриптовый файл new_life в gamedata\scripts\new_life.script и пишем:
function spawn_ak74u() amk.spawn_item("wpn_ak74u",vector():set(-78.85,-1.29,154.74),163,189935) -- спавн ak74u в тоннеле на кордоне end
function escape_volk_ak74u_have() return sak.have_item_namber("wpn_ak74u",1) ~= false -- проверка на нахождение предмета в рюкзаке end
function give_volk_ak74u(first_speaker, second_speaker) -- передача предмета sak.out_item_namber("wpn_ak74u", 1) end
function complete_volk_quest(first_speaker, second_speaker) -- получение награды dialogs.relocate_money(second_speaker, 1500, "in") end
Чтобы эти скрипты заработали, нужно создать файлы amk.script и sak.script, в аmk.script пишем
function spawn_item(spawn_item, pos, gv,lv) if gv==nil then gv=db.actor:game_vertex_id() end if lv==nil then lv=db.actor:level_vertex_id() end return alife():create(spawn_item, pos, lv, gv) end
function remove_item_from_inventory(remove_item,npc) if npc==nil then npc=db.actor end if remove_item~=nil then -- npc:mark_item_dropped(remove_item) alife():release(alife():object(remove_item:id()), true) return true end return false end
В sak.script пишем
local items_count=0 local itemin=nil
function have_item_namber(itm,need_namber) local actor=db.actor items_count=0 itemin=itm actor:iterate_inventory(cheking_item,actor) if items_count>=need_namber then return true else return false end end function cheking_item(actor,item) local items=item:section() if items==itemin then items_count=items_count+1 end end function create_items(npc,section,number) for i=1,number do alife():create(section, npc:position(), npc:level_vertex_id(), npc:game_vertex_id(), npc:id()) end end local reloc_params={} local stalk function out_item_namber(itm_section,need_number) reloc_params.itm_section=itm_section reloc_params.itm_cnt=need_number reloc_params.itm_cnt_found =0 db.actor:iterate_inventory(checkout_items_count,db.actor) reloc_params.itm_cnt_found=0 if reloc_params.itm_cnt_found<=reloc_params.itm_cnt then db.actor:iterate_inventory(out_items_count,db.actor) end news_manager.relocate_item(db.actor, "out", itm_section) reloc_params={} end function relocate_item_namber(stalker,itm_section,need_number) stalk=stalker reloc_params.itm_section=itm_section reloc_params.itm_cnt=need_number reloc_params.itm_cnt_found=0 db.actor:iterate_inventory(checkout_items_count,db.actor) reloc_params.itm_cnt_found=0 if reloc_params.itm_cnt_found<=reloc_params.itm_cnt then db.actor:iterate_inventory(reloc_items_count,db.actor) end news_manager.relocate_item(db.actor, "out", itm_section) reloc_params={} end function checkout_items_count(actor,item) if item.section and item:section()==reloc_params.itm_section then reloc_params.itm_cnt_found = reloc_params.itm_cnt_found + 1 end end function reloc_items_count(actor,item) if item.section and item:section()==reloc_params.itm_section and reloc_params.itm_cnt_found<reloc_params.itm_cnt then db.actor:transfer_item(item, stalk) reloc_params.itm_cnt_found = reloc_params.itm_cnt_found + 1 end end function out_items_count(actor,item) if item.section and item:section()==reloc_params.itm_section and reloc_params.itm_cnt_found<reloc_params.itm_cnt then amk.remove_item_from_inventory(item, actor) reloc_params.itm_cnt_found = reloc_params.itm_cnt_found + 1 end end
ВСё! Можно тестировать.
ПРИМЕЧАНИЕ!!!Если вы делаете такой квест на оригинальном сталкере, то ОБЯЗАТЕЛЬНО нужно создать файлы new.script или что-то своё.
Вот пример по созданию квеста на ТЧ
Сообщение отредактировал dmitry778 - Понедельник, 26.11.2012, 22:22
dmitry778, Как я понимаю, квест сдаётся при получении поршня. Взяв предмет можно выдать поршень. Подскажи где ошибки. СПС. И подобные Квесты как в уроке уже писал. А вот поис одного предмета в первые пишу. И диалога на сдачу квеста не будет.
Добавлено (26.11.2012, 22:30) --------------------------------------------- Диалоги, текст поршни прописаны. Спавн свд происходит. Метка вешается на него. В пда задание появляется. Беру свд, поршень не выдаётся.
Добавлено (26.11.2012, 22:31) --------------------------------------------- Соответственно квест не сдаётся.
Rap4ik, скачай мини-мод LootmoneyMOD v1.0 для S.T.A.L.K.E.R COP 1.6.01. У меня работает.
Добавлено (26.11.2012, 22:53) --------------------------------------------- Может ктонить дать ссылку на внятный урок по созданию смарт-терейнов в ЗП. Или, если есть желание, написать тутор. Заранее благодарю!
function has_meshok_2(task, objective) if db.actor ~= nil then if db.actor:object("предмет") then db.actor:give_info_portion("поршень") return true end end return false end
Не работает. СПС.
Сообщение отредактировал ins33 - Вторник, 27.11.2012, 00:05
Uyman358, поэтому и спросил:Удалял ли пойнт на Свалке? Вот твой лог: Level with id 1 has an INVALID connection point exit_escape_02, which references to graph point gar_sim_exit on the level with id 2 Вот этот пойнт exit_escape_02 на Кордоне должен быть связан с этим gar_sim_exit на Свалке.Видимо второго на Свалке у тебя нет.На Кордоне должен быть ещё один exit_escape_01, который тоже связывает локи.Так что,если на Свалке нет gar_sim_exit, смело удаляй exit_escape_02 на Кордоне.
Arist, у меня на Свалке вообще нет графпоинтов, связанных с другими локациями, кроме ТД, но и там нет поинта, который связан со Свалкой. Как такое могло произойти, я ни один граф не трогал ни на одной локации?
Arist, я не Шее , но тоже почитал твой "MyWabPage"... Очень хорошая и полезная статья! Но правильней и "красивей", будет, если ты разместишь ее тут в разделе "Помощь в моддинге", как еще один "тутор", сославшись на "MyWabPage" и указав автора... Нет?