Difference between revisions of "In-game coding/ru"

From Space Engineers Wiki
Jump to: navigation, search
Line 267: Line 267:
 
===Список блоков и действий===
 
===Список блоков и действий===
 
<b>Антенна</b>
 
<b>Антенна</b>
*Имя интерфейса: IMyRadioAntenna
+
*Имя интерфейса:
*Родитель: IMyFunctionalBlock
+
:IMyRadioAntenna
*Поля: float Radius
+
*Родитель:
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:float Radius
 
*Действия:
 
*Действия:
 
:OnOff - Переключить блок вкл/выкл
 
:OnOff - Переключить блок вкл/выкл
Line 279: Line 282:
  
 
<b>Дуговая печь</b>
 
<b>Дуговая печь</b>
*Имя интерфейса: IMyRefinery
+
*Имя интерфейса:
*Родитель: IMyProductionBlock
+
:IMyRefinery
*Родитель: IMyFunctionalBlock
+
*Родитель:
*Поля: bool UseConveyorSystem
+
:IMyProductionBlock
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:bool UseConveyorSystem
 
*Действия:
 
*Действия:
 
:OnOff - Переключить блок вкл/выкл
 
:OnOff - Переключить блок вкл/выкл
Line 291: Line 297:
  
 
<b>Искусственная масса</b>
 
<b>Искусственная масса</b>
*Имя интерфейса: IMyVirtualMass
+
*Имя интерфейса:
*Родитель: IMyFunctionalBlock
+
:IMyVirtualMass
*Поля: None
+
*Родитель:
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:None
 
*Действия:
 
*Действия:
 
:OnOff - Переключить блок вкл/выкл
 
:OnOff - Переключить блок вкл/выкл
Line 301: Line 310:
  
 
<b>Сборщик</b>
 
<b>Сборщик</b>
*Имя интерфейса: IMyAssembler
+
*Имя интерфейса:
*Родитель: IMyProductionBlock
+
:IMyAssembler
*Родитель: IMyFunctionalBlock
+
*Родитель:
*Поля: bool UseConveyorSystem
+
:IMyProductionBlock
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:bool UseConveyorSystem
 
*Действия:
 
*Действия:
 
:OnOff - Переключить блок вкл/выкл
 
:OnOff - Переключить блок вкл/выкл
Line 313: Line 325:
  
 
<b>Батарея</b>
 
<b>Батарея</b>
*Имя интерфейса: IMyBatteryBlock
+
*Имя интерфейса:
*Родитель: IMyFunctionalBlock
+
:IMyBatteryBlock
*Поля: bool HasCapacityRemaining
+
*Родитель:
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:bool HasCapacityRemaining
 
*Действия:
 
*Действия:
 
:OnOff - Переключить блок вкл/выкл
 
:OnOff - Переключить блок вкл/выкл
Line 324: Line 339:
  
 
<b>Маяк</b>
 
<b>Маяк</b>
*Имя интерфейса: IMyBeacon
+
*Имя интерфейса:
*Родитель: IMyFunctionalBlock
+
:IMyBeacon
*Поля: float Radius  
+
*Родитель:
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:float Radius  
 
*Действия:
 
*Действия:
 
:OnOff - Переключить блок вкл/выкл
 
:OnOff - Переключить блок вкл/выкл
Line 336: Line 354:
  
 
<b>Кнопочная панель</b>
 
<b>Кнопочная панель</b>
*Имя интерфейса: IMyButtonPanel
+
*Имя интерфейса:
*Поля: bool AnyoneCanUse
+
:IMyButtonPanel
 +
*Поля:
 +
:bool AnyoneCanUse
 
*Действия:
 
*Действия:
 
:AnyoneCanUse - Все могут использовать вкл/выкл
 
:AnyoneCanUse - Все могут использовать вкл/выкл
Line 343: Line 363:
  
 
<b>Камера</b>
 
<b>Камера</b>
*Имя интерфейса: IMyCameraBlock
+
*Имя интерфейса:
*Родитель: IMyFunctionalBlock
+
:IMyCameraBlock
*Поля: None
+
*Родитель:
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:None
 
*Действия:
 
*Действия:
 
:OnOff - Переключить блок вкл/выкл
 
:OnOff - Переключить блок вкл/выкл
Line 354: Line 377:
  
 
<b>Кабина</b>
 
<b>Кабина</b>
*Имя интерфейса: IMyCockpit
+
*Имя интерфейса:
*Родитель: IMyShipController
+
:IMyCockpit
 +
*Родитель:
 +
:IMyShipController
 
*Поля:
 
*Поля:
 
:bool ControlWheels
 
:bool ControlWheels
Line 369: Line 394:
  
 
<b>Сборщик</b>
 
<b>Сборщик</b>
*Имя интерфейса: IMyCollector
+
*Имя интерфейса:
*Родитель: IMyFunctionalBlock
+
:IMyCollector
*Поля: bool UseConveyorSystem
+
*Родитель:
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:bool UseConveyorSystem
 
*Действия:
 
*Действия:
 
:OnOff - Переключить блок вкл/выкл
 
:OnOff - Переключить блок вкл/выкл
Line 380: Line 408:
  
 
<b>Коннектор</b>
 
<b>Коннектор</b>
*Имя интерфейса: IMyShipConnector
+
*Имя интерфейса:
*Родитель: IMyFunctionalBlock
+
:IMyShipConnector
 +
*Родитель:
 +
:IMyFunctionalBlock
 
*Поля:
 
*Поля:
 
:bool ThrowOut  
 
