Как сделать шлюз в space engineers

Обновлено: 05.07.2024


Это простой в использовании скрипт обеспечивает автоматический контроль за шлюзами.
Как работает.
Скрипт принимает строковый аргумент, запоминает его как название шлюза и записывает его в список имён и состояний шлюзов, находит все блоки чии имена начинаются с текста принятого в строковом аргументе. Распознаёт блоки по их типу. Поскольку двери относятся к одному типу их скрипт различает по меткам [int или ext]. Скрипт игнорирует наполненность шлюза кислородом если его негде взять лили некуда закачать. Моргает и светит разными цветами ламп отображая состояние шлюза.
И конечно шлюзов может быть очень много.
Моему скрипту не важно с каким шлюзам работать: с большим ангаром с вентиляцией и лампочками или с маленьким шлюзом из двух дверей.
Как пользоваться: называем блоки относящиеся к шлюзам в определённом формате
[название шлюза][_int или _ext][свой текст].

[название шлюза] - используется в аргументе с которым запускается программный блок.
то есть с каким аргументом запущен Программируемый Блок тот шлюз и обрабатывается.
Кнопку или сенсор нужно настроить на активацию программируемого блока с аргументом [название шлюза]

Метка [int или ext]- предназначена только для дверей. По ней скрипт определяет какая
дверь интерьерная а какая экстерьерная.

[свой текст]- Здесь может быть любой текст скрипт не рассматривает эту часть имени блока
Ну и естественно надо зациклить Программируемый Блок через таймер без аргумента

Как сделать шлюз в space engineers

Хорошее решение, но ещё проще - не ставить там вентиляцию.

Действительно. И благодарю за совет по обложки.

Аватар пользователя Reliciouos

А как текст скрипта посмотреть не в игре? Или обязательно надо в игру заходить, чтобы его увидеть? так лень. ))

Сам пишу сейчас систему управления шлюзами и у меня возникает масса вопросов, может быть у тебя найдутся ответы. Приглашаю к совместной разработке ;)

Что есть сейчас:

Один ПБ обрабатывает все шлюзы сразу. Есть еще один ПБ, который инициализирует шлюз после постройки. Использовать его обязательно сразу после постройки всех ключевых блоков шлюза (две двери, вентиляция, три кнопочных панели, три текстовых панели) для корректной работы в дальнейшем. Инициализатор назначает всем этим блокам нестандартные внутренние имена, по которым потом основной блок будет понимать, с каким шлюзом работаем. Шлюз устроен просто: 3 помещения (объема, как хошь назови):

Внутреннее - например корабль

Шлюз - само помещение шлюза между двумя дверьми

Наружное - улица, космос и т.п. безвоздушное пространство

Работает от двух пар кнопок: Внутреннее помещение + Шлюз и Наружное помещение + Шлюз. Внутри пары кнопки идентичны. Процесс использования следующий:

Выход наружу. Жмем кнопку во внутреннем помещении - в шлюз накачивается воздух, открывается внутренняя дверь. Заходим, жмем в шлюзе одну из двух кнопок (ту, что на выход направлена) - внутренняя дверь закрывается, воздух из шлюза откачивается, открывается наружная дверь.

Есть блокировка открытия двери до полной откачки/закачки воздуха в шлюзе, блокировка начала откачки/закачки воздуха до полного закрытия дверей шлюза.

1. После нажатия кнопки в помещении и до открытия соответствующей двери внутрь шлюза, сам шлюз находится в режиме работы и не реагирует на нажатия всех кнопок шлюза (искуственная блокировка кнопок во избежание багов системы и преднамеренного прерывания работы шлюза). Всё это время главный программный блок занят, что скорее всего не позволяет использовать его на других шлюзах этого же корабля. Какой может быть выход? На ум приходит очередь заданий.

2. Необходимо ввести дополнительные состояния шлюза, т.к. сейчас всегда одна из дверех открыта, другая закрыта. Нужно чтобы обе двери были закрыты - такое standby состояние. Возможно таймер сможет тут помочь. Еще одно состояние - locked - заблокировано. Шлюз полностью закрыт, на кнопки не реагирует - внутренний замок получается. И третье состояние - emergency - аварийное состояние - разгерметизация шлюза при закрытой внешней двери, разгерметизация внутреннего помещения и подобные ситуации. Как шлюз должен себя вести в данной ситуации?

3. Не могу пока придумать, как в системе классифицировать шлюзы: шлюз двух дверей, шлюз двух ангарных дверей, шлюз трёх! дверей (есть ситуации, где такой шлюз может заменить два двухдверных) и т.п.

