В данной теме вы можете задавать любые вопросы касательно 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 по основным вопросам моддинга - обращаемся в ЛС.
<string id="nemoy"> <text>Если ты это читаешь, то я мертв.Уж извени.\nХорошо мне досталось от тех ублюдков. Зря ты меня от выброса сюда тощил.\n Говорил тебе брось, все равно я не жилец.\n Надеюсь ты очнешся!\n Доведи до конца наше начатое дело! Ведь от этого зависит жизнь многих!</text> </string>
function NewUI:__init() super() self:InitControls() self:InitCallBacks() end
function NewUI:__finalize() end
function NewUI:InitControls() local xml = CScriptXmlInit() self:Init(0,0,1024,768) xml:ParseFile("NewUI.xml") self.Static1 = xml:InitStatic("Static1", self) self:Register(xml:Init3tButton("Static1:button1", self.Static1), "button1")
end
function NewUI:InitCallBacks() self:AddCallback("button1", ui_events.BUTTON_CLICKED, self.Hide, self) end
function NewUI:button1_button_clicked()
end
function NewUI:Hide() self:GetHolder():start_stop_menu(self, true) end
Добавлено (23.10.2013, 20:53) --------------------------------------------- sedmoy23, Не подскажешь какой поршень закрывает инвентарь??
Сообщение отредактировал cxcxShaman - Среда, 23.10.2013, 20:55
cxcxShaman, Ищи в скриптах. Я не помню уже... Там вроде бы все по инфорпоршням открывается и закрывается. Еще можно закрыть если ты используешь окно и связываешь его через owner с задним окном. И сделать можно это так:
level.start_stop_menu(self.owner,true)
Сообщение отредактировал sedmoy23 - Среда, 23.10.2013, 21:46
Помогите! сил уже нет! сраный вылет при обыске НПС Expression : e_entity Function : xrServer::Process_event_reject File : E:\stalker\patch_1_0004\xr_3da\xrGame\xrServer_process_event_reject.cpp Line : 12 Description : entity not found. id_parent=0 id_entity=20997 frame=26213
в справчнике вылетов написано что это вылет в движке. но он появился просто так. полазил в дед_мэнеджере, оказывается вылет оттуда. поставил оригинальный - нету лута и нпс, модернизировал свой, вылет не часто но есть и бесит на всякий вот мой дед мэнеджер
--' Ключем является группировка персонажа. Значением является таблица, содержашая имена секций предметов. local item_by_community = {}
--' Зависимости в спауне предметов. Предмет спауниться только если есть хотя бы один из зависимых. local item_dependence = {}
--' Множители и минимаксы для выпадения вещей в зависимости от уровня local mul_by_level = {} local count_by_level = {}
--' Предметы, которые нельзя удалять (квестовые например) local always_keep_item = {}
--' Предметы, относящиеся к патронам. Их надо спаунить другим методом. local ammo_sections = {}
local death_ini = ini_file("misc\\death_generic.ltx")
function init_drop_settings() local community_list = { "stalker", "dolg", "freedom", "bandit", "military", "zombied", "ecolog", "killer", "monolith", "arena_enemy", "actor_dolg" }
for k,v in pairs(community_list) do --' Необходимо заполнить таблицу item_by_community[v] = {} if death_ini:section_exist(v) then local n = death_ini:line_count(v) local id, value = "", "" for i=0,n-1 do result, id, value = death_ini:r_line(v,i,"","") item_by_community[v][id] = 100*tonumber(value) end end end
--' Заполняем таблицу зависимостей local n = death_ini:line_count("item_dependence") local id, value = "", "" for i=0,n-1 do result, id, value = death_ini:r_line("item_dependence",i,"","") item_dependence[id] = {} local vvv = parse_names(value) for k,v in pairs(vvv) do item_dependence[id][v] = true end end
--' Множители и минимаксы для выпадения вещей в зависимости от уровня local level_name = level.name()
if not death_ini:section_exist(level_name) then level_name = "default" end
local n = death_ini:line_count(level_name) local id, value = "", "" for i=0,n-1 do result, id, value = death_ini:r_line(level_name,i,"","") mul_by_level[id] = tonumber(value) end
local item_count_section = "item_count_" .. level.get_game_difficulty() local n = death_ini:line_count(item_count_section) for i=0,n-1 do result, id, value = death_ini:r_line(item_count_section,i,"","") --' Нужно распарсить value в два значения local t = parse_nums(value) if t[1] == nil then abort("Error on [death_ini] declaration. Section [%s], line [%s]", item_count_section, tostring(id)) end local min = t[1] local max = t[2] if max == nil then max = min end
if mul_by_level[id] == nil then mul_by_level[id] = 0 end
min = tonumber(min) * mul_by_level[id] max = tonumber(max) * mul_by_level[id]
count_by_level[id] = {min = min, max = max} end
--' Предметы, которые нельзя удалять (квестовые например) local n = death_ini:line_count("keep_items") for i=0,n-1 do result, id, value = death_ini:r_line("keep_items",i,"","") if value == "true" then always_keep_item[id] = true end end
--' Предметы, относящиеся к патронам. Их надо спаунить другим методом. ammo_sections = {} local n = death_ini:line_count("ammo_sections") local id, value = "", "" for i=0,n-1 do result, id, value = death_ini:r_line("ammo_sections",i,"","") ammo_sections[id] = true end end
class "drop_manager" function drop_manager:__init(npc) self.npc = npc self.dropped = false end function drop_manager:save(packet) packet:w_bool(self.dropped) end function drop_manager:load(packet) self.dropped = packet:r_bool() end function drop_manager:create_release_item() local se_obj = alife():object(self.npc:id()) if self.dropped == true then return end self.dropped = true
--' Запускаем итератор на удаление предметов self.npc:iterate_inventory(keep_item, self.npc)
--' Проверка на отсутствие спауна лута local ini = self.npc:spawn_ini()
if ini and ini:section_exist("dont_spawn_loot") then return end
--' Доспавниваем необходимое количество итемов: --' Необходимо составить список объектов которые могут быть заспавнены для персонажа
local spawn_items = item_by_community[self.npc:character_community()] for k,v in pairs(spawn_items) do --' По каждому объекту необходимо получить зависимости if check_item_dependence(self.npc, k) == true then --' По каждому объекту необходимо получить количество local number = math.ceil(math.random(count_by_level[k].min, count_by_level[k].max)) --' Необходимо заспавнить нужное количество. create_items(self.npc, k, number, v) end end end
--' Функция вызывается для каждого предмета, если вернет false то предмет удалится. function keep_item(npc, item) if item==nil or alife():object(item:id())==nil then return end local section = item:section()
if section == "bolt" then return false end
if always_keep_item[section] == true then return true end
local item_id = item:id() local item_in_slot = npc:item_in_slot(1) if item_in_slot ~= nil and item_in_slot:id() == item_id then item:unload_magazine() --' Тут надо уменьшить кондишн оружия item:set_condition((math.random(15)+75)/100) return true end item_in_slot = npc:item_in_slot(2) if item_in_slot ~= nil and item_in_slot:id() == item_id then item:unload_magazine() --' Тут надо уменьшить кондишн оружия item:set_condition((math.random(15)+75)/100) return true end alife():release(alife():object(item:id()), true) end
--' Функция спавнит необходимое число предметов function create_items(npc, section, number, rnd) --'printf("create %s of %s", tostring(number), tostring(section)) if ammo_sections[section] == true then if number > 0 then se_respawn.create_ammo(section, npc:position(), npc:level_vertex_id(), npc:game_vertex_id(), npc:id(), number) end else for i=1,number do --' Проверяем вероятность появить каждый объект в отдельности if math.random(100) <= rnd then alife():create(section, npc:position(), npc:level_vertex_id(), npc:game_vertex_id(), npc:id()) end end end end
--' Функция проверяет есть ли хоть один из зависимых объектов у персонажа function check_item_dependence(npc, section) if item_dependence[section] == nil then return true end
local d_flag = true for k,v in pairs(item_dependence[section]) do local obj = npc:object(k) if obj ~= nil and npc:marked_dropped(obj) ~= true then return true end d_flag = false end
ну то что bip01_**** ето кости я понял, мне сами чиста что означают интересно
Добавлено (23.10.2013, 23:00) --------------------------------------------- и как вытащить худ рук и ножа со скелетом, можно без анимаций.
я скачал утиль огф2смд3 но при импорте в милкшейп последний крашится
Добавлено (23.10.2013, 23:01) --------------------------------------------- платформа зов припяти, если у кого есть худ рук и ножа со скелетом просьба скинуть заранее спасибо
cxcxShaman, добавляешь статик. В статике добавляешь тег <text>, в параметрах которого должен присутствовать complex_mode="1". Именно этот параметр и отвечает за автоматический перенос текста.
Всем привет. Подскажите как уменьшить темное время суток в игре? Прохожу мод на Чистое небо, проблемы со сменой дня и ночи. Светлое время суток длится с 13:00 до 18:00. Для того чтобы наступил день необходимо перезайти в игру. Прям ноу-хау какое-то в модах
взял худ оружия калаша из re-animation project. изменил некоторые анимки(проверил все на месте как должно быть) сохранил и появился файл с разширением .ms3d. что дальше с ним делать? в СДК? или конвертировать сразу в ogf?