:bool ThrowOut  
Line 396: Line 426:
  
 
<b>Панель управления</b>
 
<b>Панель управления</b>
*Имя интерфейса: IMyControlPanel
+
*Имя интерфейса:
*Поля: None
+
:IMyControlPanel
*Действия: None
+
*Поля:
 +
:None
 +
*Действия:
 +
:None
  
  
 
<b>Терминал управления</b>
 
<b>Терминал управления</b>
*Имя интерфейса: IMyCockpit
+
*Имя интерфейса:
*Родитель: IMyShipController
+
:IMyCockpit
 +
*Родитель:
 +
:IMyShipController
 
*Поля:
 
*Поля:
 
:bool ControlWheels
 
:bool ControlWheels
Line 417: Line 452:
  
 
<b>Дверь</b>
 
<b>Дверь</b>
*Имя интерфейса: IMyDoor
+
*Имя интерфейса:
*Родитель: IMyFunctionalBlock
+
:IMyDoor
*Поля: bool Open
+
*Родитель:
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:bool Open
 
*Действия:
 
*Действия:
 
:OnOff - Переключить блок вкл/выкл
 
:OnOff - Переключить блок вкл/выкл
Line 430: Line 468:
  
 
<b>Бур</b>
 
<b>Бур</b>
*Имя интерфейса: IMyShipDrill
+
*Имя интерфейса:
*Родитель: IMyFunctionalBlock
+
:IMyShipDrill
*Поля: bool UseConveyorSystem
+
*Родитель:
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:bool UseConveyorSystem
 
*Действия:
 
*Действия:
 
:OnOff - Переключить блок вкл/выкл
 
:OnOff - Переключить блок вкл/выкл
Line 441: Line 482:
  
 
<b>Кресло пилота</b>
 
<b>Кресло пилота</b>
*Имя интерфейса: IMyCockpit
+
*Имя интерфейса:
*Родитель: IMyShipController
+
:IMyCockpit
 +
*Родитель:
 +
:IMyShipController
 
*Поля:
 
*Поля:
 
:bool ControlWheels
 
:bool ControlWheels
Line 456: Line 499:
  
 
<b>Турель Гатлинга</b>
 
<b>Турель Гатлинга</b>
*Имя интерфейса: IMyLargeGatlingTurret
+
*Имя интерфейса:
*Родитель: IMyLargeConveyorTurretBase
+
:IMyLargeGatlingTurret
*Родитель: IMyLargeTurretBase
+
*Родитель:
*Родитель: IMyFunctionalBlock
+
:IMyLargeConveyorTurretBase
 +
:IMyLargeTurretBase
 +
:IMyFunctionalBlock
 
*Поля:
 
*Поля:
 
:bool UseConveyorSystem  
 
:bool UseConveyorSystem  
Line 475: Line 520:
  
 
<b>Генератор гравитации</b>
 
<b>Генератор гравитации</b>
*Имя интерфейса: IMyGravityGenerator
+
*Имя интерфейса:
*Родитель: IMyGravityGeneratorBase
+
:IMyGravityGenerator
*Родитель: IMyFunctionalBlock
+
*Родитель:
 +
:IMyGravityGeneratorBase
 +
:IMyFunctionalBlock
 
*Поля:
 
*Поля:
 
:float FieldWidth  
 
:float FieldWidth  
Line 498: Line 545:
  
 
<b>Резак</b>
 
<b>Резак</b>
*Имя интерфейса: IMyShipGrinder
+
*Имя интерфейса:
*Родитель: IMyShipToolBase
+
:IMyShipGrinder
*Родитель: IMyFunctionalBlock
+
*Родитель:
*Поля: None
+
:IMyShipToolBase
 +
*Родитель:
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:None
 
*Действия:
 
*Действия:
 
:OnOff - Переключить блок вкл/выкл
 
:OnOff - Переключить блок вкл/выкл
Line 510: Line 561:
  
 
<b>Гироскоп</b>
 
<b>Гироскоп</b>
*Имя интерфейса: IMyGyro
+
*Имя интерфейса:
*Родитель: IMyFunctionalBlock
+
:IMyGyro
 +
*Родитель:
 +
:IMyFunctionalBlock
 
*Поля:
 
*Поля:
 
:float GyroPower  
 
:float GyroPower  
Line 531: Line 584:
 
:IncreaseRoll - Увеличить крен
 
:IncreaseRoll - Увеличить крен
 
:DecreaseRoll - Уменьшить крен
 
:DecreaseRoll - Уменьшить крен
 +
 +
 +
<b>Лампа</b>
 +
*Имя интерфейса:
 +
:IMyInteriorLight
 +
*Родитель:
 +
:IMyLightingBlock
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:float Radius
 +
:float Intensity
 +
:float BlinkIntervalSeconds
 +
:float BlinkLenght
 +
:float BlinkOffset
 +
*Действия:
 +
:OnOff - Переключить блок вкл/выкл
 +
:OnOff_On - Переключить блок вкл
 +
:OnOff_Off - Переключить блок выкл
 +
:IncreaseRadius - Увеличить радиус
 +
:DecreaseRadius - Уменьшить радиус
 +
:IncreaseBlink Interval - Увеличить интервал вспышек
 +
:DecreaseBlink Interval - Уменьшить интервал вспышек
 +
:IncreaseBlink Lenght - Увеличить продолжительность вспышек
 +
:DecreaseBlink Lenght - Уменьшить продолжительность вспышек
 +
:IncreaseBlink Offset - Увеличить задержку вспышек
 +
:DecreaseBlink Offset - Уменьшить задержку вспышек
 +
 +
 +
