Как работает raycast space engineers
Space Engineers
Тема закреплена. Скорее всего, здесь есть важная информация. 24 янв. 2014 в 3:04 12 мая. 2018 в 2:21 Только что проверил. Взял из мастерской первую попавшуюся планету, подписался, запустил инженеров, начал новую игру, выбрал пустой мир, зашёл в настройки, добавил в модах планету, запустил мир, нажал Shift+F10, в выпадающем списке выбрал планеты, в списке типов планет выбрал ту, что из мастерской, нажал создать и вот она, в космосе, прямо перед носом! То же самое проделал с файлом сохранёнки, где я тестирую моды и разные идеи, там столько всего было понапихано, удалено и просто валяется повсюду, что жуть. Стоя на земле, добавил планету из мода прямо над головой. Так что всё работает.Если же у тебя в меню по Shift+F10 список типов планет вообще пуст (а такого быть не должно, потому что там куча уже встроенных планет), то значит какой-то косяк с игрой. Или конфликт с модами, тогда отключи все и проверь, если список восстановится, ищи конфликтный мод. Или проблема с файлами игры, тогда попробуй переустановить, с полным удалением установленной папки игры из папки стима и рабочей папки игры из AppData/Roaming/SpaceEngineer. Вней всё надо грохнуть, только сохранёнки можешь оставить.
ЗЫ Забыл добавить. Не знаю, в каком режиме ты пробуешь, но меню размножения по Shift+F10 работает только в творческом режиме. В выживании открываются чертежи. Спасибо большое за ответ! Я в сохраненной игре изменял настройки на творческий режим и новую игру запускал в творческом пустой мир! В настройках 6 разных модов планет. В режиме Шифт+Ф10 во вкладке планеты пусто, не появляются ни в какую! Хотя все добавленные чертежи в режиме выживания есть во вкладке. Наверное придется переустановить игру. А не подскажешь где сохранения находятся? В какой папке? 13 мая. 2018 в 0:33 Сохранёнки, моды, чертежи и прочее находятся в папке c:\Users\ИмяПользователя\AppData\Roaming\SpaceEngineers\
Вообще, можно попробовать просто удалить оттуда папку ShaderCache2 (и ShaderCache, если такая есть) и попробовать новую игру. Но лучше грохнуть всё, кроме папки Saves и переустановить игру. Если есть собственноручно сделанные моды, чертежи или скрипты,, не выложенные в мастерскую, их тоже сохрани (в соответствующих папках), иначе они пропадут.. Всё, на что подписан в мастерской, потом автоматически подгрузится заново. Ну и настройки придётся заново выставить. 14 мая. 2018 в 10:06 А как же построить малый корабль находясь на большом? Малая лапа к нему не лепиться.
Попробовал рядом на астероиде -- поставил пару блоков лёгкой брони в грунт, вроде как база получается же -- всё равно малая нога на них не лепиться.
Вот не то чтоб не пристыковывается, а она не ставится на блок. Просто в воздухе висит. Я не могу начать постройку нового малого корабля находясь на астероиде. 14 мая. 2018 в 10:08 14 мая. 2018 в 10:37 Можно через ротор большой построить малый корабыль ( срезать большую пимпу и поставить маленькую через ротор ) 14 мая. 2018 в 11:35
И она улетает в сторону планеты. У меня там 0.1 G.
Можно через ротор большой построить малый корабыль ( срезать большую пимпу и поставить маленькую через ротор )И ещё один глюк поясните пожалуйста.
Я большим кораблём прилетел с планеты на астероид, запарковался, и полетел обратно на планету на маленьком за чем то, уже не помню. А когда возвращался на астероид, то увидел как метка большого корабля (антенна) отделилась от астероида и начала улетать. Так и не догнал, перегрузился с сохранки, и всё нормально, всё на месте, никто никуда без меня не улетел. Играю офлайн, лицензия. Друзей никаких нет.
Программируемый блок
Блоки и действия
Дисклеймер
Все "терминальные" блоки имеют следующие свойства:
Имя интерфейса: это имя определенного блока в коде, название может отличаться от названия отображаемого на экране постройки. К примеру антенна имеет имя интерфейса "IMyRadioAntenna" - вам нужно использовать этот интерфейс, если вы хотите получить все антенны.
Родитель
Каждый блок имеет родителя (все блоки имеют "IMyTerminalBlock" как родителя), это нужно для того, чтобы получить все блоки одного типа, вместо конкретного блока.
К примеру, если вы хотите получить все блоки света, следует использовать "IMyLightningBlock", а если вы хотите использовать только блок ламы, вы используете "IMyInteriorLight".
Данное свойство блока доступно только для чтения.
К примеру из "IMyBeacon" вы можете получить свойство радиуса. И основываясь на этом свойстве вы можете увеличить/уменьшить радиус маяка.
Действия
Все действия, которые вы можете применить к блоку, доступны вам в скрипте, так что если вы хотите уменьшить радиус вещания антенны, вам нужно использовать "DecreaseRadius" действие для блока.
Свойства терминала
Это свойства терминала, которые вы можете получить или выставить. Эти свойства аналогичные значениям, которые находятся внутри терминала. Для установки плавающих значений, таких как радиус антенны, используйте GetValueFloat(String propertyName). Вы можете найти названия свойств для каждого блока в этом руководстве. Чтобы установить значение, используйте SetValueFloat(String propertyName,float value).
Пример: для антенны GetValueFloat(“Radius”) вы получите текущий радиус (аналогично использованию Радиуса в антенне) и SetValueFloat(“Radius”,10) установит значение радиуса на 10.
Вы также можете использовать void GetProperties(List<ITerminalProperty> resultList, Func<ITerminalProperty, bool> collect = null) чтобы получить все свойства этого блока.
Субтип
Одинаковые блоки, которые имеют тех же родителей (к примеру <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" для всех типов грузовых контейнеров.
Ограничения
Ниже вы найдете список известных ограничений о которых мы знаем, а так же возможные их решения.
Contents
Как работает raycast space engineers
Подскажите плиз, что делает функция ускорителей «перехват тяги»? Что перехватывает и откуда?
Как выключить пиратов? Немного бы разобраться сначала в игре, а не дают, платину и уран даже копнуть не могу - хрень мелкая налетает и расстреливает
Денис, понял, спасибо. Подскажите примерно: на какой порядок веса можно расчитывать при 4 больших водородных ускорителях при 3 баках? То есть примерно какие веса я смогу выводить в космос на 60-70км?
Хлопцы, прошу прощения за такой крайне тупой вопрос, я просто недавно скачал игру: как передавать ресурсы через коннектор? Я подсоединил корабль к базе, нажал Р, в коннекторе корабля куча ресов, но они никак не идут дальше(
Скажите как пираты спавнятся? Если я корабль в космосе оставлю надолго - его разберут? Или они на игрока спавнятся?
Hotel, переработка подключена к конвейеру? Руды автоматом уходить должны. А запчасти я руками в нужный контейнер перетаскивал по конвейеру
Денис, мне уже помогли, спасибо. Там "Торговля" была включена.
У меня ионные ускорители не работают на большом корабле. На маленьком все нормально. Типо гироскопы есть, реакторы есть. Но двигатели вообще не работают.
Что делать, пытаюсь зайти на сервер, но захожу как будто в одиночный мир.(лицензия)
Добрый утр Инженеры. Подкиньте пожалуйста идей, как реализовать в игре следующую схему. Идея следующая. Тележка едет с лева на право. Доезжает до конца. Утыкается в сенсор. Сенсор переключает тележку. Она едет в обратную сторону. И так бесконечное число раз. В голову не приходит, как собрать тележку, что бы она ездила сама. Ну то есть я понимаю, поставить колёса, электричество и так далее. Меня интересует именно, что бы она потихоньку двигалась вперёд, без того, что бы я сидел в ней.
Обзор интерфейса
Программируемый блок
Панель программируемого блока на данный момент содержит следующие кнопки:
Edit – открыть редактор для редактирования скриптов и возможности сохранения/загрузки их на диск.
Также вы можете загрузить свои скрипты в "workshop" или загрузить себе скрипты, на которые вы подписаны.
Run – запустить скрипт сохраненный в редакторе. Скрипт будет запущен один раз. Однако эта кнопка является действием в терминале и вы можете соединить ее с сенсором, таймером или добавить на панель быстрого доступа.
Редактор
Редактор кода содержит следующие кнопки:
Help – открыть мануал по программированию в игре.
Check code – проверить код на наличие ошибок, а так же возможность использовать данный код.
Remember & Exit – сохранить ваш код, закрывает экран редактора и переведет к панели терминала.
Remember code – сохранить ваш код и оставит экран редактора открытым.
Browse Workshop – открыть окно для управления скриптами, вы можете сохранить/загрузить скрипты на диск, загрузить свои скрипты в "workshop" или загрузить себе скрипты, на которые вы подписаны.
Line counter – отобразить текущую строку кода и общее количество строк в коде.
Экран "Workshop"
Этот экран аналогичный экрану с чертежами и содержит следующие кнопки:
Ok – загрузить выбранный скрипт в редактор и закроет экран.
Cancel – закрыть экран (изменения не будут внесены в редактор)
Details – открыть экран "детали", где вы можете увидеть описание скрипта.
Rename (только для локальных скриптов) – переименовать выбранный скрипт, если вы попытаетесь переименовать существующий скрипт, игра попросит подтверждение.
Delete (только для локальных скриптов) – удалить выбранный скрипт, после подтверждения.
Create from editor – создать новый скрипт с именем по умолчанию Script_XX, которое начинается с 0, и если скрипт с уже выбранным именем существует, то числовое значение в названии будет повышено. Для примера, первым будет Script_0, далее Script_1 и т.д.
Replace from editor (только для локальных скриптов) – заменить (после подтверждения пользователя) выбранный скрипт на скрипт из редактора.
Refresh Scripts – обновить локальные скрипты и скрипты на которые вы подписаны.
Детали (локальный скрипт)
Этот экран показывает детали для локальных скриптов и содержит следующие кнопки:
Rename – переименовать выбранный скрипт, если вы попытаетесь переименовать существующий скрипт, игра попросит подтверждение.
Delete – удалить выбранный скрипт, после подтверждения.
Publish – опубликовать выбранный скрипт в "workshop" и показать странницу с опубликованным скриптом.
Browse Workshop – открыть экран "workshop" для просмотра, а также подписаться на скрипты.
Close – закрыть экран.
Детали ("workshop" скрипт)
Этот экран показывает детали для скриптов из "workshop" и содержит следующие кнопки:
Open in Workshop – открыть "workshop" страницу скрипта.
Close – закрыть экран.
Доступные интерфейсы
Возможные действия
На данный момент в скрипте вы можете использовать только действия, доступные в панели управления.
Пользователь имеет доступ только к объектам, расположенным в одной сети, где находится программируемый блок.
Переменная GridTerminalSystem
В настоящее время, кроме "встроенных" переменных, пользователь может использовать переменную GridTerminalSystem.
Она является точкой входа во всю сеть корабля, и имеет следующие доступные методы:
List<IMyTerminalBlock> Blocks
List<IMyBlockGroup> BlockGroups
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
BOOL IsFunctional
BOOL IsWorking
VRageMath.Vector3I Position
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
Это свойство отображает: включен или выключен данный блок пользователем.
Как работает raycast 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" выключен, орудия будут стрелять как обычно - залпом.
Простой скрипт, который на левый дисплей выводит предупреждения о повреждениях, заканчивающемся боезапасе и малом количестве ресурсов. На правый дисплей выводится содержимое всех хранилищ корабля. Центральный дисплей отображает визуальное предупреждение (картинкой).
Имеет возможность небольшой настройки под себя в самом начале скрипта, где необходимо будет прописать свои ЖК панели для работы скрипта. По-умолчанию стоит: ЖК панель слева, ЖК панель справа, ЖК панель центр
Работает на версии 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() так же автоматически запускается и сохраняет предоставленное строковое значение. Сохранение происходит не каждый запуск скрипта. Заметил, что сохраняется, когда открываю редактор программируемого блока или сохраняю игру, других триггеров для срабатывания этой функции я не обнаружил.
Если снести программируемый блок, построить другой и вставить туда идентичный код, сохранения не восстанавливаются.
Переменная сохраняется после редактирования скрипта, отключения бортового питания и перезапуска игры (пока не нашел случая, в котором переменная бы не загрузилась).
Пример прикреплен ниже.
Описание: Скрипт подсчитывает содержимое инвентарей, перемещает позицию, которая не строится в конец очереди сборщика.
Умеет сортировать содержимое по контейнерам и дозаказывать компоненты в ассемблере на основании установленных лимитов.
Настройка:
в поле CustomData вносятся параметры для инициализации скрипта: (любая из строк может быть пустой и будет пропущена)
первая строка - название сборщика из которого берутся лимиты (останавливаем сборщик заказываем компоненты в том количестве,
в каком они всегда должны быть и прописываем название в эту строку)
все последующие строки устанавливают настройки контейнеров, в формате МаскаПоискаКонтейнера:ЧтоВНемЛежит,ЧтоВНемЛежит
что лежит можно указывать частично, типы указываются со * сначала,
например: *контейнер:Строительный - будет складывать Строительный компонент в контейнеры, заканчивающиеся на «контейнер»
*готовая продукция*:*компон,*боепри - все компоненты и боеприпасы будут перемещены в контейнеры в названии которых встречается «готовая продукция»
При первом запуске скрипта инициализация производится автоматически, далее по команде.
Команды: Скрипт поддерживает команды с параметрами. Команда и параметр разделяются «:»
Доступные команды и параметры:
init:panel,limit,storage,reload
производит переинициализацию скрипта из CustomData программного блока, параметрами можно ограничивать что инициализировать
panel - заново ищет текстовые панелей
limit - ищет сборщик из которого берутся лимиты
storage - перенастройка контейнеров
reload - поиск и запись доступных ассемблеров и блоков в которых будет в дальнейшем происходит поиск
? - Выводит информацию о текущих ассемблерах, лимитам и тестовым панелям, с любым параметром также выведет все обслуживаемые блоки с инвентарями
limit:название ассемблера - добавляет к существующим, лимиты из ассемблера. без параметров - очищает все установленные ранее лимиты
>:МаскаПоискаКонтейнера:ЧтоВНемЛежит,ЧтоВНемЛежит
устанавливает отбор для сортировки элементов в контейнере. Если перед первым параметром добавить +, будут добавлены доступные элементы иначе заменены
mask:маска поиска блоков
Устанавливает маску которая применяется при поиске обрабатываемых инвентарей, если маска пустая строка обрабатываются все доступные инвентари
reload:bloc,ass
Находит и запоминает все ассемблеры и блоки в которых будет в дальнейшем происходить поиск. Параметрами можно ограничивать что нужно искать. Без параметров ищет все.
Unload:маска
Производит единоразовое перемещение элементов из блоков подходящих под маску в установленные контейнеры. Полезно при разгрузке бурового корабля.
Скрипт находит все блоки ассемблеров и инвентаре, а затем обходит эти списки. Поэтому если необходимо заново найти инвентари или ассемблеры вызовите команду reload. Если необходимо переинициализировать текстовые панели воспользуйтесь командой init. Это поможет при разрушении готовых или достройке новых блоков.
Все настройки скрипт сохраняет и восстанавливает автоматически, при перезагрузке ничего перенастраивать не нужно
Гайд по программированию
Доступ к редактору
Только один игрок может редактировать скрипт. Если кто-нибудь откроет занятый программируемый блок и попытается открыть редактор, он получит уведомление о том, что редактор уже открыт.
Метод Main
Метод Main - создается при первом открытии редактора, этот метод является основной точкой входа в ваш скрипт. При переименовании или удалении этого метода скрипт не запустится и вы получите уведомление.
Пользовательские методы/переменные могут быть определены, но использованы только внутри главного метода "main".
Видимость переменных
Есть два типа переменных для скрипта:
-Local (внутри методов) - эти переменные будут хранить значение только во время выполнения метода.
Подробнее - локальная переменная находится в области видимости до тех пор, пока закрывающая фигурная скобка не укажет конец блока операторов или метода, в котором она объявлена.А так же, объявленная в операторах цикла "for", "while" или подобных им, видима в пределах тела цикла.
-Global (за пределами методов) - эти переменные будут хранить значения при работе всего скрипта.
Подробнее - если переменная должна сохранить значение между отдельными блоками программы, она должна быть определена вне этих методов т.е. глобально.
-После нажатия "Remember & Exit" или "Remember" кнопки, предыдущий скрипт будет переписан и все глобальные переменные будут потеряны.
Компиляция
-Во-вторых, код будет проверен на наличие недопустимых имен или типов. Если во время компиляции возникнут какие-либо ошибки, компиляция будет прервана и вы получите уведомление:
К примеру System.IO.Directory был использован для удаления другого каталога. Это запрещено, и вы получите уведомление: “Not allowed type was used in script”.
-Если компиляция и проверка проходит успешно, вы получите уведомление:
Это означает, что код не содержит ошибок в языке или неразрешенные методы.
Выполнение скрипта
Когда вы нажимаете кнопку "Run" или добавляете действие на панель быстрого доступа, скрипт будет выполнен. На данный момент "Run" должен быть использован вручную, т.е. пользователю нужно нажать кнопку "Run" или добавить действие на панель быстрого доступа.
Скрипт будет выполнен только на сервере, даже если был запущен из клиента, все клиенты будут уведомлены, если запуск скрипта будет прерван.
В случае, если работа скрипта будет прервана, скрипт не запустится до того момента, пока пользователь не откроет редактор и не отредактирует скрипт.
Вычисление команд
Каждый раз, когда скрипт будет запущен, происходит расчет каждой команды внутри скрипта.
Если количество команд внутри скрипта превышает лимит, запуск будет приостановлен и пользователь получит уведомление о том, что скрипт слишком сложный для выполнения.
Лимит помогает избежать "заморозки" игры при выполнении скрипта.
Читайте также: