В данной теме вы можете задавать любые вопросы касательно 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 по основным вопросам моддинга - обращаемся в ЛС.
makdm, А что все ошибки вызывают вылет? Обычно бывает что функции тихо виснут, в следствии чего, получается разнообразный букет. Даже abort срабатывает 3 раза из 10 ((
Кстати ну тут вы правы у меня действительно была ошибка
local dir = commander:direction() --' Вот это строка
Ошибка attemp to index local commander a nil value
И по моим наблюдениям алгоритм действий удаление/получение командира происходит с ошибкой...
Такой вопрос Скрипты: Получил объект в игре. Аномалия. Как получить ее радиус и силу? И еще к этому же вопрос - есть секция аномалии "..._weak" и там указывается максимальная и минимальная сила. Я правильно понимаю что это и будет сила, которая у объекта. Вот про радиус я не вижу в конфигах ничего
Добавлено (31.10.2015, 18:49) --------------------------------------------- UPD вопрос про радиус снимается, нашел вроде
Новый вопрос Я пробегаю по объектам игры в цикле и в теле цикла спавню новый объект Вопрос - почему он не появляется в игре?
if xr_conditions.actor_in_zone(actor, npc, {"zat_a2_bochka_dla_vodi_restr"})
and db.actor:object("flyaga_pystay") then
dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "flyaga_pystay") and dialogs.relocate_item_section(second_speaker, "flyaga", "in") end
end
Должно провериться два условия - актор в зоне рестриктора, и есть ли к него предмет, тогда, если оба правильны, должны выполниться два действия - забрать предмет, и выдать другой. Скрипт размещен в xr_effects.script При НИ вылет с таким логом
Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ....e.r. - Зов Припяти\gamedata\scripts\xr_logic.script:648: attempt to index global 'xr_effects' (a nil value)
В чем ошибка? Если убрать скрипт из xr_effects и переместить в другой скриптовый файл, то при юзании туториала происходит безлоговый вылет. Вот на всяк случай сам тутор и логика рестриктора
Зараннее спасибо за помощь! Все, разобрался, надо было скрипт так написать, мож пригодится кому
function zat_a2_bochka_dla_vodi(actor, npc)
if xr_conditions.actor_in_zone(actor, npc, {"zat_a2_bochka_dla_vodi_restr"})
and db.actor:object("flyaga_pystay") then
remove_item(actor, npc, {"flyaga_pystay"}) give_actor(db.actor,nil,{"flyaga"}) end
end
Добавлено (01.11.2015, 11:45) --------------------------------------------- Скажите, а можно при отыгрывании туториала проиграть определенный звук? Если можно то как? И еще: можно в ЗП как в ТЧ спавнить левел чейнджеры при определенном условии? Зараннее спасибо!
Сообщение отредактировал _S_k_i_F_ - Воскресенье, 01.11.2015, 11:50
_S_k_i_F_, нужно в скрипт, который при юзании туториола запускается, добавить строчки по типу таких:
Код
local sObj = sound_object([[actor\die3]]) --'путь до звукового файла sObj:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d)
однако, иногда таким образом звуковой файл может клинить: играть слишком громко, зацикленно или прерываться на какой-то секунде. чтобы этого не было, надо файл прописать в script_sound.ltx, а в функцию добавить это:
Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ... Зов Припяти\gamedata\scripts\mod_callbacks_8.script:14: attempt to index global 'ui_gui_elements_2' (a nil value)
До этого создавал уже два таких комплекса и ничего такого не было. Вот все что делал
class "ui_razgryz" (CUIScriptWnd) --Регистрация нового класса гуи-элемента от существующего класса CUIScriptWnd
function ui_razgryz:__init(owner) super() --Иницилизируем класс, добавляем отсылки к функциям self.owner = owner self:InitControls() --Отсылка к функции регистрации элементов окна self:InitCallBacks() --Отсылка к функции регистрации коллбеков (условий) end
function ui_razgryz:__finalize() --Функция завершения работы нового класса end
function ui_razgryz:OnKeyboard(dik,keyboard_action) --Функция закрытия окна по нажатию на клавиатуре "Escape" CUIScriptWnd.OnKeyboard(self,dik,keyboard_action) --Инициализируем нажатие кнопки на клаве if keyboard_action == ui_events.WINDOW_KEY_PRESSED then --Условие: если нажата кнопка на клаве if dik == DIK_keys.DIK_ESCAPE then --Условие: если нажата конкретно кнопка "Escape" if has_alife_info("gui_razgryz_got_grenade_f1") and has_alife_info("gui_razgryz_got_ammo_5.45x39_ap") and has_alife_info("gui_razgryz_got_ammo_9x18_pmm") and has_alife_info("gui_razgryz_got_ammo_7.62x54_7h1") and has_alife_info("gui_razgryz_got_ammo_vog_25") then self:HideDialog() --То при нажатии на кнопку - закрываем окошко disable_info("gui_razgryz_got_grenade_f1") --И деактивируем обратно инфы, чтобы потом не было глюков disable_info("gui_razgryz_got_ammo_5.45x39_ap") disable_info("gui_razgryz_got_ammo_9x18_pmm") disable_info("gui_razgryz_got_ammo_7.62x54_7h1") disable_info("gui_razgryz_got_ammo_vog_25") else --В любом другом случае self:HideDialog() --При нажатии на кнопку закрытия, закрываем окошко end end end return true end
function ui_razgryz:OnButton_grenade_f1_clicked() --Функция коллбека кнопки взятия цистамина db.actor:give_info_portion("gui_razgryz_got_grenade_f1") --Инфопорция give_object_to_actor("grenade_f1", 3) --Выдаем цистамин self.button_grenade_f1:Enable(false) --После этих действий кнопка больше не работает end
function ui_razgryz:OnButton_ammo_5.45x39_ap_clicked() --Функция коллбека кнопки взятия калиума db.actor:give_info_portion("gui_razgryz_got_ammo_5.45x39_ap") --Инфопорция give_object_to_actor("ammo_5.45x39_ap", 3) --Выдаем калиум self.button_ammo_5.45x39_ap:Enable(false) --После этих действий кнопка больше не работает end
function ui_razgryz:OnButton_ammo_9x18_pmm_clicked() --Функция коллбека кнопки взятия хлора db.actor:give_info_portion("gui_razgryz_got_ammo_9x18_pmm") --Инфопорция give_object_to_actor("ammo_9x18_pmm", 3) --Выдаем хлор self.button_ammo_9x18_pmm:Enable(false) --После этих действий кнопка больше не работает end
function ui_razgryz:OnButton_ammo_7.62x54_7h1_clicked() --Функция коллбека кнопки взятия ПШ db.actor:give_info_portion("gui_razgryz_got_ammo_7.62x54_7h1") --Инфопорция give_object_to_actor("ammo_7.62x54_7h1", 3) --Выдаем ПШ self.button_ammo_7.62x54_7h1:Enable(false) --После этих действий кнопка больше не работает end
function ui_razgryz:OnButton_ammo_vog_25_clicked() --Функция коллбека кнопки взятия сульфада db.actor:give_info_portion("gui_razgryz_got_ammo_vog_25") --Инфопорция give_object_to_actor("ammo_vog-25", 3) --Выдаем сульфад self.button_ammo_vog_25:Enable(false) --После этих действий кнопка больше не работает end
function ui_razgryz:OnButton_close_clicked() --Функция коллбека кнопки закрытия --Если все медикаменты распакованы: if has_alife_info("gui_razgryz_got_grenade_f1") and has_alife_info("gui_razgryz_got_ammo_5.45x39_ap") and has_alife_info("gui_razgryz_got_ammo_9x18_pmm") and has_alife_info("gui_razgryz_got_ammo_7.62x54_7h1") and has_alife_info("gui_razgryz_got_ammo_vog_25") then self:HideDialog() --То при нажатии на кнопку - закрываем окошко disable_info("gui_razgryz_got_grenade_f1") --И деактивируем обратно инфы, чтобы потом не было глюков disable_info("gui_razgryz_got_ammo_5.45x39_ap") disable_info("gui_razgryz_got_ammo_9x18_pmm") disable_info("gui_razgryz_got_ammo_7.62x54_7h1") disable_info("gui_razgryz_got_ammo_vog_25") else --В любом другом случае self:HideDialog() --При нажатии на кнопку закрытия (в окошке), закрываем окошко end end
function run_ui_razgryz(folder) folder:ShowDialog(true) end
function on_use_item(sect) --Переменные (пусть будут на будущее, но можно и удалить) local actor=db.actor local item_name=sect:section() local actor_pos=db.actor:position() local active_slot=db.actor:active_slot() local active_item=db.actor:active_item() local pistol_in_slot=db.actor:item_in_slot(2) local rifle_in_slot=db.actor:item_in_slot(3) local outfit_in_slot=db.actor:item_in_slot(7) local helm_in_slot=db.actor:item_in_slot(12) --Коллбеки if item_name=="razgryz" then --При использовании аптечки run_gui(ui_gui_elements_2.ui_razgryz()) --Запускаем Gui end end
mod_callbacks_8.script:14: attempt to index global 'ui_gui_elements_2' (a nil value)
Тут четко написано: скрипт mod_callbacks_8.script, строка 14, не понимаю, что такое 'ui_gui_elements_2'. Отсюда и пляши. И что за тег <gui>? По идее должен быть <w>.
Сообщение отредактировал denis2000 - Воскресенье, 01.11.2015, 17:41
До этого создавал уже два таких комплекса и ничего такого не было.
Может быть ошибка в подобных razgryz:caption_ammo_5.45x39_ap? Идёт вызов XML.файла, а дальше ошибки в скрипте. script Syntax Checker от Gun12 нет? Советую поставить. Error
Цитата
Тут четко написано: скрипт mod_callbacks_8.script, строка 14, не понимаю, что такое 'ui_gui_elements_2'. Отсюда и пляши.
Я тоже так подумал. Но почему ЛУА-чекер ругается? Я так понимаю, идёт вызов 'ui_gui_elements_2' из скрипта, а потом скрипт читается дальше до caption_ammo_5.45x39_ap и получается ошибка в скипте и вылет. Может [b]чекер[i] глючит ?
Сообщение отредактировал Arist - Воскресенье, 01.11.2015, 16:09
Поменял названия итемов типа ammo_5.45x39_ap на ammokalashbb и т.д. и все заработало. Можно на класс physic_object поставить метку как на inventory_box на личный ящик ГГ? Зараннее спасибо!
Сообщение отредактировал _S_k_i_F_ - Воскресенье, 01.11.2015, 18:03
Но почему ЛУА-чекер ругается? Я так понимаю, идёт вызов 'ui_gui_elements_2' из скрипта, а потом скрипт читается дальше до caption_ammo_5.45x39_ap и получается ошибка в скипте и вылет.
Цитата_S_k_i_F_ ()
Поменял названия итемов типа ammo_5.45x39_ap на ammokalashbb и т.д. и все заработало.
Все верно, XML пасер не мог разобраться с файлом ui_gui_elements_2.xml из-за нечитаемых с его точки зрения тегов типа caption_ammo_5.45x39_ap, вот и вылет на строке xml:ParseFile ("ui_gui_elements_2.xml").
Цитата_S_k_i_F_ ()
Можно на класс physic_object поставить метку как на inventory_box на личный ящик ГГ?
Пробуйте в аллспавне:
Код
custom_data = <<END [level_spot] my_level_spot
END
Сообщение отредактировал denis2000 - Воскресенье, 01.11.2015, 18:25
И не появится. Дело в том, что метка устанавливается в биндере физических объектов. А сам биндер работает только с теми объектами, которые имеют секцию логики, так как биндить объекты без логики не имеет смысла. Исключение только класс inventory_box, который биндится всегда.
Добавьте свой класс объекта в биндер, по аналогии с inventory_box и будет вам счастье в виде метки на карте.
[75] ; cse_abstract properties section_name = space_restrictor name = atp position = 77.857963562012,-0.0080345869064331,-264.99807739258 direction = 0,0,0
[76] ; cse_abstract properties section_name = space_restrictor name = dom position = -246.88775634766,12.00657081604,-201.85491943359 direction = 0,0,0
[77] ; cse_abstract properties section_name = space_restrictor name = baza position = 229.07659912109,-0.00052133202552795,6.4076499938965 direction = 0,0,0
Добавляю эти рестрикторы в спавн, и происходит ошибка компилятора acdc. Что тут не так? ошибка компилятора [spoiler] последние строки line 2347 , <GEN1> line 1983
Сообщение отредактировал СЕРА - Воскресенье, 01.11.2015, 19:22