<b>Турель</b>
 +
*Имя интерфейса:
 +
:IMyLargeInteriorTurret
 +
*Родитель:
 +
:IMyLargeTurretBase
 +
*Имя интерфейса:
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:bool CanControl
 +
:float Range
 +
*Действия:
 +
:OnOff - Переключить блок вкл/выкл
 +
:OnOff_On - Переключить блок вкл
 +
:OnOff_Off - Переключить блок выкл
 +
:Control - Управление
 +
:IncreaseRange - Увеличить радиус
 +
:DecreaseRange - Уменьшить радиус
 +
 +
 +
<b>Посадочные шасси</b>
 +
*Имя интерфейса:
 +
:IMyLandingGear
 +
*Родитель:
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:float BreakForce
 +
*Действия:
 +
:OnOff - Переключить блок вкл/выкл
 +
:OnOff_On - Переключить блок вкл
 +
:OnOff_Off - Переключить блок выкл
 +
:Lock - Запереть
 +
:Unlock - Отпереть
 +
:SwitchLock - Переключить стыковки
 +
:Autolock - Автозацеп вкл/выкл
 +
:IncreaseBreakForce - Увеличить силу отрыва
 +
:DecreaseBreakForce - Уменьшить силу отрыва
 +
 +
 +
<b>Малый грузовой контейнер</b>
 +
*Имя интерфейса:
 +
:IMyCargoContainer
 +
*Поля:
 +
:None
 +
*Действия:
 +
:None
 +
 +
 +
<b>Средний грузовой контейнер</b>
 +
*Имя интерфейса:
 +
:IMyCargoContainer
 +
*Поля:
 +
:None
 +
*Действия:
 +
:None
 +
 +
 +
<b>Большой грузовой контейнер</b>
 +
*Имя интерфейса:
 +
:IMyCargoContainer
 +
*Поля:
 +
:None
 +
*Действия:
 +
:None
 +
 +
 +
<b>Малый реактор</b>
 +
*Имя интерфейса:
 +
:IMyReactor
 +
*Родитель:
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:bool UseConveyorSystem
 +
*Действия:
 +
:OnOff - Переключить блок вкл/выкл
 +
:OnOff_On - Переключить блок вкл
 +
:OnOff_Off - Переключить блок выкл
 +
:UseConveyor - Использовать систему конвейеров вкл/выкл
 +
 +
 +
<b>Большой реактор</b>
 +
*Имя интерфейса:
 +
:IMyReactor
 +
*Родитель:
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:bool UseConveyorSystem
 +
*Действия:
 +
:OnOff - Переключить блок вкл/выкл
 +
:OnOff_On - Переключить блок вкл
 +
:OnOff_Off - Переключить блок выкл
 +
:UseConveyor - Использовать систему конвейеров вкл/выкл
 +
 +
 +
<b>Малый ускоритель</b>
 +
*Имя интерфейса:
 +
:IMyThrust
 +
*Родитель:
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:float ThrustOverride
 +
*Действия:
 +
:OnOff - Переключить блок вкл/выкл
 +
:OnOff_On - Переключить блок вкл
 +
:OnOff_Off - Переключить блок выкл
 +
:IncreaseOverride - Увеличить тягу
 +
:DecreaseOverride - Уменьшить тягу
 +
 +
 +
<b>Большой ускоритель</b>
 +
*Имя интерфейса:
 +
:IMyThrust
 +
*Родитель:
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:float ThrustOverride
 +
*Действия:
 +
:OnOff - Переключить блок вкл/выкл
 +
:OnOff_On - Переключить блок вкл
 +
:OnOff_Off - Переключить блок выкл
 +
:IncreaseOverride - Увеличить тягу
 +
:DecreaseOverride - Уменьшить тягу
 +
 +
 +
<b>Медпункт</b>
 +
*Имя интерфейса:
 +
:IMyMedicalRoom
 +
*Родитель:
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:None
 +
*Действия:
 +
:OnOff - Переключить блок вкл/выкл
 +
:OnOff_On - Переключить блок вкл
 +
:OnOff_Off - Переключить блок выкл
 +
 +
 +
<b>Стыковочный блок</b>
 +
*Имя интерфейса:
 +
:IMyShipMergeBlock
 +
*Родитель:
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:None
 +
*Действия:
 +
:OnOff - Переключить блок вкл/выкл
 +
:OnOff_On - Переключить блок вкл
 +
:OnOff_Off - Переключить блок выкл
 +
 +
 +
<b>Ракетная турель</b>
 +
*Имя интерфейса:
 +
:IMyLargeMissileTurret
 +
*Родитель:
 +
:IMyLargeConveyorTurretBase
 +
:IMyLargeTurretBase
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:bool UseConveyorSystem
 +
:bool CanControl
 +
:float Range
 +
*Действия:
 +
:OnOff - Переключить блок вкл/выкл
 +
:OnOff_On - Переключить блок вкл
 +
:OnOff_Off - Переключить блок выкл
 +
:Control - Управление
 +
:IncreaseRange - Увеличить радиус
 +
:DecreaseRange - Уменьшить радиус
 +
:UseConveyor - Использовать систему конвейеров вкл/выкл
 +
 +
 +
<b>Детектор руды</b>
 +
*Имя интерфейса:
 +
:IMyOreDetector
 +
*Родитель:
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:float Range
 +
:bool BroadcastUsingAntennas
 +
*Действия:
 +
:OnOff - Переключить блок вкл/выкл
 +
:OnOff_On - Переключить блок вкл
 +
:OnOff_Off - Переключить блок выкл
 +
 +
 +
