Space Engineers

Space Engineers

800 ratings
Nanobot Build and Repair System Queuing / Display / Scripting
3
5
4
2
   
Award
Favorite
Favorited
Unfavorite
File Size
Posted
Updated
71.322 KB
Feb 19, 2017 @ 10:43am
Sep 21, 2019 @ 5:25am
11 Change Notes ( view )

Subscribe to download
Nanobot Build and Repair System Queuing / Display / Scripting

Description
Full automatic queuing of missing materials and displaying block status on panel(s)
This is a simple out of the box script, to be used with the Nanobot Build and Repair System Block.
For details see Nanobot Build and Repair System.
!! This script is designed to work with this block only !!

Using this script will enable full automatic queuing of missing materials into the configured assemblers.
Optional you could also configure the script to show status information about the BaR-Systems at one or multiple text panels.

How it works
Put the script into a programmable block.
To configure the scipt itself you have two options:

  1. Putting all build and repair systems (that should be able to queue) into a group named "BuildAndRepairGroup1", and put all assemblers that should use for queuing into a second group called "AssemblerGroup1", if you like to display some status information on a panel, just place a text panel and name it "BuildAndRepairGroup1StatusPanel" and that's it.

  2. For more complex scenarios, where you have two or more groups of build and repair systems that work independently, you have the option to define as many groups as you need.

    At the top of the script you will find a static array called:
    BuildAndRepairSystemQueuingGroups, where you can put your groups in.
    Every group is an entry of the type BuildAndRepairSystemQueuingGroup
    Every group has four properties:
    • BuildAndRepairSystemGroupName: The name of a group containing Build and Repair Systems
    • BuildAndRepairSystemNames: A list of names of individual Build and Repair Systems
    • AssemblerGroupName: The name of a group containing assemblers
    • AssemblerNames: A list of names of individual assemblers
    • DisplayNames: A list of names of text panels where the system info should be displayed (Empty if no panels should be used)
    • DisplayKinds:A list that defines the information that should be alternating displayed. You could choose out of these informations ( DisplayKind.Status, DisplayKind.ShortStatus, DisplayKind.MissingItems, DisplayKind.WeldTargets, DisplayKind.GrindTargets, DisplayKind.CollectTargets )
    • DisplayMaxLines: Defines the items that should be displayed in case of listings 'Missing items', 'WeldTargets', ..
    • DisplaySwitchTime: Time in seconds after that the next information page is displayed. (If "DisplayKinds" has only on element this value is ignored)

    You could use every combination of the four properties to discribe your logical group. So for e.g. if you define a "BuildAndRepairSystemGroupName" and a list of "BuildAndRepairSystemNames" names. In the end the script will internally manage a combined list of every system in the group plus the individual given systems. The same applies for the assembler properties.

    So lets make an example:

    You have 2 logical groups of repair systems. Lets say one works in the hangar bay1 and the other in hangar bay2. So you define four groups "Hangar1BaRSystems"/"Hangar1Assemblers" and "Hangar2BaRSystems"/"Hangar2Assemblers".
    In that case your configuration will look like:
    static BuildAndRepairSystemQueuingGroup[] BuildAndRepairSystemQueuingGroups = { new BuildAndRepairSystemQueuingGroup() { BuildAndRepairSystemGroupName = "Hangar1BaRSystems", AssemblerGroupName = "Hangar1Assemblers" }, new BuildAndRepairSystemQueuingGroup() { BuildAndRepairSystemGroupName = "Hangar2BaRSystems", AssemblerGroupName = "Hangar2Assemblers" } };

    If you decide to put individual system names into the script it could look like:
    static BuildAndRepairSystemQueuingGroup[] BuildAndRepairSystemQueuingGroups = { new BuildAndRepairSystemQueuingGroup() { BuildAndRepairSystemNames = new[] { "Hangar1BaRSystem1", "Hangar1BaRSystem2" }, AssemblerNames = new[] { "Hangar1Assembler1", "Hangar1Assembler2" } }, new BuildAndRepairSystemQueuingGroup() { BuildAndRepairSystemNames = new[] { "Hangar2BaRSystem1", "Hangar2BaRSystem2" }, AssemblerNames = new[] { "Hangar2Assembler1", "Hangar2Assembler2" } } };

    As sayed before you could mix both methodes as you like:
    static BuildAndRepairSystemQueuingGroup[] BuildAndRepairSystemQueuingGroups = { new BuildAndRepairSystemQueuingGroup() { BuildAndRepairSystemGroupName = "Hangar1BaRSystems", AssemblerGroupName = "Hangar1Assemblers" AssemblerNames = new[] { "Hangar1AssemblerReserve1" } }, new BuildAndRepairSystemQueuingGroup() { BuildAndRepairSystemGroupName = "Hangar2BaRSystems", BuildAndRepairSystemNames = new[] { "Hangar2BaRSystemOptional1" }, AssemblerGroupName = "Hangar2Assemblers" } };

