В данной теме вы можете задавать любые вопросы касательно 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 - содержит секции конфигов уникального оружия и костюмов.
Такой вопрос! Каким способом проверить лучше - объект в онлайне level.object_by_id(id) или db.storage[id].object ? Есть ли между этими методами разница?
Maximless, да, и существенная. level.object_by_id(id) это движковая функция, а db.storage[id].object это скриптовая таблица, которая может модифицироваться как угодно и кем угодно. Первый вариант однозначно надёжнее.
Добавлено (30.10.2017, 21:37) --------------------------------------------- prototip98, проверяешь наличие пда в слоте, если его нет, отбиндиваешь кнопку открытия ПДА, предварительно сохранив то, на что она была забиндена; позже, когда возвращаешь пда - биндишь кнопку назад.
function set_rnd_time() local hours = math.random(0, 23) local mins = math.random(0, 60) level.change_game_time(0, hours, mins) level_weathers.get_weather_manager():forced_weather_change() surge_manager.get_surge_manager().time_forwarded = true if surge_manager.is_started() and level_weathers.get_weather_manager().weather_fx then level.stop_weather_fx() level_weathers.get_weather_manager():forced_weather_change() end end
У команды, разрабатывающей True Stalker. BoBaH_671
Добавлено (01.11.2017, 10:59) --------------------------------------------- BoBaH_671, Тогда у меня к тебе вопрос . Я начать изучать схемы, точнее их построение в скриптах, и решил сделать свою, так сказать для теста. Так вот вопрос когда вызывается метод reset_scheme? При инициализации схемы __init или при каждом апдейте? Про остальное я, кажется, понял.
Смотреть надо. На разных схемах по-разному. BoBaH_671
Добавлено (01.11.2017, 16:16) --------------------------------------------- BoBaH_671, то есть этот метод не обрабатывается движком? Ну в смысле на уровне скриптов обрабатывается.
buffy, на самом деле метод reset_scheme, не совсем "иногда" вызывается, если быть точным, он вызывается всегда, когда происходит переключение на схему. Во всех схемах, есть метод add_to_binder, который регистрирует все action'ы, для которых будет вызываться этот метод. Сама регистрация происходит через метод xr_logic.subscribe_action_for_events. Создание storage'а (хранилища данных) и бинды этих самых event'ов, которые "стреляют" эти самые зарегистрированные выше action'ы, для той или иной схемы, происходит в методе set_scheme самой схемы, через метод xr_logic.assign_storage_and_bind. Включение секции (set_scheme) происходит через xr_logic.activate_by_section. Так, что можно сказать, что reset_scheme вызывается "по факту" на каждом апдейте. P.S. Может сложно, но эти сложности легко (возможно) проходят, если проследить цепочку вызова на примере конкретной схемы. P.P.S. Всё это точно работает на чистом ТЧ.
Сообщение отредактировал BozKurt - Среда, 01.11.2017, 23:31
BozKurt, вчера вечером втыкал как это работает в ЗП, по факту система та же.
Добавлено (02.11.2017, 11:16) --------------------------------------------- BozKurt, кстати, а есть ли по созданию схем статейки, а то, имхо мало кто этим занимался, и создание новых схем я наблюдал лишь в скриптах LA(может есть и в других). Но всё же статейка не помешала бы.
Graff46, может быть прямую ссылку? нет желания рыскать)
Добавлено (02.11.2017, 12:50) --------------------------------------------- Уже не надо.
Добавлено (02.11.2017, 15:56) --------------------------------------------- Доброго всем дня. Крч, получается какой-то бред-бредовый. Сделал я тестовую схемку:
Код
class "action_test"
function action_test:__init(obj, storage) self.object = obj self.st = storage end
function action_test:reset_scheme() if self.st.status == "off" then self.object:set_tip_text("test") else self.st.status == "on" then self.object:set_tip_text("test") end end
function add_to_binder(obj, ini, scheme, section, storage) local action = action_test(obj, starage) xr_logic.subscribe_action_for_events(obj, storage, action) end
function set_scheme(obj, ini, scheme, section, gulag_name) local st = xr_logic.assign_storage_and_bind(obj, ini, scheme, section) st.logic = xr_logic.cfg_get_switch_conditions(ini, section, obj)
st.status = des_utils.cfg_get_string(ini, section, "status", obj, "off") end
Зарегистрировал её в modules.script, как положено. В сдк прописал в кастом дате объекта логику. Скомпилировал спавн. Ну в общем с этим проблем не было.
Далее запускаю игру на моей тестовой карте, и ловлю вылет, при чём странный.
Код
FATAL ERROR
[error]Expression : !m_error_code [error]Function : raii_guard::~raii_guard [error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp [error]Line : 748 [error]Description : ...k.e.r - Зов Припяти\gamedata\scripts\xr_logic.script:405: attempt to index field '?' (a nil value)
посмотрел я в этот файл на строку 405:
Код
_G[filename].set_scheme(npc, ini, scheme, section, gulag_name)
понял, что по какой-то причине filename отсутствует, а значит и файл ph_test отсутствует, но он есть.
if self.st.status == "off" then self.object:set_tip_text("test") else self.st.status == "on" then self.object:set_tip_text("test") end
Дружище, внимательнее. Надо как минимум вот так:
ЦитатаBoBaH_671 ()
function action_test:reset_scheme() if self.st.status == "off" then self.object:set_tip_text("test") elseif self.st.status == "on" then self.object:set_tip_text("test") end end
Любая синтаксическая ошибка валит весь скрипт, и он считается отсутствующим.
И странно, что у тебя в обоих случаях выставляется 'test'. Ладно, с этим разберёшься.
PS: эту конструкцию можно упросить до одной проверки:
Код
if self.st.status == "on" then self.object:set_tip_text("test_1") else self.object:set_tip_text("test_2") end