<b>Пассажирское кресло</b>
 +
*Имя интерфейса:
 +
:IMyCockpit
 +
*Родитель:
 +
:IMyShipController
 +
*Поля:
 +
:bool ControlWheels
 +
:bool ControlThrusters
 +
:bool HandBrake
 +
:bool DampenersOverride
 +
*Действия:
 +
:ControlThrusters - Управление ускорителями вкл/выкл
 +
:ControlWheels - Управление колесами вкл/выкл
 +
:HandBrake - Ручной тормоз вкл/выкл
 +
:DampenersOverride - Гаситель инерции вкл/выкл
 +
 +
 +
<b>Поршень</b>
 +
*Имя интерфейса:
 +
:IMyPistonBase
 +
*Родитель:
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:float Velocity
 +
:float MinLimit
 +
:float MaxLimit
 +
*Действия:
 +
:OnOff - Переключить блок вкл/выкл
 +
:OnOff_On - Переключить блок вкл
 +
:OnOff_Off - Переключить блок выкл
 +
:Reverse - Реверс
 +
:IncreaseVelocity - Увеличить скорость
 +
:DecreaseVelocity - Уменьшить скорость
 +
:ResetVelocity - Сбросить скорость
 +
:IncreaseUpperLimit - Увеличить максимальную дистанцию
 +
:DecreaseUpperLimit - Уменьшить максимальную дистанцию
 +
:IncreaseLowerLimit - Увеличить минимальную дистанцию
 +
:DecreaseLowerLimit - Уменьшить минимальную дистанцию
 +
 +
 +
<b>Programmable block</b>
 +
*Имя интерфейса:
 +
:IMyProgrammableBlock
 +
*Родитель:
 +
:IMyFunctionalBlock
 +
*Поля:
 +
:bool IsRunning
 +
*Действия:
 +
:OnOff - Переключить блок вкл/выкл
 +
:OnOff_On - Переключить блок вкл
 +
:OnOff_Off - Переключить блок выкл
 +
:Run - Run

Revision as of 01:45, 3 January 2015





Программируемый блок - блок, добавленный в обновлении 1.063. Позволяет контролировать системы кораблей с помощью скриптов на языке С#. На данный момент способен управлять всем стандартным функционалом терминала.


Ограничения

Ниже вы найдете список известных ограничений о которых мы знаем, а так же возможные их решения.


Оператор "foreach" не работает на 64-битной системе
  • Проблема:
На данный момент использование оператора "foreach" внутри скрипта приведет к "bad program expection" и остановит запуск скрипта. Мы работаем над устранением этой проблемы.
  • Решение:
Все наши внутри-игровые интерфейсы работают со списками "list" как с коллекциями. Пожалуйста, используйте итерационный цикл "for" для работы с ними.


Лямбда-выражения не работают
  • Проблема:
На данный момент лямбда-выражения не поддерживаются. Если вы воспользуетесь ими в скрипте, то это вызовет исключение и скрипт не запустится.
  • Решение:
Пожалуйста, используйте методы вместо лямбда-выражений.


Пользовательские константы и статичные методы не работают
  • Проблема:
На данный момент использование констант или статичных методов приводит к неработоспособности скрипта.
  • Решение:
Пожалуйста, не используйте в скрипте константы или статичные пользовательские методы.


Переменные, устанавливаемые пользователем - не сохраняются
  • Проблема:
Пользовательские переменные используемые в скрипте не сохраняются и после загрузки возвращаются к своим значениям по умолчанию.
  • Решение:
Отсутствует.


Обзор интерфейса


Программируемый блок

Панель программируемого блока на данный момент содержит следующие кнопки:
Edit – открыть редактор для редактирования скриптов и возможности сохранения/загрузки их на диск.
Также вы можете загрузить свои скрипты в "workshop" или загрузить себе скрипты, на которые вы подписаны.
Run – запустить скрипт сохраненный в редакторе. Скрипт будет запущен один раз. Однако эта кнопка является действием в терминале и вы можете соединить ее с сенсором, таймером или добавить на панель быстрого доступа.
Steamworkshop webupload previewfile 360966557 preview.jpg


Редактор

Steamworkshop webupload previewfile 360966557 preview (1).jpg
Редактор кода содержит следующие кнопки:
Help – открыть мануал по программированию в игре.
Check code – проверить код на наличие ошибок, а так же возможность использовать данный код.
Remember & Exit – сохранить ваш код, закрывает экран редактора и переведет к панели терминала.
Remember code – сохранить ваш код и оставит экран редактора открытым.
Browse Workshop – открыть окно для управления скриптами, вы можете сохранить/загрузить скрипты на диск, загрузить свои скрипты в "workshop" или загрузить себе скрипты, на которые вы подписаны.
Line counter – отобразить текущую строку кода и общее количество строк в коде.


Экран "Workshop"

Browse workshop.jpg
Этот экран аналогичный экрану с чертежами и содержит следующие кнопки:
Ok – загрузить выбранный скрипт в редактор и закроет экран.
Cancel – закрыть экран (изменения не будут внесены в редактор)
Details – открыть экран "детали", где вы можете увидеть описание скрипта.
Rename (только для локальных скриптов) – переименовать выбранный скрипт, если вы попытаетесь переименовать существующий скрипт, игра попросит подтверждение.
Delete (только для локальных скриптов) – удалить выбранный скрипт, после подтверждения.
Create from editor – создать новый скрипт с именем по умолчанию Script_XX, которое начинается с 0, и если скрипт с уже выбранным именем существует, то числовое значение в названии будет повышено. Для примера, первым будет Script_0, далее Script_1 и т.д...
Replace from editor (только для локальных скриптов) – заменить (после подтверждения пользователя) выбранный скрипт на скрипт из редактора.
Refresh Scripts – обновить локальные скрипты и скрипты на которые вы подписаны.