4. Конечным результатом работы вижу не столько сами шлюзы, сколько отдельный центр управления ими с возможностью видеть состояния каждого из них, удаленного управления каждым шлюзом и т.п.

Как сделать шлюз в space engineers

Владислав Олійник

Скрипт для посадки на планеты.
Аля "Остановить поршень когда посадочное шасси зацепится за астероид"
================================================================
void Main(string argument)
IMyPistonBase LandingPiston = GridTerminalSystem.GetBlockWithName("LandingPistonName") as IMyPistonBase;
IMyLandingGear LandingGear = GridTerminalSystem.GetBlockWithName("LandingGearName") as IMyLandingGear;

if(LandingGear.IsLocked)
LandingPiston.GetActionWithName("ResetVelocity").Apply(LandingPiston);
LandingPiston.GetActionWithName("IncreaseVelocity").Apply(LandingPiston);;
>

КАК заставить это работать:

LandingPistonName и LandingGearName это названия в панели управления (в терминале) поршня и шасси соответственно. Желательно использовать англ.язык и названия без пробелов. К примеру: LandPiston_1; Gear2 и т.п. Я не ручаюсь за работу с кирилицей)
Это все, что вам нужно заменить в скрипте.

Далее таймер: выставляем задержку таймера в 1 секунду (на минимум), ставим в Setup Action запуск отчета таймера и Run программируемого блока.

ОЧЕНЬ ВАЖНО: главное правильно поставить соответствия между программируемым блоком, поршнем и шасси. Ибо может выйти так: "когда шасси1 закреплено остановить поршень2" - сами понимаете такой вариант не катит никаким образом))

p.s. в воркшоп выставлю позже, когда будет готов прототип и видеодемонстрация.

Для работы ЛЮБОГО количества шлюзов требуется ОДИН программируемый блок.

Отображение провреждённых/недостоенных блоков.
Само собой автоматическое :)

Закрытие дверей при падении давления (разгерметизации).
Возможна поблочная настройка, тогда двери где давление выровнялось откроются - закрытым останется только сектор с утечкой.

p.s.
Обращайте внимание - если включить в основную группу ВНЕШНИЕ двери то после стабилизации давления они откроются :D будьте внимательны.

Михаил Сметанкин

Невероятно полезный скрипт, который позволяет с помощью одного нажатия кнопки выбрать положение ротора или поршня. За подробностями смотрите видео по ссылке.

Павел Гусаров

Скрипт предназначен для ведения огня очередями, для этого он попеременно отключает заряженные орудия - здорово повышает огневую мощь и удобство стрельбы. Поддерживает автоматизацию огня. Автор не я.

Ставите необходимое количество оружия, прогблок, таймер и еще какой-нибудь блок, у которого есть опция включить-выключить (обычно это лампа).

Переименовываете все орудия одинаково, к примеру "Пушка", без номеров и всего остального.

Загружаете в прогблок скрипт, меняете значение GUN_NAME на "Пушка". Выставляете задержку стрельбы - значение TIME_STEP, чем больше, тем быстрее стреляет, для некоторых орудий максимальная указана в самом скрипте в комментариях, никогда не ставьте отрицательное значение и ноль. Поставите слишком большое значение TIME_STEP - скрипт будет работать быстрее, чем у орудий задержка между выстрелами, и они будут стрелять как попало. Компилируете и сохраняете.

Таймер переименовываете в "sequencerCycler", лампу переименовываете в "sequencerToggle". На таймере выставляете одно действие - запустить программируемый блок, задержку можно не трогать.

Запускаете прогблок. Включаете блок с именем "sequencerToggle".

Заряжаете орудия жмете на гашетку. Для автоматизации стрельбы просто соберите заскриптованные орудия в группу, и повесьте на горячую клавишу вкл/выкл стрельбы.

Если не все орудия заряжены полностью, то стрелять будет как попало.

При начале стрельбы бывает стреляет сразу из двух орудий.

Имена всех задействованных блоков можно менять в самом скрипте, таким образом можно сделать несколько групп орудий. Если "sequencerToggle" выключен, орудия будут стрелять как обычно - залпом.

Александр Михайлов

Михаил Сметанкин

Михаил Сметанкин

Jin Roh

Никита Селиванов

Адам, не совсем мод - плагин, выводит изображения с камер и турелей на любые LCD

Олег Резанков

Простой скрипт, который на левый дисплей выводит предупреждения о повреждениях, заканчивающемся боезапасе и малом количестве ресурсов. На правый дисплей выводится содержимое всех хранилищ корабля. Центральный дисплей отображает визуальное предупреждение (картинкой).
Имеет возможность небольшой настройки под себя в самом начале скрипта, где необходимо будет прописать свои ЖК панели для работы скрипта. По-умолчанию стоит: ЖК панель слева, ЖК панель справа, ЖК панель центр

