В данной теме вы можете задавать любые вопросы касательно S.T.A.L.K.E.R. моддинга
• Не флудить • Предварительно просматривайте раздел, ведь ответ на ваш вопрос может быть там • В своем вопросе указывайте платформу моддинга — Тень Чернобыля, Чистое небо или Зов Припяти
1. Какая стоит игра, с каким патчем? 2. Какой мод, версия мода? 3. Что правили своими ручками? 4. Лог вылета и последние 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 - содержит секции конфигов уникального оружия и костюмов.
И снова проблема с ГУИ... Взял абсолютно рабочее ГУИ, в скрипте поменял только действия при нажатии на кнопки, в конфиге текстуру и координаты - итог - новое ГУИ не работает - кнопки не реагируют на клики. В чем может быть проблема??? Рабочее ГУИ
class "ui_proslyshka" (CUIScriptWnd)
function ui_proslyshka:__init(owner) super() self.owner = owner self:InitControls() self:InitCallBacks() end
function ui_final:InitCallBacks() self:AddCallback("button_ystanovka", ui_events.BUTTON_CLICKED, self.OnButton_ystanovka_clicked, self) self:AddCallback("button_close", ui_events.BUTTON_CLICKED, self.OnButton_close_clicked, self) end
function ui_final:OnButton_ystanovka_clicked() give_info("jup_pr_final_in_tonnel") xr_effects.teleport_actor(nil, nil, {"jup_pr_final_in_tonnel_walk","jup_pr_final_in_tonnel_look"}) self:HideDialog() end
function ui_final:OnButton_close_clicked() xr_effects.teleport_actor(nil, nil, {"jup_pr_final_inside_tonnel_walk","jup_pr_final_inside_tonnel_look"}) self:HideDialog() end
function run_ui_final(folder) folder:ShowDialog(true) end
Может кто-то знает, в чем может быть проблема? Зараннее спасибо!
Добавлено (25.11.2016, 20:12) --------------------------------------------- Еще такой вопрос: написал скрипт
Код
--// Медикаменты \\-- function get_medicine() local item_medicine = nil local rnd = math.random(100) local rnd2 = math.random(3) local rnd3 = math.random(100) local medkits = {"medkit","medkit_army","medkit_scientic", "antirad", "bandage"} local boosters = {"drug_coagulant","drug_booster","drug_psy_blockade","drug_antidot","drug_radioprotector"} local anabiotic = {"drug_anabiotic"} if rnd <= 85 then if rnd2 == 1 then item_medicine = medkits[math.random(#medkits)] elseif rnd2 == 2 then item_medicine = boosters[math.random(#boosters)] elseif rnd2 == 3 then if rnd3 > 90 then item_medicine = anabiotic end end end
if item_medicine ~= nil then return item_medicine end
end
--// Оружие и боеприпасы \\-- function get_weap_and_ammo() local ammo_weap = nil local item_weap = nil local rnd = math.random(100) local rnd2 = math.random(100) local rnd3 = math.random(3) local rnd4 = math.random(100) local pistols1 = {"wpn_pm","wpn_pb","wpn_fort"} local pistols2 = {"wpn_hpsa","wpn_beretta","wpn_walther","wpn_mp5"} local pistols3 = {"wpn_sig220","wpn_colt1911","wpn_usp","wpn_desert_eagle"} local shootgun = {"wpn_bm16","wpn_toz34","wpn_wincheaster1300","wpn_spas12"} local automatic1 = {"wpn_ak74u","wpn_ak74","wpn_abakan"} local automatic2 = {"wpn_l85","wpn_lr300","wpn_sig550"} local grenades = {"grenade_f1","grenade_rgd5"} if rnd > 50 then if rnd2 > 75 then if rnd3 == 1 then item_weap = pistols1[math.random(#pistols1)] if rnd4 < 75 then ammo_weap = {"ammo_9x18_fmj"} else ammo_weap = {"ammo_9x18_pmm"} end elseif rnd3 == 2 then item_weap = pistols2[math.random(#pistols2)] if rnd4 < 75 then ammo_weap = {"ammo_9x19_fmj"} else ammo_weap = {"ammo_9x19_pbp"} end elseif rnd3 == 3 then item_weap = pistols3[math.random(#pistols3)] if rnd4 < 75 then ammo_weap = {"ammo_11.43x23_fmj"} else ammo_weap = {"ammo_11.43x23_hydro"} end end else if rnd3 == 1 then item_weap = shootgun[math.random(#shootgun)] if rnd4 < 50 then ammo_weap = {"ammo_12x70_buck"} else ammo_weap = {"ammo_12x76_zhekan"} end elseif rnd3 == 2 then item_weap = automatic1[math.random(#automatic1)] if rnd4 < 75 then ammo_weap = {"ammo_5.45x39_fmj"} else ammo_weap = {"ammo_5.45x39_ap"} end elseif rnd3 == 3 then item_weap = automatic2[math.random(#automatic2)] if rnd4 < 75 then ammo_weap = {"ammo_5.56x45_ss190"} else ammo_weap = {"ammo_5.56x45_ap"} end end end end
if ammo_weap ~= nil and item_weap ~= nil then return ammo_weap and item_weap end
end
--// Броники \\--
--// Артефакты \\--
--// Еда \\--
--// Деньги \\--
function fill() get_medicine() get_weap_and_ammo() local cnt = 3 for i=1,cnt do local box = "jup_treasure_"..i if get_medicine().item_medicine ~= nil then local med_item = get_medicine().item_medicine xr_effects.spawn_object_in(nil, nil, {med_item,box}) end if get_weap_and_ammo().ammo_weap ~= nil and get_weap_and_ammo().item_weap ~= nil then local ammo_item = get_weap_and_ammo().ammo_weap local weap_item = get_weap_and_ammo().item_weap xr_effects.spawn_object_in(nil, nil, {ammo_item ,box}) xr_effects.spawn_object_in(nil, nil, {weap_item ,box}) end end end
В чем суть - в первых двух функциях надо получить рандомно предмет. Во второй, если он существует - заспавнить его в ящик. Но при запуске скрипта вылетает
Код
...- Зов Припяти\gamedata\scripts\fill_treasures.script:118: attempt to index a nil value
вот строка 118
Код
if get_medicine().item_medicine ~= nil then
Где ошибся? Зараннее спасибо!
Сообщение отредактировал _S_k_i_F_ - Суббота, 26.11.2016, 01:39
1. hit_power - мощность ствола из файлов параметров стволов 2. k_hit - мощность пули из weapons.ltx для каждого типа патронов 3. k_ap - способность пули пробивать защиту (куртки, броники и т.п) 4. Секции [body_damage_*] и [head_damage_*] из damages.ltx с набором параметров bip01_* - определяет прочность защиты на каждой части тела (второй параметр). Далее эти параметры я обозначу как Bd и Hd. 5. hit_fraction из damages.ltx для каждого типа защиты определяет прочность защиты. Надо упомянуть что параметры броников неписей определяются из файла damages.ltx, а не из outfit.ltx (этот файл чисто для ГГ). 6. Секция [stalker_damage] из m_stalker.ltx с набором параметров bip01_* - определяет фактор уменьшения здоровья при попадании в соответсвующую часть тела (первый параметр). Далее этот параметр я обозначу как Sd. Далее я опишу алгоритм по которому происходит вычисление повреждений. Алгоритм был получен опытным путем при стрельбе по неписи в упор и не претендует на истину в последней инстанции. Контроль количества повреждений производился через hit_callback функцию скрипта. 1. Здоровье неписи лежит в диапазоне от 0 до 100%. 2. Если пуля не бронебойная (k_ap = 0) то урон здоровью вычисляется как: hit_power * k_hit * hit_fraction * Sd * 100 Полученное число вычитается из здоровья неписи и при достижении <=0 - непись убита. Т.е. учитывается только фактор защиты в целом без учета степени защиты на разных частях тела. 3. Если пуля бронебойная (k_ap > 0), то ее фактор повреждения зависит от того пробила пуля защиту или нет. Если пуля не пробила защиту ( k_ap <= Bd(Hd) ) то повреждения считаются как в п.2. Если пуля пробила защиту ( k_ap > Bd(Hd) ) то повреждения считаются как: Вычисляется 2 числа и берется большее: hit_fraction * Sd * 100 и hit_power * k_hit * F * Sd * 100 где F = (k_ap-Bd)/k_ap или F = (k_ap-Hd)/k_ap Интересно что урон здоровью в случае пробития брони бронебойной пулей никак не меньше чем фактор ослабления пули броней (hit_fraction * Sd * 100). И еще о k_ap. Было замечено странное поведение алгоритма расчета урона при значении этого коэффициента выше 0.75. Пуля наносит как бы двойное повреждение. Одно как бронибойная пробивая защиту, и другое - как не бронибойная пуля. В результате совокупный урон неписю может составляеть больше чем 2 * hit_power * k_hit * 100. Скорее всего глюк в игре. Получается, например, при k_ap = 0.75 непись получает 70% урона, а при k_ap = 0.76 - безуслованя смерть. К тому же этот эффект пропадает, например, при определенных сочетаниях hit_power * k_hit >= 1 и k_ap > 2.2 Так что лучше k_ap ограничить максимум 0.75 Теперь что касаемо пробивания препятствий: Похоже что параметр k_pierce не используется вообще (наверное пришел из ТЧ). За пробиваемость препятствий отвечает также k_ap. Вот некоторые его значения: >0.34 - пробивает тонкие фанерки (двери и т.п.) >1.0 - пробивает листовой металл >1.5 - пробивает деревянные брусья и стены деревянных домов Ну а гаусска с ее k_ap=15 шьет все. Ты-ы-ыкс, вот мы добрались и до стрельбы неписей по ГГ. Алгоритм тот же самый. В качестве hit_fraction выступает hit_fraction_actor из outfit.ltx для каждого костюмчика. Повреждения по частям тела расписаны опять же в damages.ltx в секциях [actor_damage_N]. Ссылки на секции повреждений в параметрах bones_koeff_protection из outfit.ltx для каждого костюма. Параметр fire_wound_protection не используется. В инвентаре пулестойкость костюма отображается на основе второго значения из bip01_spine параметра из соответсвующей секции в damages.ltx. Источник: http://www.world-stalker.pp.ua/publ....-1-0-68
Сообщение отредактировал denis2000 - Пятница, 25.11.2016, 21:52
_S_k_i_F_, я всё ещё настаиваю, что нельзя телепортировать ГГ через гуи: xr_effects.teleport_actor(nil, nil, {"jup_pr_final_in_tonnel_walk","jup_pr_final_in_tonnel_look"}) И ещё, попробуй выдавать инфопорцию таким образом: db.actor:give_info_portion("jup_pr_final_in_tonnel")
mmihaill, я пробовал убрать все действия кроме закрытия гуи из кнопок - ноль эффекта. ins33, не совсем понял. Вот как сейчас выглядит скрипт
Код
--// Медикаменты \\-- function get_medicine() local item_medicine = nil local rnd = math.random(100) local rnd2 = math.random(3) local rnd3 = math.random(100) local medkits = {"medkit","medkit_army","medkit_scientic", "antirad", "bandage"} local boosters = {"drug_coagulant","drug_booster","drug_psy_blockade","drug_antidot","drug_radioprotector"} local anabiotic = {"drug_anabiotic"} if rnd <= 85 then if rnd2 == 1 then item_medicine = medkits[math.random(#medkits)] elseif rnd2 == 2 then item_medicine = boosters[math.random(#boosters)] elseif rnd2 == 3 then if rnd3 > 90 then item_medicine = anabiotic end end end
--if item_medicine ~= nil then return item_medicine --end
end
--// Оружие и боеприпасы \\-- function get_weap_and_ammo() local ammo_weap = nil local item_weap = nil local rnd = math.random(100) local rnd2 = math.random(100) local rnd3 = math.random(3) local rnd4 = math.random(100) local pistols1 = {"wpn_pm","wpn_pb","wpn_fort"} local pistols2 = {"wpn_hpsa","wpn_beretta","wpn_walther","wpn_mp5"} local pistols3 = {"wpn_sig220","wpn_colt1911","wpn_usp","wpn_desert_eagle"} local shootgun = {"wpn_bm16","wpn_toz34","wpn_wincheaster1300","wpn_spas12"} local automatic1 = {"wpn_ak74u","wpn_ak74","wpn_abakan"} local automatic2 = {"wpn_l85","wpn_lr300","wpn_sig550"} local grenades = {"grenade_f1","grenade_rgd5"} if rnd > 50 then if rnd2 > 75 then if rnd3 == 1 then item_weap = pistols1[math.random(#pistols1)] if rnd4 < 75 then ammo_weap = {"ammo_9x18_fmj"} else ammo_weap = {"ammo_9x18_pmm"} end elseif rnd3 == 2 then item_weap = pistols2[math.random(#pistols2)] if rnd4 < 75 then ammo_weap = {"ammo_9x19_fmj"} else ammo_weap = {"ammo_9x19_pbp"} end elseif rnd3 == 3 then item_weap = pistols3[math.random(#pistols3)] if rnd4 < 75 then ammo_weap = {"ammo_11.43x23_fmj"} else ammo_weap = {"ammo_11.43x23_hydro"} end end else if rnd3 == 1 then item_weap = shootgun[math.random(#shootgun)] if rnd4 < 50 then ammo_weap = {"ammo_12x70_buck"} else ammo_weap = {"ammo_12x76_zhekan"} end elseif rnd3 == 2 then item_weap = automatic1[math.random(#automatic1)] if rnd4 < 75 then ammo_weap = {"ammo_5.45x39_fmj"} else ammo_weap = {"ammo_5.45x39_ap"} end elseif rnd3 == 3 then item_weap = automatic2[math.random(#automatic2)] if rnd4 < 75 then ammo_weap = {"ammo_5.56x45_ss190"} else ammo_weap = {"ammo_5.56x45_ap"} end end end end
--if ammo_weap ~= nil and item_weap ~= nil then return ammo_weap and item_weap --end
end
--// Броники \\--
--// Артефакты \\--
--// Еда \\--
--// Деньги \\--
function fill() local cnt = 3 for i=1,cnt do get_medicine() get_weap_and_ammo() local box = "jup_treasure_"..i if get_medicine().item_medicine ~= nil then local med_item = get_medicine().item_medicine xr_effects.spawn_object_in(nil, nil, {med_item,box}) end if get_weap_and_ammo().ammo_weap ~= nil then local ammo_item = get_weap_and_ammo().ammo_weap local weap_item = get_weap_and_ammo().item_weap xr_effects.spawn_object_in(nil, nil, {ammo_item ,box}) xr_effects.spawn_object_in(nil, nil, {weap_item ,box}) end end end
Добро. ЗП. В оригинале есть такая логика sr_psy_antenna, но как ей пользоваться? Если просто логику рестриктора перевести на [sr_psy_antenna] - игра вылетает.
_S_k_i_F_, в каждой функции были ошибки. Вот исправил тебе их, пробуй:
Код
-// Медикаменты \\-- function get_medicine() local item_medicine = nil local rnd2 = math.random(3) local medkits = {"medkit","medkit_army","medkit_scientic", "antirad", "bandage"} local boosters = {"drug_coagulant","drug_booster","drug_psy_blockade","drug_antidot","drug_radioprotector"}
if math.random(100) <= 85 then if rnd2 == 1 then item_medicine = medkits[math.random(#medkits)] elseif rnd2 == 2 then item_medicine = boosters[math.random(#boosters)] else if math.random(100) > 90 then item_medicine = "drug_anabiotic" end end end return item_medicine end
--// Оружие и боеприпасы \\-- function get_weap_and_ammo()
local ammo_weap = nil local item_weap = nil
if math.random(100) <= 50 then return ammo_weap, item_weap end
local rnd3 = math.random(3) local rnd4 = math.random(100) local pistols1 = {"wpn_pm","wpn_pb","wpn_fort"} local pistols2 = {"wpn_hpsa","wpn_beretta","wpn_walther","wpn_mp5"} local pistols3 = {"wpn_sig220","wpn_colt1911","wpn_usp","wpn_desert_eagle"} local shootgun = {"wpn_bm16","wpn_toz34","wpn_wincheaster1300","wpn_spas12"} local automatic1 = {"wpn_ak74u","wpn_ak74","wpn_abakan"} local automatic2 = {"wpn_l85","wpn_lr300","wpn_sig550"} local grenades = {"grenade_f1","grenade_rgd5"}
if math.random(100) > 75 then
if rnd3 == 1 then item_weap = pistols1[math.random(#pistols1)] if rnd4 < 75 then ammo_weap = "ammo_9x18_fmj" else ammo_weap = "ammo_9x18_pmm" end elseif rnd3 == 2 then item_weap = pistols2[math.random(#pistols2)] if rnd4 < 75 then ammo_weap = "ammo_9x19_fmj" else ammo_weap = "ammo_9x19_pbp" end elseif rnd3 == 3 then item_weap = pistols3[math.random(#pistols3)] if rnd4 < 75 then ammo_weap = "ammo_11.43x23_fmj" else ammo_weap = "ammo_11.43x23_hydro" end end
else
if rnd3 == 1 then item_weap = shootgun[math.random(#shootgun)] if rnd4 < 50 then ammo_weap = "ammo_12x70_buck" else ammo_weap = "ammo_12x76_zhekan" end elseif rnd3 == 2 then item_weap = automatic1[math.random(#automatic1)] if rnd4 < 75 then ammo_weap = "ammo_5.45x39_fmj" else ammo_weap = "ammo_5.45x39_ap" end elseif rnd3 == 3 then item_weap = automatic2[math.random(#automatic2)] if rnd4 < 75 then ammo_weap = "ammo_5.56x45_ss190" else ammo_weap = "ammo_5.56x45_ap" end end
end
return ammo_weap, item_weap
end
--// Броники \\--
--// Артефакты \\--
--// Еда \\--
--// Деньги \\--
function fill() for i = 1,3 do local story_id = "jup_treasure_"..tostring(i) local inv_box = alife() <img src="/.s/sm/23/surprised.gif" border="0" align="absmiddle" alt="surprised" /> bject( get_story_object_id( story_id ) ) if inv_box then local item_medicine = get_medicine() local ammo_weap, item_weap = get_weap_and_ammo() if item_medicine then alife():create( item_medicine, vector(), 0, 0, inv_box.id ) end if ammo_weap then alife():create( ammo_weap, vector(), 0, 0, inv_box.id ) end if item_weap then alife():create( item_weap, vector(), 0, 0, inv_box.id ) end end end end
Подскажите, как в ЗП проверить, есть ли на поясе у актора определённый артефакт. Как правильно записать условие : "Если на поясе есть артефакт "Пузырь", то..." ?
Всем здравствуйте, хочу спросить, какой файл в configs/ui отвечает за загрузочный экран? Нужно просто переместить картинку локации на другое место и убрать widepanels, спасибо заранее!