Детали (локальный скрипт)

Details (local script).jpg
Этот экран показывает детали для локальных скриптов и содержит следующие кнопки:
Rename – переименовать выбранный скрипт, если вы попытаетесь переименовать существующий скрипт, игра попросит подтверждение.
Delete – удалить выбранный скрипт, после подтверждения.
Publish – опубликовать выбранный скрипт в "workshop" и показать странницу с опубликованным скриптом.
Browse Workshop – открыть экран "workshop" для просмотра, а также подписаться на скрипты.
Close – закрыть экран.


Детали ("workshop" скрипт)

Details (workshop script).jpg
Этот экран показывает детали для скриптов из "workshop" и содержит следующие кнопки:
Open in Workshop – открыть "workshop" страницу скрипта.
Close – закрыть экран.


Гайд по программированию


Доступ к редактору

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


Метод Main

Метод Main - создается при первом открытии редактора, этот метод является основной точкой входа в ваш скрипт. При переименовании или удаление этого метода скрипт не запуститься и вы получите уведомление.
Пользовательские методы/переменные могут быть определены и использованы но только внутри главного метода "main".


Видимость переменных

Есть два типа переменных для скрипта:
-Local (внутри методов) - эти переменные будут хранить значение только во время выполнения метода.
Подробнее - локальная переменная находится в области видимости до тех пор, пока закрывающая фигурная скобка не укажет конец блока операторов или метода, в котором она объявлена.А так же, объявленная в операторах цикла "for", "while" или подобных им, видима в пределах тела цикла.
-Global (за пределами методов) - эти переменные будут хранить значения при работе всего скрипта.
Подробнее - если переменная должна сохранить значение между отдельными блоками программы, она должна быть определена вне этих методов т.е. глобально.
-После нажатия "Remember & Exit" или "Remember" кнопки, предыдущий скрипт будет переписан и все глобальные переменные будут потеряны.


Компиляция

Когда вы нажмете кнопку “Check code”, код будет скомпилирован, также будет показан результат компиляции.
Процесс компиляции состоит из двух этапов:
-Во первых, код внутри редактора будет проверен на синтаксические ошибки, внутри языка C#
Если во время компиляции возникнут какие-либо ошибки, компиляция будет прервана и вы получите уведомление:
Compilation failed 1.jpg

К примеру "ааа" строка была помещена перед главным методом. Это не правильное языковое построение и компиляция будет прервана.
Также в сообщении об ошибке будет показана строка, в которой допущена ошибка и описание ошибки.


-Во вторых, код будет проверен на наличие недопустимых имен или типов. Если во время компиляции возникнут какие-либо ошибки, компиляция будет прервана и вы получите уведомление:
Compilation failed 2.jpg
К примеру System.IO.Directory был использован для удаления другого каталога. Это запрещено и вы получите уведомление: “Not allowed type was used in script”.


-Если компиляция и проверка проходит успешно, вы получите уведомление:
Compilation sucessfull.jpg
Это означает, что код не содержит ошибок в языке или не разрешенных методов.


Выполнение скрипта

Когда вы нажимаете кнопку "Run" или добавляете действие на панель быстрого доступа, скрипт будет выполнен. На данный момент "Run" должен быть использован вручную, т.е. пользователю нужно нажать кнопку "Run" или добавить действие на панель быстрого доступа.
Скрипт будет выполнен только на сервере, даже если был запущен из клиента, все клиенты будут уведомлены, если запуск скрипта будет прерван.
В случае, если работа скрипта будет прервана, скрипт не запуститься до того момента, пока пользователь не откроет редактор и не отредактирует скрипт.


Вычисление команд

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


Доступные интерфейсы


Возможные действия

На данный момент в скрипте вы можете использовать только действия доступные в панели управления.
Пользователь имеет доступ только к объектам расположенным в одной сети, где находится программируемый блок.


Переменная GridTerminalSystem

В настоящее время, кроме "встроенных" переменных, пользователь может использовать переменную GridTerminalSystem.
Она является точкой входа во всю сеть корабля, и имеет следующие доступные методы:
List<IMyTerminalBlock> Blocks {get;}
List<IMyBlockGroup> BlockGroups {get;}
void GetBlocksOfType<T>(List<IMyTerminalBlock> blocks, Func<IMyTerminalBlock, bool> collect = null);
void SearchBlocksOfName(string name,List<IMyTerminalBlock> blocks, Func<IMyTerminalBlock, bool> collect = null);
IMyTerminalBlock GetBlockWithName(string name);
С помощью этих методов все "терминальные" блоки внутри сети могут быть собраны.


Blocks - данное свойство возвращает все блоки из сети терминала, данный метод внутренне выделяет новую память.
BlockGroups - возвращает все группы блоков из сети терминала, этот метод внутренне выделяет новую память.
GetBlocksOfType - возвращает все блоки указанного типа.
SearchBlocksOfName - данный метод является полнотекстовым поиском между всеми блоками и возвращает блок, который содержит искомую строку, поиск не чувствителен к регистру.
GetBlockWithName - данный метод возвращает первый блок с точным названием, которое было задано, поиск чувствителен к регистру.


Func<IMyTerminalBlock, BOOL> - данный "collect" метод определяет условие поиска внутри другого метода поиска. ( для примера: метод передается как параметр в метод поиска GetBlocksOfType или SearchBlocksOfName).
Метод "collect" интерфейса "IMyRadioAntenna" может использоваться для поиска включенных антенн или антенн с необходимым вам радиусом вещания.