If you define an emtpy group, or none block of the right type there will be an error message displayed in the detail section of the programmable block.

Further the script refreshes the given groups every 2 minutes, so if you put a new block inside a group, it will be detected latest after 2 minutes. If you don't whant to wait, you could go to the programmable block, open and close the editor, this will force the detection immediately.


Feel free to use this script in your own designs.

  • If you like to use the block in your own scripts, the class RepairSystemHandler encapsulates all the functions the block offers and is designed to handle one or a list of systems to be used parallel. (In order to use the class you need also the base classes EntityHandler and EntityHandler<T>)


Have fun.
Popular Discussions View All (6)
6
Jan 7 @ 6:45pm
The text panel wont display anything, just says Online
tR02020
1
Aug 29, 2024 @ 10:40pm
exception during execution of script:Invalid property at RepairSystemHandler.get_CurrentTarget()
Atreyu Wolfson
4
Feb 10, 2023 @ 8:51pm
Code Examples
Dummy08
324 Comments
SKO85 Apr 29 @ 6:00am 
Fixed version of the script for Nanobot Build and Repair:
https://steamcommunity.com/sharedfiles/filedetails/?id=3472701905
SKO85 Apr 29 @ 3:39am 
I will try fix it and upload a maintained version as Dummy08 has not been reacting over several years.
Max Warden Apr 29 @ 3:08am 
o7
Static Apr 29 @ 1:36am 
After 6 Years, they finally broke the script; Hope Summy08 can fix and update it
Keienmahazli Apr 29 @ 12:16am 
Same here to
Celica71 Apr 28 @ 11:59pm 
Broken here too...
JoeHan Apr 28 @ 12:42pm 
Same here - script broke with the newest SE Update. Same errors.
Lord Mortangol Apr 28 @ 12:32pm 
The Script broke with the newest SE Update.

Program (1446,169): Error: Cannot implicitly convert type 'System.Collections.Generic.List<VRage.Game.ModAPI.Ingame.IMySli mBlock>' to 'VRage.Scripting. Memory SafeTypes.MemorySafeList<VRage.Game.ModAPI.Ingame.IMySlimBlock>'. An explicit conversion exists (are you missing a cast?)

Program (1478,169): Error: Cannot implicitly convert type 'System.Collections.Generic.List<VRage.Game.ModAPI.Ingame.IMySli mBlock>' to 'VRage.Scripting. Memory SafeTypes.MemorySafeList<VRage.Game.ModAPI.Ingame.IMySlimBlock>'. An explicit conversion exists (are you missing a cast?)

Program (1510,169): Error: Cannot implicitly convert type
'System.Collections.Generic.List<VRage.Game.ModAPI.Ingame.IMyEnt ity>' to
'VRage.Scripting. MemorySafeTypes.MemorySafeList<VRage.Game.ModAPI.Ingame.IMyEntity>'. An explicit conversion exists (are you missing a cast?)
TechCoder Mar 12 @ 5:09am 
@Vorg "a few servers" doesn't mean much when "several hundred" work (the vagueness...)

and the same for "throws exception errors and crashes" - with no DATA to support the claims, there is nothing anyone can do to assist, other than to say IT MUST BE SOMETHING ON THE SERVERS YOU HAVE ISSUE WITH. Most likely they are running Torch and a PB Limiter, etc. (see loads of posts here and Discord - - - - well, it is well known about these script killer issues)
Vorg Feb 23 @ 4:35pm 
Tried this on a few servers and it throws exception errors and crashes. Does que up some stuff right before it crashes.