Работает на версии 01_171_003 без модов на пиратке.

Побудило написать свой скрипт, так как большинство сложных скриптов у меня не работает. Да и скучно было.

Олег Резанков

Иван,
public void Main(string argument)
<
IMyOxygenTank hTank = GridTerminalSystem.GetBlockWithName("Hydrogen Tank") as IMyOxygenTank;
IMyTextPanel disp = GridTerminalSystem.GetBlockWithName("LCD 1") as IMyTextPanel;
disp.WritePublicText(hTank.GetOxygenLevel().ToString(), false); //заполненность бака
>
выдает значение float от 0 до 1, где 1 - полный бак

Олег Резанков

В программируемом блоке появилась возможность сохранять переменные.
Если заметили, по-умолчанию кроме Main() в редакторе появились две функции public Program() и public void Save().

Конструктор Program() автоматически запускается при первом запуске компьютера. Туда можно запихнуть инициализацию всех переменных и первоначальную настройку оборудования, чтобы не тратить на это время при очередном запуске скрипта.

Функция Save() так же автоматически запускается и сохраняет предоставленное строковое значение. Сохранение происходит не каждый запуск скрипта. Заметил, что сохраняется, когда открываю редактор программируемого блока или сохраняю игру, других триггеров для срабатывания этой функции я не обнаружил.

Если снести программируемый блок, построить другой и вставить туда идентичный код, сохранения не восстанавливаются.

Переменная сохраняется после редактирования скрипта, отключения бортового питания и перезапуска игры (пока не нашел случая, в котором переменная бы не загрузилась).

Пример прикреплен ниже.

Insane Engineer

Может быть и не самый полезный , но прикольный =) Это музыкальный плеер. Проект старый, но оригинальный. Думаю Доп. информации не надо . Ссылка:

Андрей Луцюк

Описание: Скрипт подсчитывает содержимое инвентарей, перемещает позицию, которая не строится в конец очереди сборщика.
Умеет сортировать содержимое по контейнерам и дозаказывать компоненты в ассемблере на основании установленных лимитов.

Настройка:
в поле CustomData вносятся параметры для инициализации скрипта: (любая из строк может быть пустой и будет пропущена)

первая строка - название сборщика из которого берутся лимиты (останавливаем сборщик заказываем компоненты в том количестве,
в каком они всегда должны быть и прописываем название в эту строку)

все последующие строки устанавливают настройки контейнеров, в формате МаскаПоискаКонтейнера:ЧтоВНемЛежит,ЧтоВНемЛежит
что лежит можно указывать частично, типы указываются со * сначала,
например: *контейнер:Строительный - будет складывать Строительный компонент в контейнеры, заканчивающиеся на «контейнер»
*готовая продукция*:*компон,*боепри - все компоненты и боеприпасы будут перемещены в контейнеры в названии которых встречается «готовая продукция»

При первом запуске скрипта инициализация производится автоматически, далее по команде.

Команды: Скрипт поддерживает команды с параметрами. Команда и параметр разделяются «:»

Доступные команды и параметры:
init:panel,limit,storage,reload
производит переинициализацию скрипта из CustomData программного блока, параметрами можно ограничивать что инициализировать
panel - заново ищет текстовые панелей
limit - ищет сборщик из которого берутся лимиты
storage - перенастройка контейнеров
reload - поиск и запись доступных ассемблеров и блоков в которых будет в дальнейшем происходит поиск

? - Выводит информацию о текущих ассемблерах, лимитам и тестовым панелям, с любым параметром также выведет все обслуживаемые блоки с инвентарями

limit:название ассемблера - добавляет к существующим, лимиты из ассемблера. без параметров - очищает все установленные ранее лимиты

>:МаскаПоискаКонтейнера:ЧтоВНемЛежит,ЧтоВНемЛежит
устанавливает отбор для сортировки элементов в контейнере. Если перед первым параметром добавить +, будут добавлены доступные элементы иначе заменены

mask:маска поиска блоков
Устанавливает маску которая применяется при поиске обрабатываемых инвентарей, если маска пустая строка обрабатываются все доступные инвентари

reload:bloc,ass
Находит и запоминает все ассемблеры и блоки в которых будет в дальнейшем происходить поиск. Параметрами можно ограничивать что нужно искать. Без параметров ищет все.
Unload:маска
Производит единоразовое перемещение элементов из блоков подходящих под маску в установленные контейнеры. Полезно при разгрузке бурового корабля.