IMyCubeBlock

IMyCubeBlock это базовый класс для каждого "терминального" блока. Он имеет следующие свойства и методы:
BOOL IsBeingHacked {get; }
BOOL IsFunctional {get; }
BOOL IsWorking {get; }
VRageMath.Vector3I Position {get; }


IsFunctional - свойство сообщает, если блок достроен до уровня, когда он может работать.
IsWorking - свойство сообщает, имеет ли данный блок достаточное питание для работы.


IMyTerminalBlock

IMyTerminalBlock это базовый класс для каждого "терминального" блока. Он имеет следующие свойства и методы:
string CustomName
string CustomNameWithFaction
string DetailedInfo
bool HasLocalPlayerAccess()
bool HasPlayerAccess(long playerId)
void RequestShowOnHUD(bool enable)
void SetCustomName(string text)
void SetCustomName(StringBuilder text)
bool ShowOnHUD
void GetActions(List<Sandbox.ModAPI.Interfaces.ITerminalAction> resultList, Func<Sandbox.ModAPI.Interfaces.ITerminalAction, bool> collect = null);
void SearchActionsOfName(string name,List<Sandbox.ModAPI.Interfaces.ITerminalAction> resultList, Func<Sandbox.ModAPI.Interfaces.ITerminalAction, bool> collect = null);
Sandbox.ModAPI.Interfaces.ITerminalAction GetActionWithName(string name);


GetActions - данный метод возвращает все доступные действия для текущего блока.
SearchActionsOfName - данный метод является полнотекстовым поиском между всеми действиями блока и возвращает действия, название которых содержит искомую строку, например, если блок имеет действия: "OnOff, OnOff_On, OnOff_Off".


SearchActionsOfName с "OnOff" - вернет все действия
SearchActionsOfName с "_On" - вернется только "OnOff_On", поиск "On" вернет все действия. Поиск не чувствителен к регистру.


GetActionWithName - данный метод вернет первое найденное действие с точно заданным названием, поиск чувствителен к регистру.


ITerminalAction

ITerminalAction предоставляет определенные действия, которые могут быть выполнены.
Он имеет следующие свойства и методы:
string Id { get; }
StringBuilder Name { get; }
void Apply(Sandbox.ModAPI.Ingame.IMyCubeBlock block);


Id - это обозначение действия, к примеру: "OnOff", "OnOff_On"
Name - это название действия, которое будет показано в интерфейсе, к примеру: "Toggle block On/Off ,Toggle block On"
Apply - применяет действие к выбранному блоку (вам нужно определить блок, из которого вы берете действие).


IMyFunctionalBlock

IMyFunctionalBlock - это базовый класс для каждого блока, который может быть включен или выключен, он наследуется от "IMyTerminalBlock". Для примера, каждый блок имеющий функции, является "терминальным", но не все "терминальные" блоки могут быть включены или выключены.
Он имеет одно свойство:
bool Enabled
Это свойство отображает: включен или выключен данный блок пользователем.


Блоки и действия


Дисклеймер

Все "терминальные" блоки имеют следующие свойства:
Имя интерфейса: это имя определенного блока в коде, название может отличаться от названия отображаемого на экране постройки. К примеру антенна имеет имя интерфейса "IMyRadioAntenna" - вам нужно использовать этот интерфейс, если вы хотите получить все антенны.


Родитель

Каждый блок имеет родителя (все блоки имеют "IMyTerminalBlock" как родителя), это нужно для того, чтобы получить все блоки одного типа, вместо конкретного блока.
К примеру, если вы хотите получить все блоки света, следует использовать "IMyLightningBlock", а если вы хотите использовать только блок ламы, вы используете "IMyInteriorLight".


Поля

Данное свойство блока доступно только для чтения.
К примеру из "IMyBeacon" вы можете получить свойство радиуса. И основываясь на этом свойстве вы можете увеличить/уменьшить радиус маяка.


Действия

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


Субтип

Одинаковые блоки, которые имеют тех же родителей (к примеру <TypeId> в файле "cubeblocks.sbc") и различаются только по субтипу (к примеру<SubtypeId>).
Это значит, что различия между этими блоками в коде нет.
Примером таких блоков являются грузовые контейнеры: в игре есть три типа грузовых контейнеров: малый, средний и большой. Они различаются только по субтипу, но имеют общий тип.
К примеру "Id" большого контейнера:
<Id>
<TypeId>CargoContainer</TypeId>
<SubtypeId>LargeBlockLargeContainer</SubtypeId>
</Id>
Средний контейнер:
<Id>
<TypeId>CargoContainer</TypeId>
<SubtypeId>SmallBlockMediumContainer</SubtypeId>
</Id>
Малый контейенер:
<Id>
<TypeId>CargoContainer</TypeId>
<SubtypeId>LargeBlockSmallContainer</SubtypeId>
</Id>


В этом случае есть только один класс "IMyCargoContainer" для всех типов грузовых контейнеров.


Список блоков и действий

Антенна

  • Имя интерфейса:
IMyRadioAntenna
  • Родитель:
IMyFunctionalBlock
  • Поля:
float Radius
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
IncreaseRadius - Увеличить радиус вещания
DecreaseRadius - Уменьшить радиус вещания


Дуговая печь

  • Имя интерфейса:
IMyRefinery
  • Родитель:
IMyProductionBlock
IMyFunctionalBlock
  • Поля:
