В данной теме вы можете задавать любые вопросы касательно 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 - содержит секции конфигов уникального оружия и костюмов.
Полтора года назад на сайте АМК был спор среди модмейкеров по некоторым вопросам модостроения. Спорили долго, но я , например, полностью поддерживаю то, что сказала xStream. Использовать нужно то, что, в первою очередь, УДОБНО для модмейкера. Поэтому, если мне УДОБНЕЕ пользоваться ac/dc, то чихал я на ваш SDK с большой колокольни. И навязывать свою точку зрения начинающим модмейкерам не нужно. Каждый сам выбирает свою дорогу. И поверьте, я видел шикарные моды, которые были сделаны с помощью ac/dc ( SGM мод ) , и видел "слабенькие" , которые сделаны через SDK.
makdm, тут дело скорее не в удобстве, а в пренебрежении. Большинство уроков, существующих на сегодняшний день, созданы 100500 лет назад, где как раз-таки и юзались эти acdc, вот новички читают их и думают, что это удобно и быстро. На качество это, конечно, может и не повлиять, но время разработки увеличится в разы.
ЦитатаBoBaH_671 ()
Давайте уже закроем эту тему. Пусть делают как им нравится.
Сообщение отредактировал BoBaH_671 - Воскресенье, 21.08.2016, 00:12
Подскажите пожалуйста, существуют ли в природе converter (для декомпиляции уровней) и unpacker (для распаковки архивов) для S.T.A.L.K.E.R. - Lost Alpha, или это все можно делать стандартными для SoC? Всемогущий гугл, на эту тему, играет в "несознанку".
Парни помогите, Играю в мод Новый арсенал, но мне там очень не нравится, что при использовании медикоментов и прочего ГГ не прячет оружие, подскажите как реализовать
Advisor890, Можно как и любой рестриктор по сути. ur3icf, Распаковщики ресурсов S.T.A.L.K.E.R. - Lost Alpha давно в наличии. Обччный converter последней версии декомпилирует локации в формат SDK (в наличии только одна проблема координатами ЛОД-объектов, есть ее решение или нет мне не известно).
ЦитатаHICA ()
подскажите как реализовать
Вопрос настолько редкий, что в этой теме его обсуждают каждые 20 страниц. Поиском воспользоваться не желаете?
Сообщение отредактировал denis2000 - Воскресенье, 21.08.2016, 19:38
Выручайте, народ Пытаюсь всё сделать модель из разных кусков Сделал недавно, но по какой-то причине руки не стояли нормально Переделал на другую, стало ещё хуже Если раньше были хотя бы окорока от рук, то теперь и рук нет, и выстрелить по этому мешку нельзя, ибо вылетает
denis2000, Я пытался использовать вот такой скрипт:
function create_restr(storid, pos_restr, lvid_restr, gvid_restr, custom_restr, radius_restr, ax_x, ax_y, ax_z) local obj = alife():create("space_restrictor", pos_restr, lvid_restr, gvid_restr)
local packet = net_packet() obj:STATE_Write(packet) ----------------------- load ------------------------------ local game_vertex_id = packet:r_u16() local cse_alife_object__unk1_f32 = packet:r_float() local cse_alife_object__unk2_u32 = packet:r_u32() local level_vertex_id = packet:r_u32() local object_flags = packet:r_u32() local custom_data = packet:r_stringZ() local story_id = packet:r_u32() local spawn_story_id = packet:r_u32() local shape_count = packet:r_u8() for i=1,shape_count do local shape_type = packet:r_u8() if shape_type == 0 then local center = packet:r_vec3() local radius = packet:r_float() else local axis_x = packet:r_vec3() local axis_y = packet:r_vec3() local axis_z = packet:r_vec3() local offset = packet:r_vec3() end end
local restrictor_type = packet:r_u8() -------------------------- save ----------------------------- packet:w_begin(game_vertex_id) packet:w_float(cse_alife_object__unk1_f32) packet:w_u32(cse_alife_object__unk2_u32) packet:w_u32(level_vertex_id) packet:w_u32( bit_not(193) )
if custom_restr ~= nil then if string.find (custom_restr, '.ltx') ~= nil then custom_restr = '[logic]\n cfg = '..custom_restr..'\n' end packet:w_stringZ(custom_restr) else packet:w_stringZ(custom_data) end
if storid ~= nil then packet:w_u32(storid) else packet:w_u32(story_id) end
packet:w_u32(spawn_story_id)
packet:w_u8(1) if radius_restr ~= nil then packet:w_u8(0) packet:w_vec3(vector():set(0, 0, 0)) packet:w_float(radius_restr) elseif radius_restr == nil and ax_x == nil then packet:w_u8(0) packet:w_vec3(vector():set(0, 0, 0)) packet:w_float(2.5) else packet:w_u8(1) packet:w_vec3(vector():set(ax_x, 0, 0)) packet:w_vec3(vector():set(0, ax_y, 0)) packet:w_vec3(vector():set(0, 0, ax_z)) packet:w_vec3(vector():set(0, 0, 0)) end
packet:w_u8(restrictor_type) ----------------------------------------------------- packet:r_seek(0) obj:STATE_Read(packet, packet:w_tell()) end
И вызывал его вот так: _new_create.create_restr(sid, pos, lv, gv, ltx, radius) Это я так понял скрипт на создание спейс_рестриктора, я поменял alife():create("space_restrictor", pos_restr, lvid_restr, gvid_restr) на alife():create("anomal_zone", pos_restr, lvid_restr, gvid_restr). Вызываю и получаю вот такой вылет:
FATAL ERROR
[error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\priquel\sources\engine\xrServerEntities\script_engine.cpp [error]Line : 180 [error]Description : <no expression> [error]Arguments : LUA error: ...Л.К.Е.Р. - Чистое Небо\gamedata\scripts\utils.script:166: attempt to index local 'char_ini' (a nil value)
Всем привет. Такой вопрос: если по сюжету надо сначала попасть на Затон, а потом на Юпитер, но переходы так невыгодно ставить: можно ли поставить сначала переход на Юпитер, чтобы игрок пробежал по краю карты на Затон? Мой мод не сломается?
Сообщение отредактировал 13Шустрый13 - Воскресенье, 21.08.2016, 20:50
13Шустрый13, Я считаю, что если в моде ОБЯЗАТЕЛЬНО надо пройти Затон, прежде чем идти на Юпитер, то не получится. Так как по переходу ты попадешь уже на эту карту как бы с краю это не было. Ну а если имеется ввиду, что если не пройти затон, то не откроется сюжет на Юпитере, то, я думаю, ничего страшного. З.Ы. Это чисто мое мнение(!). Я в этом слабо разбираюсь.
Добавлено (21.08.2016, 20:54) --------------------------------------------- а вот мой вопрос: мне дали функцию:
Код
local helm = actor:item_in_slot(12) if helm ~= nil and helm:section() == "твой шлем" then твой_скрипт.твоя_функция() end
Эта функция звучит примерно так: "Когда одет определенный шлем, включается определенный скрипт." Я понял, что надо поставить вместо "твой шлем". Я понял, что надо поставить вместо "твой скрипт" Но я нифига не понял, что надо поставить вместо " твоя функция". Вот этот скрипт (Кстати автор скрипта denis2000)
function update_mark() --Базовые параметры о ГГ act_pos = db.actor:position() act_dir = device().cam_dir cam_pos = device().cam_pos hud = get_hud()
--Убрать все метки если проигрывается катсцена или есть инфопорция "hide_all_ui_mark" hide_all_mark = false if (act_pos:distance_to_sqr(cam_pos) > 4) or (has_alife_info("hide_all_ui_mark")) then hide_all_mark = true end
--Коэффициент растягивания изображения меток по горизонтали (3:4 = 1, 9:16 = 0,75 ) rise = (device().height*1024)/(device().width*768)
--Функции обновления меток на экране update_npc() update_anom() update_art() update_monstr() end
function update_npc() local index_mark = 1
--Обновление/добавление меток НПС if not hide_all_mark then for id_base, npc_base_pos in pairs(npc_base_table) do local dist = act_pos:distance_to_sqr(npc_base_pos) if dist < 900 then local npc_pos = vector():set(npc_base_pos.x,npc_base_pos.y,npc_base_pos.z) local npc_dir = npc_pos:sub(act_pos) local yaw = yaw_degree3d(act_dir, npc_dir) if yaw < 35 then if index_mark < 33 then anglI = math.atan2(act_dir.z, act_dir.x) - math.atan2(npc_dir.z, npc_dir.x) anglII = math.atan2(math.sqrt(npc_dir.x*npc_dir.x+npc_dir.z*npc_dir.z), npc_dir.y) - math.atan2(math.sqrt(act_dir.x*act_dir.x+act_dir.z*act_dir.z), act_dir.y) Xcoord = math.floor(512 + 512*math.tan(anglI)/math.cos(anglII)*512/360*rise) Ycoord = math.floor(384 + 384*math.tan(anglII)*384/200) if index_mark > npc_last_mark then hud:AddCustomStatic("npc_hud_mark_"..tostring(index_mark)) npc_mark_table[index_mark] = hud:GetCustomStatic("npc_hud_mark_"..tostring(index_mark)):wnd() end npc_mark_table[index_mark]:SetWndRect(Frect():set(Xcoord-8,Ycoord-8,Xcoord+8,Ycoord+8)) index_mark = index_mark + 1 end end end end end
npc_last_mark = index_mark - 1
--Удаление лишних меток НПС if index_mark < 33 then for i=index_mark,32 do if npc_mark_table[i] then hud:RemoveCustomStatic("npc_hud_mark_"..tostring(i)) npc_mark_table[i] = nil end end end
--Очистка таблицы НПС if index_mark == 1 then npc_nul_mark_time = npc_nul_mark_time + 1 if npc_nul_mark_time > 100 then npc_base_table = {} npc_nul_mark_time = 0 end else npc_nul_mark_time = 0 end
end
Заранее благодарен. З.Ы. Да да я нифига не разбираюсь в скриптах))
PRO100_STALKER, ну,найди в скрипте самую главную функцию,которая запускает нужные тебе вещи и пиши её вместо твоя_функция().В том коде что ты привёл их всего три: init_mark(); update_mark(); update_npc()
Сообщение отредактировал Mortan - Воскресенье, 21.08.2016, 21:17