此脚本用于将库存物品分类整理,目前支持[矿]、[锭]、[组件]、[工具]、[弹药]这几种分类。
整理过程中会排除“氢氧制造机”、“反应堆”、“炮塔”、精炼机与组装机的输入容器。
使用方法:
1.要整理库存的容器需要管道连接;
2.所有物品会根据箱子名称的"[分类名称]“进行转移;
3.如果LCD面板名称带有”[汇总]“标记,则显示矿和锭的汇总信息;
4.如果某个容器名称带有”[禁]“,则不参与库存整理;
5.如果某个发电设备名称带有”[发电]",则会纳入发电管理,当检测到某电池的电量低于50%时启动发电。

public Program()
{// Run Main() every 100 ticks, or about 1.3sRuntime.UpdateFrequency = UpdateFrequency.Update100;
}
//排除需要抽取的容器
string[] filterBlockNames={"MyObjectBuilder_OxygenGenerator","MyObjectBuilder_Reactor","MyObjectBuilder_LargeMissileTurret","MyObjectBuilder_LargeGatlingTurret","MyObjectBuilder_InteriorTurret","MyObjectBuilder_TurretControlBlock","MyObjectBuilder_OxygenTank"};
//工具类型名称
string[] typeids_tool={"MyObjectBuilder_PhysicalGunObject","MyObjectBuilder_GasContainerObject","MyObjectBuilder_OxygenContainerObject"};Dictionary<string,string> nameMap=new Dictionary<string,string>{{"Uranium","铀"},{"Stone","石头"},{"Gold","黄金"},{"Iron","铁"},{"Magnesium","镁"},{"Silver","银"},{"Nickel","镍"},{"Platinum","铂"},{"Silicon","硅"},{"Cobalt","钴"},{"Ice","冰"},{"Scrap","废金属"}
};public void Main(string argument, UpdateType updateSource){var blocks=new List<IMyTerminalBlock>();//找出有库存的方块GridTerminalSystem.GetBlocksOfType<IMyTerminalBlock>(blocks,block=>block.HasInventory&&!filterBlockNames.Contains(block.BlockDefinition.TypeIdString)&&!block.DisplayNameText.Contains("[禁]"));Echo($"block count:{blocks.Count}");var DictOre=new Dictionary<string,double>();if(blocks.Count==0){return;}var lcds=new List<IMyTextPanel>();GridTerminalSystem.GetBlocksOfType<IMyTextPanel>(lcds,d=>d.DisplayNameText.Contains("[汇总]"));//矿箱子var block_ores=blocks.Where(d=>d.DisplayNameText.Contains("[矿]")).ToList();//锭箱子var block_ingots=blocks.Where(d=>d.DisplayNameText.Contains("[锭]")).ToList();//组件箱子var block_components=blocks.Where(d=>d.DisplayNameText.Contains("[组件]")).ToList();//工具箱子var block_tools=blocks.Where(d=>d.DisplayNameText.Contains("[工具]")).ToList();//弹药箱子var block_ammos=blocks.Where(d=>d.DisplayNameText.Contains("[弹药]")).ToList();if(block_ores.Count==0&&block_ingots.Count==0&&block_components.Count==0&&block_tools.Count==0&&block_ammos.Count==0){return;}var names_block_ores=block_ores.Select(d=>d.Name);var names_block_ingots=block_ingots.Select(d=>d.Name);var names_block_components=block_components.Select(d=>d.Name);var names_block_tools=block_tools.Select(d=>d.Name);var names_block_ammos=block_ammos.Select(d=>d.Name);//开始整理库存foreach(var block in blocks){Echo($"blockName:{block.DisplayNameText}");IMyInventory current_Inventory=null;//if(block.InventoryCount>1){//精炼机和组装机取输出容器current_Inventory=block.GetInventory(1);}else{//普通方块取默认容器current_Inventory=block.GetInventory();}if(!(current_Inventory.CurrentVolume.RawValue>0L)){continue;}var items_ore=new List<MyInventoryItem>();var items_ingot=new List<MyInventoryItem>();var items_component=new List<MyInventoryItem>();var items_tool=new List<MyInventoryItem>();var items_ammo=new List<MyInventoryItem>();if(!names_block_ores.Contains(block.Name)){//取出矿current_Inventory.GetItems(items_ore,d=>d.Type.TypeId=="MyObjectBuilder_Ore");}if(!names_block_ingots.Contains(block.Name)){//取出锭current_Inventory.GetItems(items_ingot,d=>d.Type.TypeId=="MyObjectBuilder_Ingot");}if(!names_block_components.Contains(block.Name)){//取出零件current_Inventory.GetItems(items_component,d=>d.Type.TypeId=="MyObjectBuilder_Component");}if(!names_block_tools.Contains(block.Name)){//取出武器和工具current_Inventory.GetItems(items_tool,d=>typeids_tool.Contains(d.Type.TypeId));}if(!names_block_ammos.Contains(block.Name)){//取出弹药current_Inventory.GetItems(items_ammo,d=>d.Type.TypeId=="MyObjectBuilder_AmmoMagazine");}//统计矿和锭的数量if(lcds.Count>0){for(int i=0;i<block.InventoryCount;i++){var inventory=block.GetInventory(i);var items_oreAndIngot=new List<MyInventoryItem>();inventory.GetItems(items_oreAndIngot,d=>d.Type.TypeId=="MyObjectBuilder_Ore"||d.Type.TypeId=="MyObjectBuilder_Ingot");foreach(var item in items_oreAndIngot){var amount=double.Parse(item.Amount.ToString());if(DictOre.ContainsKey(item.Type.SubtypeId)){DictOre[item.Type.SubtypeId]+=amount;}else{DictOre.Add(item.Type.SubtypeId,amount);}}}}TransferItem(items_ore,block,current_Inventory,block_ores);TransferItem(items_ingot,block,current_Inventory,block_ingots);TransferItem(items_component,block,current_Inventory,block_components);TransferItem(items_tool,block,current_Inventory,block_tools);TransferItem(items_ammo,block,current_Inventory,block_ammos);}//矿物库存信息输出到LCDif(DictOre.Count>0){//汇总信息输出var info=new StringBuilder();foreach(var k in DictOre.Keys){var msg=$"{nameMap[k]}:{DictOre[k]:N}kg";info.AppendLine(msg);}var info_str=info.ToString();foreach(var lcd in lcds){lcd.WritePublicText(info_str);}}//发电管理var batteries=new List<IMyBatteryBlock>();var powerBlocks=new List<IMyPowerProducer>();GridTerminalSystem.GetBlocksOfType<IMyBatteryBlock>(batteries);GridTerminalSystem.GetBlocksOfType<IMyPowerProducer>(powerBlocks,d=>d.DisplayNameText.Contains("[发电]"));if(powerBlocks.Count>0){var needpower=false;foreach(var bat in batteries){if((bat.CurrentStoredPower/bat.MaxStoredPower)<0.5){needpower=true;break;}}foreach(var power in powerBlocks){Echo($"发电设备:{power.DisplayNameText} 开关:{needpower}");power.Enabled=needpower;}}
}
//转移物品
void TransferItem(List<MyInventoryItem> items,IMyTerminalBlock fromBlock,IMyInventory current_Inventory,List<IMyTerminalBlock> toBlocks){if(items.Count==0){return;}foreach(var block_c in toBlocks){if(block_c.Name==fromBlock.Name){continue;}var inventory=block_c.GetInventory();foreach(var item in items){if(inventory.IsFull){break;}current_Inventory.TransferItemTo(inventory,item);}}
}