bool UseConveyorSystem
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
UseConveyor - Использовать систему конвейеров вкл/выкл


Искусственная масса

  • Имя интерфейса:
IMyVirtualMass
  • Родитель:
IMyFunctionalBlock
  • Поля:
None
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл


Сборщик

  • Имя интерфейса:
IMyAssembler
  • Родитель:
IMyProductionBlock
IMyFunctionalBlock
  • Поля:
bool UseConveyorSystem
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
UseConveyor - Использовать систему конвейеров вкл/выкл


Батарея

  • Имя интерфейса:
IMyBatteryBlock
  • Родитель:
IMyFunctionalBlock
  • Поля:
bool HasCapacityRemaining
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
Recharge - Перезарядка вкл/выкл


Маяк

  • Имя интерфейса:
IMyBeacon
  • Родитель:
IMyFunctionalBlock
  • Поля:
float Radius
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
IncreaseRadius - Увеличить радиус вещания
DecreaseRadius - Уменьшить радиус вещания


Кнопочная панель

  • Имя интерфейса:
IMyButtonPanel
  • Поля:
bool AnyoneCanUse
  • Действия:
AnyoneCanUse - Все могут использовать вкл/выкл


Камера

  • Имя интерфейса:
IMyCameraBlock
  • Родитель:
IMyFunctionalBlock
  • Поля:
None
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
View - Вид


Кабина

  • Имя интерфейса:
IMyCockpit
  • Родитель:
IMyShipController
  • Поля:
bool ControlWheels
bool ControlThrusters
bool HandBrake
bool DampenersOverride
  • Действия:
ControlThrusters - Управление ускорителями вкл/выкл
ControlWheels - Управление колесами вкл/выкл
HandBrake - Ручной тормоз вкл/выкл
DampenersOverride - Гаситель инерции вкл/выкл


Сборщик

  • Имя интерфейса:
IMyCollector
  • Родитель:
IMyFunctionalBlock
  • Поля:
bool UseConveyorSystem
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
UseConveyor - Использовать систему конвейеров вкл/выкл


Коннектор

  • Имя интерфейса:
IMyShipConnector
  • Родитель:
IMyFunctionalBlock
  • Поля:
bool ThrowOut
bool CollectAll
bool IsLocked
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
ThrowOut - Выбросить вкл/выкл
CollectAll - Собирать всё вкл/выкл
SwitchLock - Переключить стыковки


Панель управления

  • Имя интерфейса:
IMyControlPanel
  • Поля:
None
  • Действия:
None


Терминал управления

  • Имя интерфейса:
IMyCockpit
  • Родитель:
IMyShipController
  • Поля:
bool ControlWheels
bool ControlThrusters
bool HandBrake
bool DampenersOverride
  • Действия:
ControlThrusters - Управление ускорителями вкл/выкл
ControlWheels - Управление колесами вкл/выкл
HandBrake - Ручной тормоз вкл/выкл
DampenersOverride - Гаситель инерции вкл/выкл


Дверь

  • Имя интерфейса:
IMyDoor
  • Родитель:
IMyFunctionalBlock
  • Поля:
bool Open
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
Open - Открыто/Закрыто
Open_On - Открыто
Open_Off - Закрыто


Бур

  • Имя интерфейса:
IMyShipDrill
  • Родитель:
IMyFunctionalBlock
  • Поля:
bool UseConveyorSystem
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
UseConveyor - Использовать систему конвейеров вкл/выкл


Кресло пилота

  • Имя интерфейса:
IMyCockpit
  • Родитель:
IMyShipController
  • Поля:
bool ControlWheels
bool ControlThrusters
bool HandBrake
bool DampenersOverride
  • Действия:
ControlThrusters - Управление ускорителями вкл/выкл
ControlWheels - Управление колесами вкл/выкл
HandBrake - Ручной тормоз вкл/выкл
DampenersOverride - Гаситель инерции вкл/выкл


Турель Гатлинга

  • Имя интерфейса:
IMyLargeGatlingTurret
  • Родитель:
IMyLargeConveyorTurretBase
IMyLargeTurretBase
IMyFunctionalBlock
  • Поля:
bool UseConveyorSystem
bool CanControl
float Range
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
Control - Управление
IncreaseRange - Увеличить радиус
DecreaseRange - Уменьшить радиус
UseConveyor - Использовать систему конвейеров вкл/выкл


Генератор гравитации

  • Имя интерфейса:
IMyGravityGenerator
  • Родитель:
IMyGravityGeneratorBase
IMyFunctionalBlock
  • Поля:
float FieldWidth
float FieldHeight
float FieldDepth
float Gravity
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
IncreaseWidth - Увеличить ширину поля
DecreaseWidth - Уменьшить ширину поля
IncreaseHeight - Увеличить высоту поля
DecreaseHeight - Уменьшить высоту поля
IncreaseDepth - Увеличить глубину поля
DecreaseDepth - Уменьшить глубину поля
IncreaseGravity - Увеличить ускорение
DecreaseGravity - Уменьшить ускорение


Резак

  • Имя интерфейса:
IMyShipGrinder
  • Родитель:
IMyShipToolBase
  • Родитель:
IMyFunctionalBlock
  • Поля:
None
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
UseConveyor - Использовать систему конвейеров вкл/выкл


Гироскоп

  • Имя интерфейса:
IMyGyro
  • Родитель:
IMyFunctionalBlock
  • Поля:
float GyroPower
bool GyroOverride
float Yaw
float Pitch
float Roll
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
IncreasePower - Увеличить мощность
DecreasePower - Уменьшить мощность
Override - Перехват управления вкл/выкл
IncreaseYaw - Увеличить рысканье
DecreaseYaw - Уменьшить рысканье
IncreasePitch - Увеличить тангаж
DecreasePitch - Уменьшить тангаж
IncreaseRoll - Увеличить крен
DecreaseRoll - Уменьшить крен


Лампа

  • Имя интерфейса:
IMyInteriorLight
  • Родитель:
IMyLightingBlock
IMyFunctionalBlock
  • Поля:
float Radius
float Intensity
float BlinkIntervalSeconds
float BlinkLenght
float BlinkOffset
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
IncreaseRadius - Увеличить радиус
DecreaseRadius - Уменьшить радиус
IncreaseBlink Interval - Увеличить интервал вспышек
DecreaseBlink Interval - Уменьшить интервал вспышек
IncreaseBlink Lenght - Увеличить продолжительность вспышек
DecreaseBlink Lenght - Уменьшить продолжительность вспышек
IncreaseBlink Offset - Увеличить задержку вспышек
DecreaseBlink Offset - Уменьшить задержку вспышек


Турель

  • Имя интерфейса:
IMyLargeInteriorTurret
  • Родитель:
IMyLargeTurretBase
  • Имя интерфейса:
IMyFunctionalBlock
  • Поля:
bool CanControl
float Range
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
Control - Управление
IncreaseRange - Увеличить радиус
DecreaseRange - Уменьшить радиус


Посадочные шасси

  • Имя интерфейса:
IMyLandingGear
  • Родитель:
IMyFunctionalBlock
  • Поля:
float BreakForce
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
Lock - Запереть
Unlock - Отпереть
SwitchLock - Переключить стыковки
Autolock - Автозацеп вкл/выкл
IncreaseBreakForce - Увеличить силу отрыва
DecreaseBreakForce - Уменьшить силу отрыва


Малый грузовой контейнер

  • Имя интерфейса:
IMyCargoContainer
  • Поля:
None
  • Действия:
None


Средний грузовой контейнер

  • Имя интерфейса:
IMyCargoContainer
  • Поля:
None
  • Действия:
None


Большой грузовой контейнер

  • Имя интерфейса:
IMyCargoContainer
  • Поля:
None
  • Действия:
None


Малый реактор

  • Имя интерфейса:
IMyReactor
  • Родитель:
IMyFunctionalBlock
  • Поля:
bool UseConveyorSystem
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
UseConveyor - Использовать систему конвейеров вкл/выкл


Большой реактор

  • Имя интерфейса:
IMyReactor
  • Родитель:
IMyFunctionalBlock
  • Поля:
bool UseConveyorSystem
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
UseConveyor - Использовать систему конвейеров вкл/выкл


Малый ускоритель

  • Имя интерфейса:
IMyThrust
  • Родитель:
IMyFunctionalBlock
  • Поля:
float ThrustOverride
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
IncreaseOverride - Увеличить тягу
DecreaseOverride - Уменьшить тягу


Большой ускоритель

  • Имя интерфейса:
IMyThrust
  • Родитель:
IMyFunctionalBlock
  • Поля:
float ThrustOverride
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
IncreaseOverride - Увеличить тягу
DecreaseOverride - Уменьшить тягу


Медпункт

  • Имя интерфейса:
IMyMedicalRoom
  • Родитель:
IMyFunctionalBlock
  • Поля:
None
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл


Стыковочный блок

  • Имя интерфейса:
IMyShipMergeBlock
  • Родитель:
IMyFunctionalBlock
  • Поля:
None
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл


Ракетная турель

  • Имя интерфейса:
IMyLargeMissileTurret
  • Родитель:
IMyLargeConveyorTurretBase
IMyLargeTurretBase
IMyFunctionalBlock
  • Поля:
bool UseConveyorSystem
bool CanControl
float Range
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
Control - Управление
IncreaseRange - Увеличить радиус
DecreaseRange - Уменьшить радиус
UseConveyor - Использовать систему конвейеров вкл/выкл


Детектор руды

  • Имя интерфейса:
IMyOreDetector
  • Родитель:
IMyFunctionalBlock
  • Поля:
float Range
bool BroadcastUsingAntennas
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл


Пассажирское кресло

  • Имя интерфейса:
IMyCockpit
  • Родитель:
IMyShipController
  • Поля:
bool ControlWheels
bool ControlThrusters
bool HandBrake
bool DampenersOverride
  • Действия:
ControlThrusters - Управление ускорителями вкл/выкл
ControlWheels - Управление колесами вкл/выкл
HandBrake - Ручной тормоз вкл/выкл
DampenersOverride - Гаситель инерции вкл/выкл


Поршень

  • Имя интерфейса:
IMyPistonBase
  • Родитель:
IMyFunctionalBlock
  • Поля:
float Velocity
float MinLimit
float MaxLimit
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
Reverse - Реверс
IncreaseVelocity - Увеличить скорость
DecreaseVelocity - Уменьшить скорость
ResetVelocity - Сбросить скорость
IncreaseUpperLimit - Увеличить максимальную дистанцию
DecreaseUpperLimit - Уменьшить максимальную дистанцию
IncreaseLowerLimit - Увеличить минимальную дистанцию
DecreaseLowerLimit - Уменьшить минимальную дистанцию


Programmable block

  • Имя интерфейса:
IMyProgrammableBlock
  • Родитель:
IMyFunctionalBlock
  • Поля:
bool IsRunning
  • Действия:
OnOff - Переключить блок вкл/выкл
OnOff_On - Переключить блок вкл
OnOff_Off - Переключить блок выкл
Run - Run