Скрипт находит все блоки ассемблеров и инвентаре, а затем обходит эти списки. Поэтому если необходимо заново найти инвентари или ассемблеры вызовите команду reload. Если необходимо переинициализировать текстовые панели воспользуйтесь командой init. Это поможет при разрушении готовых или достройке новых блоков.

Все настройки скрипт сохраняет и восстанавливает автоматически, при перезагрузке ничего перенастраивать не нужно

Как сделать шлюз в space engineers

Кирилл Орлов


Кирилл Орлов

Cluster Emperie

Не знаю, пофиксили ли баг/фичу с кислородом (если наполнить помещение воздухом, а потом засосать его обратно в баки, получится процентов на 30 меньше), но лично я ангары герметичные уже не делаю. К тому же, ангарные двери ограничивают размеры "совместимой" с таким гаражом техники, от чего огромные пространства внутри теряют смысл. Боковые коннекторы я посадил бы на поршни для возможности регулировки по высоте, вместо того что бы ставить просто 2 в ряд. Иначе, опять же, не для каждой машины такое расположение подойдет. Потолочные тоже не очень удобно расположены. Высокий транспорт туда через двери не заедет, а вешать на потолке летающую технику. это значит, придется на джетпаке садиться/выходить. В принципе, можно сделать побольше потолочных коннекторов, но посадить их на поршни. Тогда можно стыковать колесную технику за верхний коннектор и поднимать под потолок. Тогда можно и верхнее пространство ангара задействовать и вместимость увеличить. Внешка более-менее, но вот над внутренним пространством еще стоит поработать.

DELETED

Юрий Попов

Бросил перед финальной стадией - нет цвета и различных деталей, которые делают из посредственной работы хорошую.

Николай Белоусов


Николай Белоусов

У меня ощущение, что ты не закончил внутренности. Доработай.

Антон Бордюгов

У меня тоже есть ангар.Но для брони техники.Он правда по меньше.Но более детализирование.

Dmitry Skorobogatyh


Dmitry Skorobogatyh

Вадим Коваленко

Спасибо за конструктивную критику, я учту ошибки и в будущем предоставлю второй вариант.

Евгений Ленёв

Вадим, например можно сделать разметку для удобного позиционирования у коннектору. Шлюз, чтоб каждый раз не откачивать весь объём или по лору там работает персонал с открытым шлемом.

Вадим Коваленко

Евгений, я вот тоже думал, но разметку как в ангаре у кербалов особо начертить не выйдет

Евгений Ленёв

Вадим, банально сделать дорожки на полу в 1 блок шириной, как в бссейне - помогает.

Вадим Коваленко

Dmitry, честно сказать, сути твоего комментария я не уяснил. Какой может быть у ангара характер? Это же не боевой вертолёт, с агрессивными чертами, и не спорткар с плавными линиями, это просто ангар.

Dmitry Skorobogatyh


Dmitry Skorobogatyh ответил Вадиму

Я и не надеялся, что ты уяснишь. Характерные черты присущи не только автомобилестроению, но и архитектуре тоже. "Просто" собрать любой может.

Евгений Ленёв

Для здания - уровень дизайна и детализации вполне. Не идеал, но и не "коробка", что уже более чем хорошо. Тем более у всех навык разный. Напильник и "обкатка" ессно просятся, другими словами имеется нереализованный потенциал и оптимизация. Есть экстерьер, есть интерьер, есть функционал. Но это прежде всего ангар.

Xzadfor Furry


Xzadfor Furry

з.ы. у кого нибудь роверы разрывает? или это чет у меня? (мрды не виноваты потому что я и без них играл и все равно разрывает)

Евгений Ленёв

Да, у меня на биг гриде на неделе был такой инцидент 1 раз. Вышел. Взлетел на джетпаке. Ровер буд то вбило в землю.

Александр Артемьев

Всё хорошо кроме того что плохо, а плохо вот что. Во первых ящики нельзя располагать над собой по гравитации, любой инцидент с разрывом ящика грозит шрапнельным дамагом. Во вторых автор вообще не понимает как и зачем функционирует конвейерная система, полностью под замену. Нет дверей иных кроме главных ворот. При таком размере здания можно было бы и шлюзы для техники сделать, один на въезд и один на выезд чтобы по любому поводу воздух не гонять. Ещё нет никакого технологического наполнения. Речь о мехруке со сваркой или сварочной стенке или вилке или вообще чего-нибудь.
По итогу получается 3 с минусом, совершенствуйся.

Читайте также: