В данной теме вы можете задавать любые вопросы касательно 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 по основным вопросам моддинга - обращаемся в ЛС.
Помогите разобраться, что делать с Кодlocal key_sprint = game.translate_string("key_sprint") из этого >>поста<< Что то ни, как не соображу, как использовать key_sprint. Так не фурычит: Кодif num == 1 then if key_sprint == num then
Тебе конкретно с key_sprint? Это пример был... при чём не совсем корректный. Метод translate_string получает из id текста сам текст из папки config\text\rus. Например есть вот такие строки в файле string_table_outfit.xml:
local banditOutfitNameRus = game.translate_string("bandit_outfit_name")
запишет строку "Бандитская куртка" в переменную banditOutfitNameRus. Если же речь идёт о предложенном способе определения состояния тела, то там просто возвращается строка, которая описывает это самое положение, т.е. значения в таблице не принципиальны, а определены с целью обозначить положение тела:
Код
local body_states = { -- флажки состояния тела актора [1] = "fwd", --# вперёд [2] = "back", --# назад [4] = "l_strafe", --# левым боком [8] = "r_strafe", --# правым боком [16] = "crouch", --# шаг? [32] = "accel", --# начало движения? [64] = "turn", --# поворот [128] = "jump", --# прыжок [256] = "fall", --# приземление [512] = "landing", --# в присяде [1024] = "landing2", --# в полном присяде [2048] = "climb", --# вставание [4096] = "sprint", --# бег [8192] = "l_lookout", --# наклон влево [16384] = "r_lookout" --# наклон вправо
Только учти, что возможны и комбинации этих элементов, т.е. метод get_actor_int может вернуть например число 18 (2+16), т.е. движение назад шагом.
Сообщение отредактировал BozKurt - Четверг, 22.05.2014, 11:54
Всем привет! Такой вопрос: Когда я меняю логику НПС, потом загружаюсь что бы проверить - не чего не выходит, игра "помнит" старый вариант логики и загружает её в НПС. Что бы изменения вступили в силу приходиться загружаться с начала уровня (с автосейва когда заходишь на локу), но бывает и это не помогает. Есть ли скриптовая процедура для сброса и перезагрузки логики НПС? P.S. Такой приём встречается в некоторых скриптах (xr_logic xr_gulag), как самому правильно сделать это?
Добавлено (22.05.2014, 15:32) --------------------------------------------- И еще, я логику меняю не в аллСпавне, а в *.ltx которые в gamedata/config/scripts/...
я логику меняю не в аллСпавне, а в *.ltx которые в gamedata/config/scripts/...
В таком случае ошибка твоя (забыл сохранить, не тот НПС, не та логика, забыл вписать ссылку на файл в custom_data в all.spawn и т.д.). Логика НПС инициализируется каждый раз при выходе этого НПС в онлайн, поэтому, если ты меняешь логику из конфигов (чтение которых происходит во время запуска игры), то изменения обязаны быть видны.
Сообщение отредактировал BozKurt - Четверг, 22.05.2014, 15:57
BozKurt, Всё, я понел вроде. Писал я правильно тому и сохранял(работало когда с другого сохранения загружался). Может потому не было эффекта, потому что загружался я не далеко от НПС, его логика наверно подгружалась старая, а новая не действовала потому что он был в онлайне, рядом с ГГ. Может всё еще проще, у меня совмещены несколько минимодов добавляющих новые схемы поведения
Graff46, выход НПС в онлайн происходит не только тогда, когда ГГ от него на расстоянии радиуса alife. Начало/загрузка игры также инициирует выход объектов в онлайн. Если говорить простыми словами, то выход в онлайн - это создание объекта в радиусе alife всеми возможными вариантами. Баг явно ручной природы.
BozKurt, Сейчас несколько раз проверил, по разному было, иногда изменения вступали в силу сразу, иной раз при загрузки автосейва с начала уровня, возможно дело в добавленных фиксах.
Добавлено (22.05.2014, 17:42) --------------------------------------------- Доброго времени суток! Я написал скрипт на спавн нескольких НПС военных сразу подружив (или "онейтралив", главное что бы не враги были) со свободой т.к. для проверки действует ли скрипт нужно проиграть минимум 2 часа, прошу проверить синтаксис.
local voen = {} function pri_spawn () -- 1-3 local obj = alife():create("rad_pri_mil_1spw",vector():set(-0.93081665039063,-9.287769317627,-45.758930206299),5668,2694) local params = amk.read_stalker_params(obj) params.sid = 1076 amk.write_stalker_params(params, obj) table.insert (voen, obj) local npc = alife():create("rad_pri_mil_1spw",vector():set(3.3436396121979,-9.1623735427856,-45.856372833252),6879,2694) table.insert (voen, npc) npc = alife():create("rad_pri_mil_1spw",vector():set(-2.6817104816437,-9.287446975708,-45.701698303223),5168,2694) table.insert (voen, npc)
-- *** -- su obj = alife():create("rad_pri_mil_sspw",vector():set(-8.9058332443237,-9.0138311386108,-15.963728904724),4283,2692) params = amk.read_stalker_params(obj) params.sid = 1078 amk.write_stalker_params(params, obj) table.insert (voen, obj) for i = 1, 5 do npc = alife():create("rad_pri_mil_sspw",vector():set(-8.9058332443237,-9.0138311386108,-15.963728904724),4283,2692) table.insert (voen, npc) end obj = alife():create("mil_freedom_respawn_1",vector():set(8.1268491744995,-9.016975402832,-15.528545379639),7744,2693) params = amk.read_stalker_params(obj) params.sid = 1087 params.custom = "[logic]\n cfg = scripts\\radar\\sward.ltx" amk.write_stalker_params(params, obj)
for i = 1, 5 do obj = alife():create("uchonye_spawn",vector():set(7.1373772621155,-23.525270462036,30.437913894653),7584,2765) params = amk.read_stalker_params(obj) params.custom = "[logic]\n cfg = scripts\\radar\\eco.ltx" amk.write_stalker_params(params, obj) end for i = 1, 5 do obj = alife():create("uchonye_spawn",vector():set(7.1373772621155,-23.525270462036,30.437913894653),7584,2765) params = amk.read_stalker_params(obj) params.custom = "[logic]\n cfg = scripts\\radar\\eco2.ltx" amk.write_stalker_params(params, obj) end this.set_community_goodwill end
function set_community_goodwill () for i,k in pairs (voen) do if k ~= nil then relation_registry.set_community_goodwill ("freedom", k.id, 1500) end end end
Добавлено (22.05.2014, 17:43) --------------------------------------------- Извиняюсь, но табуляция слетела когда копипастил.
Сообщение отредактировал Graff46 - Четверг, 22.05.2014, 17:49
Graff46, во-первых, ты не поставил скобки при вызове твоей функции set_community_goodwill; во-вторых, не следует задавать разным функциям одно и тоже имя. Лучше "обозви" свою функцию ChangeRelation.
function actor_body_state(task, objective) local on_key_sprint = game.translate_string("sprint") if on_key_sprint ~= nil then SendMessage("Нажата кнопка "..on_key_sprint) return true end return false end
В сообщении выдаёт нажата кнопка ускорение. Как отследить нажатие любой кнопки? П.С. состояние тала я получаю local num = db.actor:actor_body_state()
Graff46, Так же логика может игнорировать изменения, если она перешла на выполнение какой либо схемы, а изменения в ней произошли до неё.
Код
[logic] active = 1
[1] ; next =2
[2] и т.д
Код
[logic] active = new
[new] ;next = 1
[1] ; next =2
[2] и т.д
При таком условии, если сохранение было сделано в момент работы [1], то изменений вы не увидите.
ЦитатаGraff46 ()
прошу проверить синтаксис.
Скачай script Syntax Checker.exe и будет тебе счастье. А за одно используй редакторы с подсветкой синтаксиса.
Сообщение отредактировал ins33 - Четверг, 22.05.2014, 18:47
local on_key_sprint = game.translate_string("sprint")
В данном случае переменная on_key_sprint никогда не будет равно nil, т.к. даже, если игра не найдёт идентификатор sprint, то переменной будет присвоен этот самый идентификатор в качестве строки. Поэтому проверка на не nil всегда будет возвращать true.
Цитатаins33 ()
Как отследить нажатие любой кнопки?
Любой - это совсем любой, даже цифровой? Тогда тебе нужен колбек нажатия клавиш.
Народ вот как реализовать что одни нпс атаковали других.То есть я имею ввиду то что например одна группа нпс стоит рядом с базой где в этой базе нпс. И скаже так что " нпс " которые " снаружи " атаковали других , но при всем этом они как бы нас сопровождают. То есть они атакуют базу с сопровождением.
Что это такое? Expression : 0 Function : CUICellContainer::FindFreeCell File : D:\prog_repository\sources\trunk\xrGame\ui\UIDragDropListEx.cpp Line : 674 Description : there are no free room to place item
Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ...r. call of pripyat\gamedata\scripts\sim_board.script:226: attempt to index local 'spawn_smart' (a nil value)
делал новую локу решил протестить и вот как исправить?