太空工程师-脚本-库存整理相关推荐

  1. 太空工程师-脚本-飞船姿态矫正

    此脚本功能用于飞船自动调整飞行姿态到水平状态. 应用条件: 1.飞船在行星引力范围内: 2.飞船需要驾驶舱和陀螺仪,并且陀螺仪摆放方向与驾驶舱平行: 如果启动编程方块时如果发现仰角和翻转反了,将代码中 ...

  2. 运维工程师工作内容整理

    运维工程师工作内容整理 稳定 安全 大性能 自动化 素养 团队沟通 其他 总结两句话: 1.保障业务长期稳定运行(如网站服务器.游戏服务器等). 2.保障数据安全可靠(如用户名密码.游戏数据.博客文章 ...

  3. 嵌入式软件工程师面试题目整理(一)

    文章目录 嵌入式软件工程师面试题目整理(一) Arm有多少32位寄存器? Arm2440和6410有什么区别 CPU,MPU,MCU,SOC,SOPC联系与差别 上拉&下拉&高阻态 串 ...

  4. Java后端开发工程师技术栈整理

    文章目录 Java后端开发工程师技术栈整理 常用工具 Java IDE 数据库客户端 数据库建模工具 SSH客户端 文本编辑器 Markdown编辑器 API调试工具 浏览器 压力测试工具 DevOp ...

  5. [20160225] 太空工程师入门 / LOL 10级 / 股票走势预测

    消失的几天里,接触了一些新东西. 首先自然是 >>太空工程师<< 啦 这是个steam游戏,我和我的一个好哥们用steam联机一起玩了好几天.其中又一次是着陆地球.如图就是我参 ...

  6. Java工程师笔试题整理[校招篇]

    Java工程师笔试题整理[校招篇] 阿里巴巴 2016 阿里巴巴2016研发工程师笔试题(四) 阿里巴巴2016研发工程师笔试题(三) 阿里巴巴2016研发工程师笔试题(二) 2015 阿里巴巴201 ...

  7. 近年GDC服务器分享合集(二): 《太空工程师》中基于预测物理的多人游戏

    客户端-服务端之间的位置同步一直是游戏开发中的一道难题,特别是还涉及到复杂的物理运动时.对于这个话题,来自<太空工程师>游戏的工程师在GDC 2023上为我们带来了他们的分享--<& ...

  8. Linux运维工程师面试题整理

    1.Nginx反向代理,负载均衡,动静分离,工作原理及优化 nginx配置反向代理. vim Nginx.conf Server模块中配置 Listen 80 Server_name ip; 在ser ...

  9. 微博面试Java,微博java开发工程师面试题整理

    下面要给大家分享的是一个小伙伴的微博java开发工程师一面的面试题,一起来看看微博java开发工程一面面试题都有哪些吧! 面试题(一面) 1.做一个小时笔试 2.java创建对象的几种方式是什么? 用 ...

  10. PHP工程师必备知识整理

    一.http/https协议,tcp/ip协议,websocket,session,cookie 二.php:oop,thinkphp5,laravel 三.mysql.memcache.redis ...

最新文章

  1. Code::Blocks 使用技巧总结
  2. 转:python的内置对象
  3. c++------------之---【虚函数和抽象基类的应用】
  4. KendoUI--Grid api 出现的问题
  5. linux (debian) 配置静态ip
  6. Mysql GROUP_CONCAT 使用注意事项
  7. windows--CMD--命令大全
  8. 企业终端安全应该包括哪几部分?
  9. 古剑奇谭3steam服务器稳定吗,国产游戏《古剑奇谭3》占据steam热销榜第一?这么好玩吗?...
  10. matplotlib绘制正弦曲线
  11. CF#446 Gluttony(思维题)
  12. 【翻译】ASML Automatic Streaming Machine Learning
  13. 计算机网络安全 填空题,计算机网络安全技术选择填空复习题
  14. mie散射理论方程_A. Mie米散射理论基础知识讲解
  15. EndNote X9 插件在word中的使用以及中文引用格式问题
  16. 解决计算机被暴风集火(jihuo)后留下的IE,chrome,火狐等所有浏览器主页网址携带有”tn=93453552_hao_pg“后缀的驱动类木马病毒的问题
  17. 软件测试的16种测试类型
  18. centos访问window共享目录
  19. iPad Pro机身无故弯曲 Apple对此做出回应及应对
  20. 软件开发生命周期有几个阶段?

热门文章

  1. 通信光缆故障检测如何进行检测?
  2. Project2019入门到精通
  3. html自动聊天机器人源代码,QQ全自动聊天机器人
  4. 云服务器日志4625登录验证失败
  5. 华为手机usb连接计算机,华为手机USB为什么连接不上电脑(3个方法彻底解决)...
  6. 计算机组装与维修教学工作总结,计算机组装与维护教师工作总结
  7. python实验报告实验目的_Python实验报告五
  8. 《淘宝技术这十年》之LAMP架构的网站
  9. 好用小工具及文章推荐推荐
  10. 解决HD3000在OS X 10.10.2上横线和花屏问题