Это популярное сообщение. Kirgudu 1 370 Опубликовано 10 Февраля 2024 Это популярное сообщение. Поделиться Опубликовано 10 Февраля 2024 ИНСТРУМЕНТ Авторы: @Kirgudu, @monk Краткое описание: реинкарнация Повелителя зоны Платформа: Тени Чернобыля (1.0006 и 1.0004), OGSR x64 v2.1.416 - v3.448+, Чистое небо (1.5.10), Зов Припяти (1.6.02) Ссылка на общее хранилище: https://disk.yandex.ru/d/iK_zA5HmIreu-g Дата сборки: 2026-03-22 Скрытый текст 1. В подпапке Ready - готовые комплекты для: оригинальных версий Теней Чернобыля (1.0006 и 1.0004) и Чистого Неба (1.5.10) и Зова Припяти (1.6.02); OGSR x64 v2.1.416+; Объединённого Пака v2.2 patch 2023-03-15; Фотографа оригинального и Фотографа selfmade. 2. The.Tool.SoC.Constructor.rar, The.Tool.CS.Constructor.rar и The.Tool.CoP.Constructor.rar - архивы с конструктором Инструмента для модов на платформах ТЧ/OGSR, ЧН и ЗП соответственно. 3. readme.SoC.txt, readme.CS.txt и readme.CoP.txt - описание и инструкция для ТЧ, ЧН и ЗП соответственно. Скрытый текст Да, этот инструмент во многом вдохновлён именно Повелителем зоны, но и не только. В каждом моде, в работе над которым мне довелось принять участие, авторами всегда добавлялись те или иные средства управления героем, объектами, временем, событиями и прочими игровыми составляющими. Это удобно, поскольку позволяет разработчику быстро проверить ту или иную правку для мода без необходимости проходить всю игру вплоть до того момента, когда правка должна проявиться. Вот и в моде STALKER CS Final Stroke (новое название бывшего OGSM CS 1.8 CE Fixes) от @monk такие средства тоже есть, они появились там ещё во времена первого OGSM, и с тех пор постоянно использовались. Примерно тогда же, может раньше, вышел Повелитель. Спустя ещё какое-то время в OGSM добавился механизм выбора произвольной точки и телепортации на неё с помощью облёта. Был реализован показ на худе отладочной информации об игроке, затем добавлен вывод вместо подсказки информации об НПС, на которого смотрит прицел. Всё это было интегрировано в Final Stroke и с разной частотой и успехом использовалось при работе над дальнейшим улучшением мода. В какой-то момент возникла мысль весь этот зоопарк отладочных средств от разных авторов объединить в одном новом моде, привести его в современный вид, добавить удобства и, возможно, каких-то новых возможностей, ранее никем не реализованных. Результат перед вами, причём теперь не только для Чистого Неба, но и для Теней Чернобыля и Зова Припяти. А поскольку с его помощью можно многое сделать, подкрутить или починить, мод получает соответствующее рабочее название: Инструмент. Скрытый текст Мод имеет модульную структуру, при которой каждый раздел Инструмента реализован в своём, отдельном, скриптовом файле, подключаемом к общему файлу-менеджеру. Настройка производится в конфигурационном файле configs\misc\tool.ltx, а именно: В секции [settings] можно настроить раздел по умолчанию, включить или выключить сохранение состояния диалога, а также настроить расположение кнопок разделов. В секции [tabs] можно каждый из модулей включить или выключить, поменять их порядок, расположение кнопки в диалоге (см. скриншоты ниже). В секции [key_bindings] можно настроить клавиши, которые будут автоматически назначены для внутриигрового вызова диалога Инструмента, а также показа отладочной информации. Ниже идёт описание каждого модуля в отдельности. Скрытый текст Раздел предназначен для быстрого перемещения в разные точки Зоны. Дополнительная настройка модуля: configs\misc\tool\teleport.ltx Можно выбрать целевую локацию (список слева), в пределах каждой локации доступен как список стандартных смартов, так и список произвольных точек, заранее перечисленных в конфигурационном файле модуля. Перемещение происходит по нажатию кнопки Перейти или при двойном клике мышью на выбранную точку в списке. Телепорт - особый подраздел в списке локаций слева, предназначенный для быстрого телепорта по произвольным координатам. Их можно вписать в соответствующие поля вручную, взять из текущего положения игрока а также воспользоваться режимом облёта камеры (кроме ЗП), нажав на "глаз", найти нужную целевую точку, выйти из режима облёта путём нажатия на клавишу Esc и автоматически получить конечные координаты облёта после чего произвести перемещение по указанным координатам, нажав кнопку Перейти. Произвольные точки можно сохранять и удалять, а также восстанавливать из них сохранённые координаты. Точки сохраняются в отдельном конфиге: configs\misc\tool\teleport_custom.ltx (вариант для Чистого Неба, Зова Припяти или Теней Чернобыля с поддержкой пространства имён IO) или очищаются после загрузки (вариант для оригинальных Теней Чернобыля без поддержки IO). Список произвольных точек поддерживает двойной клик мышью на элементе списка, при этом координаты выбранной точки будут подставлены в соотв. поля аналогично нажатию кнопки Загрузить. Также доступен автоматический прыжок героя на указанное в специальном поле расстояние в направлении вперёд, назад, влево или вправо от текущего положения. Таким образом можно, например, выйти за забор базы Чистого Неба на Болотах, не прибегая к услугам проводника и не используя другие способы перемещения. В варианте Инструмента для Чистого Неба особенный смысл имеет поле "Симулировать историю при смене локации". В некоторых случаях при переходе на другую локацию разработчику мода бывает необходимо воспроизвести также все события, которые должны были предшествовать этому переходу в том случае, если бы игра шла штатным образом. Также бывает, что при быстром телепорте в точку, находящуюся рядом с враждебными игроку НПС, из-за того, что симуляция войны группировок ещё не была запущена, происходит сбой логики этих НПС, конфликт, вызванный враждебным к игроку отношением с одной стороны, и отсутствием симуляционных инструкций с другой. Во многих случаях это приводит к вылету. Чтобы избежать симуляционного вылета, или чтобы воспроизвести плавное течение истории при быстром переходе, для этого и следует ставить отметку в поле "симулировать историю". Поиск объекта - ещё один специальный подраздел, позволяющий осуществить поиск объектов по их серверному или человекопонятному имени, увидеть, где находится тот или иной объект (локация и территория), а также переместиться к выбранному объекту. Поиск можно осуществить по всем локациям или только по текущей, а также с учётом или без учёта содержимого любых контейнеров. Для поиска доступны: НПС (сталкеры и торговцы), монстры, оружие, броня, патроны, медикаменты, еда, детекторы и артефакты. Скрытый текст Раздел предназначен для создания разных игровых объектов в разных состояниях в инвентаре героя или в окружающем мире. Дополнительная настройка модуля: configs\misc\tool\spawn.ltx Предустановленный список типов и секций спавна содержится в конфигурационном файле модуля. В диалоге доступен поиск нужного предмета по секции или его наименованию. НПС (персонажей и монстров) можно создавать живыми, ранеными и в виде трупов. Предметы (броню, оружие, боеприпасы, артефакты и т. д.) можно создавать в окружающем мире или складывать в инвентарь, также можно указывать их кол-во. Аномалиям при их создании можно задать радиус. По умолчанию для спавна объектов в окружающем мире берётся точка в нескольких метрах впереди текущего положения героя, автоматически проставленные в соотв. полях координаты можно изменить вручную или воспользоваться стрелками автоматического сдвига координат на указанное расстояние в одном из четырёх направлений относительно направления взгляда. В варианте Инструмента для Чистого Неба добавлена возможность создавать отряды, список секций которых автоматически читается из распакованных конфигурационных файлов \configs\misc\squad_descr*.ltx. Создание отряда будет происходить в пределах выбранной территории (смарта) из списка всех зарегистрированных игровых территорий. При желании можно автоматически выбрать ближайшую к игроку территорию, нажав на кнопку "Найти рядом". Во избежание вылетов из игры принят ряд условий, соблюдающихся при создании отряда, а именно: одна территория (смарт) не может быть заселена отрядами, принадлежащими к разным группировкам, даже дружественным друг к другу; на одной территории не может быть создано отрядов больше, чем максимальное количество отрядов, которые территория может вместить; отряд с определённым идентификатором секции не может быть создан, если в игре уже существует отряд с аналогичным идентификатором. При возникновении одного из этих условий игроку будет выведено соответствующее предупреждение, а в случае с дублем секции отряда - диалог с выбором дальнейших действий. Скрытый текст Раздел предназначен для просмотра полного списка предметов, находящихся в настоящий момент в инвентаре героя (включая слоты), а также их состояния (цветовая дифференциация). Каждый предмет можно удалить (произойдёт полное удаление объекта из игры), для оружия и брони можно просмотреть текущее состояние и установить новое. Для любого предмета, состояние которого изменяется, можно поставить отметку в поле Фиксировать - тогда выбранное значение будет заморожено и не изменится в процессе игры вплоть до ближайшей загрузки или до момента, когда флажок Фиксировать будет снят и снова нажата кнопка Установить, либо когда предмет станет недоступен онлайн в результате продажи, удаления или перемещения за пределы Alife-радиуса. Скрытый текст Раздел предназначен для частичного управления войной группировок, а также для управления взаимоотношениями героя со всеми группировками, присутствующими в игре. Можно принудительно запустить или остановить войну группировок. Данные действия не приводят к немедленному эффекту на поле боя. Например, в случае остановки войны все отряды, уже имеющие задания занять какую-либо точку или уничтожить какой-либо вражеский отряд, сначала завершат их, и только затем отряды получат общее задание "оставаться на месте". Для основных группировок, война между которыми происходит по сюжету игры, можно управлять уровнем экспансии: повысить его или понизить в рамках тех настроек, которые установлены в соответствующем конфиге configs\misc\faction_*.ltx. Изменение уровня экспансии одной группировки из враждующей пары чаще всего приведёт к синхронному обратному изменению уровня экспансии другой группировки. Например, если в начале игры повысить уровень экспансии группировки Чистое Небо с уровня 0 до уровня 1, группировка Ренегаты спустится с уровня 2 на уровень 1. При этом Чистое небо автоматически займёт несколько точек, которые должны быть заняты на первом уровне, а Ренегаты эти точки потеряют. Общий список игровых параметров, которые изменяются при ручном изменении уровня экспансии в соответствии с настройками в конфиге: занимаемые точки, вхождение героя в состав группировки, инфопорции. Внимание! Данный механизм управления войной группировок пока не отлажен полностью, работает неустойчиво и может быть изменён в будущем. В любую группировку можно вступить, отношение группировки к герою при этом автоматически изменится на дружеское. Из группировки можно выйти, отношение при этом изменится на нейтральное (если не произошло одновременного вхождения во враждебную группировку, в этом случае и отношение сменится на враждебное). Можно изменить числовое отношение любой группировки к игроку. Скрытый текст Раздел предназначен для управления личными параметрами героя. Дополнительная настройка модуля: configs\misc\tool\actor.ltx Доступны для изменения: деньги, ранг, репутация, здоровье, пси-здоровье, энергия, уровень облучения (радиация). При установке значений здоровья, пси-здоровья, энергии и радиации можно поставить отметку в соотв. поле Фиксировать - тогда выбранное значение будет заморожено и не изменится в процессе игры вплоть до ближайшей загрузки или до момента, когда флажок Фиксировать будет снят и снова нажата кнопка Установить. Кнопка "ЧИТБОКС" служит для автоматического создания в инвентаре игрока заранее составленного списка предметов. Скрытый текст Раздел предназначен для поиска и удаления различных игровых объектов. Можно осуществить поиск объектов по их серверному или человекопонятному имени, увидеть, где находится тот или иной объект (локация и территория). Поиск можно провести только по текущей локации, по другим локациям, или по тем и другим вместе, с учётом или без учёта содержимого любых контейнеров. По нажатию кнопки Выбрать можно отметить категории объектов, которые будут учитываться при поиске (по умолчанию выбраны все). Доступны следующие категории: сталкеры, монстры, броня, оружие, боеприпасы, детекторы, еда и напитки, медицинские препараты, аномалии, артефакты и прочие типы объектов. Выбранный в полученном списке объект можно удалить из игры путём нажатия на кнопку Удалить или двойным кликом на строку списка. Нажатие кнопки Удалить всё приведёт к групповому удалению всех объектов, удовлетворяющих текущим настройкам поиска. Внимание! Удаление некоторых объектов может привести к немедленному вылету из игры, если они задействованы в действующих клиентских скриптах. Полная отладка данного механизма для исключения подобных ситуаций - вопрос времени. Скрытый текст Раздел предназначен для управления игровыми инфопорциями. В варианте Инструмента для оригинальных Теней Чернобыля список доступных инфопорций представлен в конфигурационном файле config\misc\tool\info.ltx и взят из файлов оригинальной игры config\gameplay\info_*.xml. В случае Инструмента для Чистого Неба или Теней Чернобыля с модифицированным движком, поддерживающим пространство имён IO, необходимо иметь в виду один важный момент. Для чтения списка инфопорций применяется скриптовый xml парсер, который умеет работать только с распакованными физическими копиями xml, подробнее см. тут: Попытка прочесть файлы, находящиеся в игровых архивах, на ванильном движке приводит к немедленному вылету. Поэтому для того, чтобы иметь возможность прочесть инфопорции, необходимо все xml файлы, их содержащие, распаковать из игровых архивов и положить в папку \configs\gameplay\. При этом полный список инфопорций, который можно прочитать из этих файлов, очень большой. Если читать их в UI список полностью, это приводит к неоправданным задержкам в отрисовке диалога, доходящим до десятка секунд и более. Чтобы этого избежать, был добавлен фильтр, требующий ввода трёх и более символов для показа отфильтрованного списка инфопорций. Можно вводить любую часть наименования, поиск будет произведён по вхождению в любой части строки. Статус инфопорций в списке будет показан цветом (выданные - зелёные). Любую инфопорцию можно выбрать и затем выдать или отменить, воздействуя таким образом на течение сюжетной линии. Список инфопорций поддерживает двойной клик мышью на элементе списка, при этом состояние выбранной инфопорции будет переключено на противоположное: выданная отменится, а невыданная будет активирована. Скрытый текст Раздел предназначен для быстрой установки любого типа погоды, включая характерные для выброса. Предустановленный список погодных типов содержится в конфигурационном файле модуля: configs\misc\tool\weather.ltx Список погоды поддерживает двойной клик мышью на элементе списка, при этом выбранная погода будет активирована аналогично действию кнопки Установить. Нажатие кнопки Выброс приведёт к немедленному запуску катаклизма вместе со всеми сопровождающими его событиями (изменение заданий, поиск укрытия и т. д.). Скрытый текст Раздел предназначен для второстепенных или чисто информационных вещей и в настоящее время содержит в себе три подраздела. Дополнительная настройка модуля: configs\misc\tool\misc.ltx Время: можно установить любой таймфактор (но имеются предельные границы), ускорить или замедлить с учётом выбранного коэффициента, а также сбросить на игровое значение по умолчанию. Музыка: можно принудительно запустить на проигрывание любой музыкальный фрагмент из списка, предустановленный список содержится в конфигурационном файле модуля. Доступен двойной клик мышью на элементе списка, при котором выбранный музыкальный фрагмент будет запущен или остановлен в зависимости от его текущего состояния. Видео: можно принудительно запустить на проигрывание любой видео фрагмент из списка, предустановленный список содержится в конфигурационном файле модуля. Доступен двойной клик мышью на элементе списка, при котором выбранный видео фрагмент будет запущен аналогично нажатию кнопки Запустить. Скрытый текст Порядок установки готового комплекта Содержимое соответствующего архива записать в папку игры с заменой имеющихся файлов (если есть). Порядок работы с конструктором для модов 1. Содержимое папки gamedata_REPLACE из архива скопировать как есть в папку gamedata игры. Если Инструмент устанавливается поверх другого мода, в который уже интегрированы модули от @Artos (модуль нет-пакетов m_netpk, вспомогательные модули lua_extension и lua_helper) и/или кейлоггер от @Charsi (модуль keylogger) - перезаписать их поверх или, если имеющиеся файлы изменены после авторов, совместить правки. 1.1. Если Инструмент устанавливается для Теней Чернобыля, но при этом не на движке OGSR, содержимое папки gamedata_EXCEPT_OGSR из архива скопировать как есть в папку gamedata игры. Напротив, в OGSR модуль m_netpk не только интегрирован, но и модифицирован, поэтому его замена модулем из Инструмента в OGSR запрещена. 2. Вытащить из игровых архивов и записать в папку gamedata\configs\gameplay файлы инфопорций info_*.xml, а в папку gamedata\configs\misc (кроме STALKER Тени Чернобыля) - конфигурационные файлы отрядов squad_descr*.ltx. В архиве Инструмента в папках gamedata_OPTIONAL\configs\gameplay и gamedata_OPTIONAL\configs\misc (кроме STALKER Тени Чернобыля) лежат файлы из оригинальной игры - можно взять их, но соответствие списка инфопорций и секций отрядов вашему моду в таком случае не гарантируется. 3. В отдельные файлы оригинальной игры или вашего мода внести изменения согласно примерам, перечисленным в папке архива gamedata_ADD. А именно: Скрытый текст 3.1. В файле gamedata\scripts\_g.script в конце функции start_game_callback() перед закрывающим end добавить: -- for The Tool xr_s.init() -- портирование фреймворка событий из STALKER CS lua_helper.attach() -- если вспомогательный модуль Артоса ещё не подключён m_netpk.attach() -- не требуется (но и не мешает при повторном подключении) для OGSR (m_netpk уже есть в составе) if keylogger then keylogger.init() end -- если кейлоггер Чарси ещё не подключён if tool then tool.init() end -- обязательно Если вспомогательные модули Артоса ещё не подключены, в файле gamedata\scripts\_g.script в самом конце добавить: -- for The Tool --/------------------------------------------------------------------- --/#+# initialize modules [lua_helper/lua_extensions] --/------------------------------------------------------------------- prefetch("lua_extension") --/#+# подключение модуля расширений Lua prefetch("lua_helper") --/#+# подключение модуля 'общих' хелп-функций --/ ------------------------------------------------------------------ --/ print-log (вывод отладочной информации) --/------------------------------------------------------------------- local console --/ функция вывода сообщения в игровую консоль to_log = function(fmt,...) if not console then console = get_console() end console:execute("load ~:"..string.exformat(fmt,...)) end --/------------------------------------------------------------------- --/ Принудительное прерывание игры при фатальных ошибках --/------------------------------------------------------------------- abort = function(fmt,...) to_log(string.rep("~",86)) to_log("[error]ABORT CALLED:\n" .. string.exformat(fmt, ...)) to_log("ATTENTION! Game is interrupted! The information in lines above.") to_log(string.rep("~",86)) get_console():execute('flush') exit() --/#!# interrupt game in case of fatal errors end --/ ------------------------------------------------------------------ 3.2. В файле gamedata\scripts\bind_stalker.script в конце функции actor_binder:net_spawn(data) перед конечным return true добавить: -- for The Tool xr_s.on_game_load() В конце функции actor_binder:net_destroy() перед закрывающим end добавить: -- for The Tool xr_s.on_actor_destroy() В конце функции actor_binder:update(delta) перед закрывающим end добавить: -- for The Tool xr_s.on_actor_update(delta) В самом начале функции actor_binder:save(packet) добавить: -- for The Tool xr_s.on_event("actor_save") Если вспомогательные модули Артоса ещё не подключены, в конце функции actor_binder:reinit() перед закрывающим end добавить: -- for The Tool --/#+# [lua_helper] ------------------------------------------------ if lua_helper.Init_ActorPStor then lua_helper.Init_ActorPStor() end --/< --------------------------------------------------------------- 3.3. В файле gamedata\scripts\smart_terrain.script в самом конце добавить: -- for The Tool function get_smart_terrains() return smart_terrains --/> end function get_smart_terrains_by_name() return smart_terrains_by_name --/> end 3.4. В файле gamedata\scripts\xr_motivator.script в конце функции motivator_binder:update(delta) перед закрывающим end добавить: -- for The Tool xr_s.on_event("npc_update", {obj = self.object}) 3.5. В файле gamedata\config\ui\game_tutorials.xml в конце файла перед закрывающим тегом </window> добавить: <!-- for The Tool --> #include "ui\tool\game_movies.xml" 3.6. В файле gamedata\config\ui\ui_custom_msgs.xml в конце файла перед закрывающим тегом </header> добавить: <!-- for The Tool --> <cs_debug x="200" y="10" width="600" height="100" complex_mode="1"> <text font="graffiti22" r="240" g="217" b="182" a="255" align="l"/> </cs_debug> 3.7. В файле gamedata\config\localization.ltx в опции files в начале или конце добавить новое значение st_tool: ;список xml файлов, содержащих таблицы символов files = st_tool, ; + все остальные элементы списка 3.8. В файле gamedata\config\system.ltx в секции [texture_desc] в опции files в начале или конце добавить новые значения ui_common_2 и ui_pda2_noice: [texture_desc] files = ui_common_2, ui_pda2_noice, ; + все остальные элементы списка 3.9. В корневой папке игры в файле fsgame.ltx добавить синонимы для прямого нерекурсивного доступа к папкам gamedata\configs\gameplay и gamedata\configs\misc: $tool_gameplay$ = false| false| $game_config$| gameplay\ $tool_misc$ = false| false| $game_config$| misc\ Пример добавки приведён в архиве в файле fsgame_ADD.ltx Скрытый текст 3.1. В файле gamedata\scripts\_g.script в конце функции start_game_callback() перед закрывающим end добавить: -- for The Tool lua_helper.attach() -- если вспомогательный модуль Артоса ещё не подключён m_netpk.attach() -- если модуль нет-пакетов Артоса ещё не подключён if keylogger then keylogger.init() end -- если кейлоггер Чарси ещё не подключён if tool then tool.init() end -- обязательно Если вспомогательные модули Артоса ещё не подключены, в файле gamedata\scripts\_g.script в самом конце добавить: -- for The Tool --/------------------------------------------------------------------- --/#+# initialize modules [lua_helper/lua_extensions] --/------------------------------------------------------------------- prefetch("lua_extension") --/#+# подключение модуля расширений Lua prefetch("lua_helper") --/#+# подключение модуля 'общих' хелп-функций --/ ------------------------------------------------------------------ --/ print-log (вывод отладочной информации) --/------------------------------------------------------------------- local console --/ функция вывода сообщения в игровую консоль to_log = function(fmt,...) if not console then console = get_console() end console:execute("load ~:"..string.exformat(fmt,...)) end --/------------------------------------------------------------------- --/ Принудительное прерывание игры при фатальных ошибках --/------------------------------------------------------------------- abort = function(fmt,...) to_log(string.rep("~",86)) to_log("[error]ABORT CALLED:\n" .. string.exformat(fmt, ...)) to_log("ATTENTION! Game is interrupted! The information in lines above.") to_log(string.rep("~",86)) get_console():execute('flush') exit() --/#!# interrupt game in case of fatal errors end --/ ------------------------------------------------------------------ 3.2. В файле gamedata\scripts\actor_menu.script в самом конце добавить: -- for The Tool function get_menu_mode() return last_mode end 3.3. В файле gamedata\scripts\bind_stalker.script в самом начале функции actor_binder:save(packet) добавить: -- for The Tool xr_s.on_event("actor_save") Если вспомогательные модули Артоса ещё не подключены, в конце функции actor_binder:reinit() перед закрывающим end добавить: --/#+# [lua_helper] ------------------------------------------------ if lua_helper.Init_ActorPStor then lua_helper.Init_ActorPStor() end --/< --------------------------------------------------------------- 3.4. В файле gamedata\scripts\xr_motivator.script в конце функции motivator_binder:update(delta) перед закрывающим end добавить: -- for The Tool xr_s.on_event("npc_update", {obj = object}) --/#+# >событие: 'npc_update' 3.5. В файле gamedata\scripts\xr_s.script содержимое функции register_callback(name,func,userobj) заменить на это: function register_callback(name,func,userobj) -- + поддержка произвольных событий (замена оригинальной функции) if callbacks[name]==nil then -- abort("register_callback: callback name '%s' is unknown.", name) callbacks[name] = {} -- создаём новый массив для произвольного события с указанным именем end callbacks[name][func]={userobj=userobj} -- Чтобы можно было регистрировать каллбэки с userobj==nil end Там же в конце файла добавить новую функцию: function on_event(name, data) -- произвольное событие if not name or not callbacks[name] then return end --/> нет зарегистрированных коллбэков for func,o in pairs(callbacks[name]) do func(o.userobj, data) end end 3.6. В файле gamedata\configs\ui\game_tutorials.xml в конце файла перед закрывающим тегом </window> добавить: <!-- for The Tool --> #include "ui\tool\game_movies.xml" 3.7. В файле gamedata\configs\ui\ui_custom_msgs.xml в конце файла перед закрывающим тегом </header> добавить: <!-- for The Tool --> <cs_debug x="200" y="10" width="600" height="100" complex_mode="1"> <text font="graffiti22" r="240" g="217" b="182" a="255" align="l"/> </cs_debug> 3.8. В корневой папке игры в файле fsgame.ltx добавить синонимы для прямого нерекурсивного доступа к папкам gamedata\configs\gameplay и gamedata\configs\misc: $tool_gameplay$ = false| false| $game_config$| gameplay\ $tool_misc$ = false| false| $game_config$| misc\ Пример добавки приведён в архиве в файле fsgame_ADD.ltx Скрытый текст 3.1. В файле gamedata\scripts\_g.script в конце функции start_game_callback() перед закрывающим end добавить: -- for The Tool lua_helper.attach() -- если вспомогательный модуль Артоса ещё не подключён m_netpk.attach() -- если модуль нет-пакетов Артоса ещё не подключён if keylogger then keylogger.init() end -- если кейлоггер Чарси ещё не подключён if tool then tool.init() end -- обязательно Если вспомогательные модули Артоса ещё не подключены, в файле gamedata\scripts\_g.script в самом конце добавить: -- for The Tool --/------------------------------------------------------------------- --/#+# initialize modules [lua_helper/lua_extensions] --/------------------------------------------------------------------- prefetch("lua_extension") --/#+# подключение модуля расширений Lua prefetch("lua_helper") --/#+# подключение модуля 'общих' хелп-функций --/ ------------------------------------------------------------------ --/ print-log (вывод отладочной информации) --/------------------------------------------------------------------- local console --/ функция вывода сообщения в игровую консоль to_log = function(fmt,...) if not console then console = get_console() end console:execute("load ~:"..string.exformat(fmt,...)) end --/------------------------------------------------------------------- --/ Принудительное прерывание игры при фатальных ошибках --/------------------------------------------------------------------- abort = function(fmt,...) to_log(string.rep("~",86)) to_log("[error]ABORT CALLED:\n" .. string.exformat(fmt, ...)) to_log("ATTENTION! Game is interrupted! The information in lines above.") to_log(string.rep("~",86)) get_console():execute('flush') exit() --/#!# interrupt game in case of fatal errors end --/ ------------------------------------------------------------------ 3.2. В файле gamedata\scripts\actor_menu.script в самом конце добавить: -- for The Tool function get_menu_mode() return last_mode end 3.3. В файле gamedata\scripts\bind_stalker.script в самом начале функции actor_binder:save(packet) добавить: -- for The Tool xr_s.on_event("actor_save") Если вспомогательные модули Артоса ещё не подключены, в конце функции actor_binder:reinit() перед закрывающим end добавить: --/#+# [lua_helper] ------------------------------------------------ if lua_helper.Init_ActorPStor then lua_helper.Init_ActorPStor() end --/< --------------------------------------------------------------- 3.4. В файле gamedata\scripts\xr_meet.script в конце функции Cmeet_manager:update() перед закрывающим end добавить: -- for The Tool xr_s.on_event("on_meet", {obj = self.npc}) --/#+# >событие: 'on_meet' 3.5. В файле gamedata\scripts\xr_s.script содержимое функции register_callback(name,func,userobj) заменить на это: function register_callback(name,func,userobj) -- + поддержка произвольных событий (замена оригинальной функции) if callbacks[name]==nil then -- abort("register_callback: callback name '%s' is unknown.", name) callbacks[name] = {} -- создаём новый массив для произвольного события с указанным именем end callbacks[name][func]={userobj=userobj} -- Чтобы можно было регистрировать каллбэки с userobj==nil end Там же в конце файла добавить новую функцию: function on_event(name, data) -- произвольное событие if not name or not callbacks[name] then return end --/> нет зарегистрированных коллбэков for func,o in pairs(callbacks[name]) do func(o.userobj, data) end end 3.6. В файле gamedata\configs\ui\game_tutorials.xml в конце файла перед закрывающим тегом </window> добавить: <!-- for The Tool --> #include "ui\tool\game_movies.xml" 3.7. В файле gamedata\configs\ui\ui_custom_msgs.xml в конце файла перед закрывающим тегом </header> добавить: <!-- for The Tool --> <cs_debug x="200" y="10" width="600" height="100" complex_mode="1"> <text font="graffiti22" r="240" g="217" b="182" a="255" align="l"/> </cs_debug> 3.8. В корневой папке игры в файле fsgame.ltx добавить синонимы для прямого нерекурсивного доступа к папкам gamedata\configs\gameplay и gamedata\configs\misc: $tool_gameplay$ = false| false| $game_config$| gameplay\ $tool_misc$ = false| false| $game_config$| misc\ Пример добавки приведён в архиве в файле fsgame_ADD.ltx Скрытый текст При настройках горячих клавиш по умолчанию (менять в misc\tool.ltx): "J" - показ диалога Инструмента "K" - показ/скрытие отладочной информации на худе "T" (Тени Чернобыля) или "H" (Чистое Небо, Зов Припяти) - показ/скрытие отладочной информации об НПС вместо подсказки Скрытый текст @monk - за возможность разрабатывать Инструмент на площадке сборника и за бесконечное терпение при тестировании внедрённых в Инструмент и отбракованных механизмов. @*Shoker* - за Повелителя зоны, давшего львиную долю идей и примеров. @Artos - за модуль работы с нет-пакетами и вспомогательные модули. @Charsi - за кейлоггер, русификацию ввода в ТЧ и альтернативный метод записи редактируемых точек в файл. VENOM - за метод показа информации об НПС. OGSM Team - за некоторые другие использованные в Инструменте хитрости. А также всем остальным, чьи работы полностью или частично могли быть использованы в Инструменте, но кого по незнанию или забывчивости не упомянул. 6 13 21 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/14989-instrument/
Это популярное сообщение. Kirgudu 1 370 Опубликовано 23 Сентября 2024 Автор Это популярное сообщение. Поделиться Опубликовано 23 Сентября 2024 (изменено) Обновление от 2024-09-23 Добавил готовый комплект для Теней Чернобыля, патч 1.0004. Внимание: конфиг для спавнера Инструмента (config\misc\tool\spawn.ltx) взят из комплекта для ТЧ 1.0006 без изменений, поэтому какие-то предметы, которые в 1.0004 отсутствуют (если есть такие) при спавне могут вызвать вылет. Актуализировать до 100% этот конфиг пока не готов. Имеющийся конструктор для ТЧ подходит для обоих патчей, 1.0006 и 1.0004, надо только аккуратно следовать инструкции при его применении. Ссылка на хранилище прежняя, см. шапку темы. Изменено 23 Сентября 2024 пользователем Kirgudu 2 2 4 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/14989-instrument/page/4/#findComment-1490433
Это популярное сообщение. Kirgudu 1 370 Опубликовано 8 Февраля 2025 Автор Это популярное сообщение. Поделиться Опубликовано 8 Февраля 2025 (изменено) Обновление Инструмента от 2025-02-08 1. В подразделе Персонажи раздела Объекты добавлена возможность создать раненого НПС. 2. Во всех разделах всем текстовым полям, предполагающим ввод только целых или дробных чисел, добавлен автофильтр, не позволяющий вводить другие символы. Обновлены все конструкторы и готовые комплекты. Хранилище прежнее, ссылка в шапке темы. Приятного использования! Изменено 8 Февраля 2025 пользователем Kirgudu 2 2 3 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/14989-instrument/page/4/#findComment-1500986
Это популярное сообщение. Kirgudu 1 370 Опубликовано 1 Марта 2025 Автор Это популярное сообщение. Поделиться Опубликовано 1 Марта 2025 Обновление от 2025-03-01 Исправлена критическая ошибка: при активном показе на худе отладочной информации (по умолчанию клавиша "K") получение любого хита приводило к полному зависанию функционала Инструмента. Такая ошибка наблюдалась на платформе ОП-2.2, однако могла воспроизводиться и на других. Обновлены все конструкторы и готовые комплекты. 2 2 4 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/14989-instrument/page/4/#findComment-1502049
Miko 0 Опубликовано 24 Апреля 2025 Поделиться Опубликовано 24 Апреля 2025 Помогите исправить ошибку, баг с модулем "объекты": когда нажимаю кнопки "сдвинуть вперед, влево, назад и вправо", игра крашится. Модуль телепорта работает. Выдает такую ошибку: [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ...r Тень Чернобылья\gamedata\scripts\lua_helper.script:2284: 'for' limit must be a number Моды: Адаптация Оружейного пака Gunslinger WP [1.6] Полная версия + Повелитель Зоны Gold 5.6 Версия 1.0006 Ссылка на комментарий https://www.amk-team.ru/forum/topic/14989-instrument/page/4/#findComment-1504836
Kirgudu 1 370 Опубликовано 26 Апреля 2025 Автор Поделиться Опубликовано 26 Апреля 2025 @Miko посмотрю на выходных. Возможно, скрытая ошибка в модуле Артоса или не всегда корректный вызов одного из его методов из модуля спавна. Какая версия Инструмента использована, от какой даты и из какого комплекта? 24.04.2025 в 18:29, Miko сказал: [error]Arguments : LUA error: ...r Тень Чернобылья\gamedata\scripts\lua_helper.script:2284: 'for' limit must be a number В том модуле lua_helper, который сейчас лежит в составе комплектов Инструмента, в строке 2284 нет цикла 'for'. Очевидно, что используется более старый комплект Инструмента или в отдельные его файлы вносились изменения. Помочь смогу только с последней версией по ссылке из шапки темы, рекомендую скачать и адаптировать себе именно её по инструкции, потом вернуться сюда с ошибкой, если она снова проявится. 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/14989-instrument/page/4/#findComment-1504893
Miko 0 Опубликовано 26 Апреля 2025 Поделиться Опубликовано 26 Апреля 2025 Я пытался скачать новую версию, но они конфликтуют. Ссылка на комментарий https://www.amk-team.ru/forum/topic/14989-instrument/page/4/#findComment-1504899
Kirgudu 1 370 Опубликовано 26 Апреля 2025 Автор Поделиться Опубликовано 26 Апреля 2025 @Miko к сожалению, понять, что не так могло быть в какой-то старой версии Инструмента, не представляется возможным. За год с небольшим мод претерпел множество доработок абсолютно во всех своих компонентах. Какие-то нюансы старой реализации, исправленных багов, сделанных разным способом в разное время фич я просто-напросто не помню. Помочь с адаптацией текущей версии могу, старой - не готов. Предлагаю написать, какую версию основной игры взять в качестве платформы, перечислить все дополнительные моды, которые нужно на неё накатить (где их взять и как и в каком порядке поставить, если есть нюансы), чтобы получить ту сборку, к которой следует подготовить Инструмент. Постараюсь это сделать в течение нескольких дней. Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/14989-instrument/page/4/#findComment-1504902
Это популярное сообщение. Kirgudu 1 370 Опубликовано 2 Августа 2025 Автор Это популярное сообщение. Поделиться Опубликовано 2 Августа 2025 Новая версия Инструмента от 2025-08-02, только для ЧН. Изменения: Скрытый текст Добавлено частичное управление войной группировок. Можно принудительно запустить или остановить войну группировок. Данные действия не приводят к немедленному эффекту на поле боя. Например, в случае остановки войны все отряды, уже имеющие задания занять какую-либо точку или уничтожить какой-либо вражеский отряд, сначала завершат их, и только затем отряды получат общее задание "оставаться на месте". Для основных группировок, война между которыми происходит по сюжету игры, можно управлять уровнем экспансии: повысить его или понизить в рамках тех настроек, которые установлены в соответствующем конфиге configs\misc\faction_*.ltx. Изменение уровня экспансии одной группировки из враждующей пары чаще всего приведёт к синхронному обратному изменению уровня экспансии другой группировки. Например, если в начале игры повысить уровень экспансии группировки Чистое Небо с уровня 0 до уровня 1, группировка Ренегаты спустится с уровня 2 на уровень 1. При этом Чистое небо автоматически займёт несколько точек, которые должны быть заняты на первом уровне, а Ренегаты эти точки потеряют. Общий список игровых параметров, которые изменяются при ручном изменении уровня экспансии в соответствии с настройками в конфиге: занимаемые точки, вхождение героя в состав группировки, инфопорции. Внимание! Данный механизм управления войной группировок пока не отлажен полностью, работает неустойчиво и может быть изменён в будущем. Скрытый текст Раздел предназначен для поиска и удаления различных игровых объектов. Можно осуществить поиск объектов по их серверному или человекопонятному имени, увидеть, где находится тот или иной объект (локация и территория). Поиск можно провести только по текущей локации, по другим локациям, или по тем и другим вместе, с учётом или без учёта содержимого любых контейнеров. По нажатию кнопки Выбрать можно отметить категории объектов, которые будут учитываться при поиске (по умолчанию выбраны все). Доступны следующие категории: сталкеры, монстры, броня, оружие, боеприпасы, детекторы, еда и напитки, медицинские препараты, аномалии, артефакты и прочие типы объектов. Выбранный в полученном списке объект можно удалить из игры путём нажатия на кнопку Удалить или двойным кликом на строку списка. Нажатие кнопки Удалить всё приведёт к групповому удалению всех объектов, удовлетворяющих текущим настройкам поиска. Внимание! Удаление некоторых объектов может привести к немедленному вылету из игры, если они задействованы в действующих клиентских скриптах. Полная отладка данного механизма для исключения подобных ситуаций - вопрос времени. Скрытый текст В подразделе Поиск объекта теперь также можно увидеть (как в разделе Очистка), где находится тот или иной объект (локация и территория). Приму с благодарностью любые сообщения об ошибках, а также предложения по функционалу разделов Фракции и Очистка. Обновлены конструктор и готовый комплект для ЧН. Хранилище прежнее, ссылка в шапке темы. В ближайшие месяц-другой буду потихоньку переносить добавленный функционал на другие платформы, следите за новостями. Приятного использования! 1 2 2 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/14989-instrument/page/4/#findComment-1507651
Это популярное сообщение. Kirgudu 1 370 Опубликовано 21 Августа 2025 Автор Это популярное сообщение. Поделиться Опубликовано 21 Августа 2025 Обновление Инструмента от 2025-08-21. 1. Функционал, описанный в предыдущем посте в пунктах 2 и 3 (новый раздел "Очистка" и доработка раздела "Переход"), полностью перенесён в конструктор для ТЧ, а также в готовые комплекты для ТЧ 1.0006, ТЧ 1.0004 и OGSR x64 v2.1.416 - v3.448+. 2. Произведена небольшая доработка разделов "Очистка" и "Переход" в конструкторе и готовом комплекте для ЧН. На очереди: конструктор для ЗП, готовые комплекты для ЗП, ОП-2.2, Фотографа. Ссылка прежняя, в шапке темы. 4 2 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/14989-instrument/page/4/#findComment-1508148
Это популярное сообщение. Kirgudu 1 370 Опубликовано 28 Сентября 2025 Автор Это популярное сообщение. Поделиться Опубликовано 28 Сентября 2025 Обновление Инструмента от 2025-09-28. Все последние нововведения и доработки, описанные в предыдущих постах, скопированы во все конструкторы и готовые комплекты. 1 4 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/14989-instrument/page/4/#findComment-1509844
JohnTikhomirov 4 Опубликовано 14 Января Поделиться Опубликовано 14 Января Сломался на 4к мониторе, исправление в tool.script: function tool_manager:InitControls() to_log(sModule..":tool_manager:> InitControls") --/#~# -- self:SetWndRect(Frect():set(30, 20, 1024, 768)) self:SetWndRect(Frect():set(30, 20, device().width*0.6, device().height*0.6)) + встретил случай передачи имени колбэка в первый аргумент по умолчанию, по этому: function tool_manager:OnTabChange(tab_id) to_log(sModule..":tool_manager:> OnTabChange tab_id = [%s]", tab_id) --/#~# --/ установка раздела по умолчанию из GetDebugManagerDialog при открытии диалога или чтение текущего раздела -- if tab_id then if tab_id and tab_id ~= "tool_manager_tab" then От _Val_, 14 Января Отредактировано. Пользуемся кнопкой Код редактора! 1 1 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/14989-instrument/page/4/#findComment-1515019
Kirgudu 1 370 Опубликовано 14 Января Автор Поделиться Опубликовано 14 Января Второе дополнение действительно не помешает, спасибо, внесу в исходники на будущее. А вот с первым не так однозначно, тут бы универсальности добавить. К сожалению, не имею 4к монитора в наличии для теста, так что придётся добавить простую проверку на что-то вроде device().width > N. 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/14989-instrument/page/4/#findComment-1515045
JohnTikhomirov 4 Опубликовано 22 Февраля Поделиться Опубликовано 22 Февраля В запакованной модифицированной gamedata работать не будет, я верно понял? Ссылка на комментарий https://www.amk-team.ru/forum/topic/14989-instrument/page/4/#findComment-1516497
Kirgudu 1 370 Опубликовано 23 Февраля Автор Поделиться Опубликовано 23 Февраля 23 часа назад, JohnTikhomirov сказал: В запакованной модифицированной gamedata работать не будет, я верно понял? Не будет, к сожалению. Пояснение Где-то с год назад я в течение месяца экспериментировал с разными сочетаниями настройки папок в fsgame.ltx и методами класса FS: exist(), update_path(), r_open, file_list_open() и file_list_open_ex(), которые, по идее, как раз и должны без проблем работать с запакованными ресурсами наряду с распакованными. Сверялся с кодом ванильного движка, чтобы посмотреть, как работают эти методы и куда они лезут. Фиг вам, есть проблемы. Обычно заканчивалось всё одним из трёх итогов: либо из игрового архива не читается то, что мне нужно (это при определённых записях в fsgame.ltx), либо читается всё, но игра при этом не запускается или начинает вести себя странно, так как видит (не знаю уж за счёт какого предварительного чтения и кеширования) то, что расположено в подпапках конфигов и пытается использовать дважды или тогда, когда не надо, либо возникал вылет/зависание процесса при попытке чтения определённых файлов из игровых архивов, которые имеют некий изъян. Возможно, современные модифицированные движки исключают такие сложности, но я с ними не работаю. В итоге всё без толку, универсального решения я тогда не нашёл, а тратить на это ещё больше времени не посчитал возможным. Отсюда рекомендация необходимые файлы вытаскивать из игровых конфигов и оставлять в распакованном виде. Будь Инструмент более популярен и востребован, я, может, и вернулся бы к этому вопросу однажды, но пока так. 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/14989-instrument/page/4/#findComment-1516543
RayTwitty 587 Опубликовано 23 Февраля Поделиться Опубликовано 23 Февраля 7 часов назад, Kirgudu сказал: Фиг вам, есть проблемы. Да, с этим всем на ванильном движке каши не сварить. Я для этого делал отдельный экспорт интерфейса работы с XML (который дергает штатные методы работы с ресурсами игры). Но это уже правки движка. Единственное что тут приходит на ум, это автоматизировать процесс 7 часов назад, Kirgudu сказал: необходимые файлы вытаскивать из игровых конфигов и оставлять в распакованном виде используя например функцию из анпакера от Charsi: https://disk.yandex.ru/d/w04MOkC2DRPGtg При первом запуске тулзы показывать диалог "Конфиги не найдены. Распаковать?", после чего выдавать сообщение "Конфиги успешно распакованы. Перезапустите игру.". Можно конечно попробовать без перезапуска, но ЕМНИП все функции чтения работают только с кэшированными (на момент запуска игры) файлами. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/14989-instrument/page/4/#findComment-1516557
Kirgudu 1 370 Опубликовано 24 Февраля Автор Поделиться Опубликовано 24 Февраля 10 часов назад, RayTwitty сказал: используя например функцию из анпакера от Charsi: https://disk.yandex.ru/d/w04MOkC2DRPGtg Пробовал, только без предупреждения, чтобы автоматом сам распаковывал, и наталкивался на те же ошибки. Смысл ведь не в том, чтобы распаковать, а потом при повторном запуске взять из кэша - распакованные файлы прекрасно читаются напрямую в момент первого открытия Инструмента после загрузки из сейва. Цель состоит в том, чтобы при настройках fsgame, позволяющих понимать всё содержимое игровых архивов, не дать при этом движку читать какие-то файлы избыточно, с наслоением. Но да, в направлении отдельного вызова распаковщика с перезапуском игры (для распаковки брать одну иерархию папок, после - другую) можно подумать... Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/14989-instrument/page/4/#findComment-1516570
JohnTikhomirov 4 Опубликовано 24 Февраля Поделиться Опубликовано 24 Февраля 23.02.2026 в 19:18, Kirgudu сказал: Фиг вам, есть проблемы Ну да, я вот с этим тоже столкнулся. Выяснил что именно file_list_open и file_list_open_ex с маской "misc\*info.xml" заставляют сломаться VFS и движок перестает читать распакованную геймдату. При этом файлы по маске все же находит, но этот поиск и не нужен когда есть секция [info_portions] в system ini. В итоге сделал чтение через FS:r_open() и r_u8(). С LTX тоже самое можно сделать, но в ini_file нет итерации по секциям, так что нужно прикручивать парсер директивы include. Такое решение подойдет для squad_descr.ltx, там все сквады через него включаются. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/14989-instrument/page/4/#findComment-1516580
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти