XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

AutoMiningScript

【SpaceEngineer】全自动挖矿脚本

公开
关注 0 Fork 0 Star 0
UTF-8
using Sandbox.ModAPI.Ingame;
using VRageMath;
using XFEExtension.SpaceEngineers.ScriptingHelper;

namespace AutoMiningScript
{
    public class Program : MyGridProgram, IProgramBase
    {
        //--------------------------------Version 1.32---------------------------------------------
        Vector3D yjzb;
        Vector3D ejzb;
        Vector3D xf;
        Vector3D zz;
        Vector3D mb;
        Vector3D mb2;
        Vector3D mb3;
        Vector3D pyl;
        Vector3D pyl2;
        Vector3D Up;
        Vector3D Down;
        Vector3D Right;
        Vector3D Left;
        MyDetectedEntityInfo aab;
        IMyCameraBlock cmr;
        int mod;
        int times;
        int bs;
        double DistanceBetween;
        double dst;
        double gd;
        double sd;
        double timer;
        double dqjl;
        double dqsj;
        float speedLmt;
        string mz;
        string lx;
        string aabType;
        string aabName;
        string aabId;
        string aabRelationship;
        bool tp;
        bool tp2;
        bool ejd;
        bool IsClosing;
        bool wc = true;
        bool fz;
        bool st;
        bool gy;
        bool bt = true;
        bool stt = true;
        bool crun;
        bool ks;
        bool yxcs;
        bool yjd;
        bool cnnt = true;
        bool oc;
        bool sfxf;
        bool fh;
        bool csh;
        List<IMyShipDrill> ztz = new List<IMyShipDrill>();
        public Program()
        {
            Runtime.UpdateFrequency = UpdateFrequency.Update1;
        }
        public static Vector3D ZV(string[] dzh)
        {
            Vector3D x;
            x.X = double.Parse(dzh[0]);
            x.Y = double.Parse(dzh[1]);
            x.Z = double.Parse(dzh[2]);
            return x;
        }
        public static Vector3D ZVV(string dzh)
        {
            Vector3D x;
            x.X = double.Parse(dzh.Split(',')[0]);
            x.Y = double.Parse(dzh.Split(',')[1]);
            x.Z = double.Parse(dzh.Split(',')[2]);
            return x;
        }
        public static double DST(Vector3D qs, Vector3D zd)
        {
            double ddst = Math.Sqrt(Math.Pow(zd.X - qs.X, 2) + Math.Pow(zd.Y - qs.Y, 2) + Math.Pow(zd.Z - qs.Z, 2));
            return ddst;
        }
        public void Main(string argument, UpdateType updateSource)
        {
            if (Me.CustomName.Length > 3)
            {
                lx = Me.CustomName.Substring(Me.CustomName.Length - 3, 3);
                mz = Me.CustomName.Replace(lx, "");
                //-----------------------------以下矿机------------------------------------
                if (lx == "-矿机")
                {
                    var txt = Me.GetSurface(0);
                    double xfdst;
                    if (Me.CustomData == "")
                    {
                        Me.CustomData = "--------已设置类型:矿机--------\n直接修改下列中括号里的内容\n矿机挖掘时候的速度(单位 米/秒)[0.5] 建议0.1-1之间\n开始挖掘距离(单位 米)[8] 即距离陨石表面多少米开始挖掘,\n注意事项:矿船的连接器必须和远程控制在同一条直线上,不然会对不齐";
                    }
                    else if (Me.CustomData.Length > 25 && Me.CustomData.Substring(0, 24) != "--------已设置类型:矿机--------")
                    {
                        Me.CustomData = "--------已设置类型:矿机--------\n直接修改下列中括号里的内容\n矿机挖掘时候的速度(单位 米)[0.5]\n注意事项:矿船的连接器必须和远程控制在同一条直线上,不然会对不齐";
                    }
                    if (GridTerminalSystem.GetBlockWithName("远程控制-" + mz) == null)
                    {
                        txt.WriteText("脚本运行状态:中断!\n原因:\n未找到方块:远程控制-" + mz + "\n请检查是否安装方块 远程控制 或者名称是否有误并 重命名");
                        Echo("脚本运行状态:中断!\n原因:\n未找到方块:远程控制-" + mz + "\n请检查是否安装方块 远程控制 或者名称是否有误并 重命名");
                    }
                    else if (GridTerminalSystem.GetBlockWithName("连接器-" + mz) == null)
                    {
                        txt.WriteText("脚本运行状态:中断!\n原因:\n未找到方块:连接器-" + mz + "\n请检查是否安装方块 连接器 或者名称是否有误并 重命名");
                        Echo("脚本运行状态:中断!\n原因:\n未找到方块:连接器-" + mz + "\n请检查是否安装方块 连接器 或者名称是否有误并 重命名");
                    }
                    else if (GridTerminalSystem.GetBlockGroupWithName("钻头-" + mz) == null)
                    {
                        txt.WriteText("脚本运行状态:中断!\n原因:\n未找到编组:钻头-" + mz + "\n请检查是否有编组 钻头-" + mz + "或者编组的名称是否有误并 重新编组");
                        Echo("脚本运行状态:中断!\n原因:\n未找到编组:钻头-" + mz + "\n请检查是否有编组 钻头-" + mz + "或者编组的名称是否有误并 重新编组");
                    }
                    else
                    {
                        if (Me.CustomData.Split(new char[2] { '[', ']' }).Count() >= 5)
                        {
                            bool zh1 = float.TryParse(Me.CustomData.Split(new char[2] { '[', ']' })[1], out speedLmt);
                            bool zh2 = double.TryParse(Me.CustomData.Split(new char[2] { '[', ']' })[3], out xfdst);
                            if (zh1 && zh2)
                            {
                                if (!bt)
                                {
                                    Echo("脚本运行状态:正常" + "\n本编程块类型:" + lx + "\n终端矿机名称:" + mz + "\n\n挖掘速度限制:" + speedLmt + "m/s\n开始挖掘距离:" + xfdst + "m\n" + Storage + "\nMade by XFEstudio");
                                }
                                var rem = GridTerminalSystem.GetBlockWithName("远程控制-" + mz) as IMyRemoteControl;
                                var ljq = GridTerminalSystem.GetBlockWithName("连接器-" + mz) as IMyShipConnector;
                                GridTerminalSystem.GetBlockGroupWithName("钻头-" + mz).GetBlocksOfType(ztz);
                                timer += Runtime.TimeSinceLastRun.TotalSeconds;
                                //------------------------------------------------------------
                                IMyBroadcastListener a = IGC.RegisterBroadcastListener("zy" + mz);
                                bool xx = a.HasPendingMessage;
                                MyIGCMessage j = a.AcceptMessage();
                                string js = j.Data + "";
                                string[] fg = js.Split(',');
                                //------------------------------------------------------------
                                IMyBroadcastListener b = IGC.RegisterBroadcastListener("cs" + mz);
                                MyIGCMessage j2 = b.AcceptMessage();
                                string js2 = j2.Data + "";
                                string[] fg2 = js2.Split(',');
                                //------------------------------------------------------------
                                IMyBroadcastListener c = IGC.RegisterBroadcastListener("ccs" + mz);
                                MyIGCMessage j3 = c.AcceptMessage();
                                string js3 = j3.Data + "";
                                string[] fg3 = js3.Split(',');
                                //------------------------------------------------------------
                                IMyBroadcastListener d = IGC.RegisterBroadcastListener("cccs" + mz);
                                MyIGCMessage j4 = d.AcceptMessage();
                                string js4 = j4.Data + "";
                                string[] fg4 = js4.Split(',');
                                //------------------------------------------------------------
                                IMyBroadcastListener e = IGC.RegisterBroadcastListener("fz" + mz);
                                MyIGCMessage j5 = e.AcceptMessage();
                                string fz = j5.Data + "";
                                //------------------------------------------------------------
                                if (Storage != null && Storage != "")
                                {
                                    string[] STGfg = Storage.Split('|');
                                    if (STGfg.Length >= 13)
                                    {
                                        try
                                        {
                                            st = bool.Parse(STGfg[0]);
                                            oc = bool.Parse(STGfg[1]);
                                            sfxf = bool.Parse(STGfg[2]);
                                            fh = bool.Parse(STGfg[3]);
                                            IsClosing = bool.Parse(STGfg[4]);
                                            ks = bool.Parse(STGfg[5]);
                                            csh = bool.Parse(STGfg[6]);
                                            cnnt = bool.Parse(STGfg[7]);
                                            yjd = bool.Parse(STGfg[8]);
                                            bt = bool.Parse(STGfg[9]);
                                            mb = ZVV(STGfg[10]);
                                            xf = ZVV(STGfg[11]);
                                            mb3 = ZVV(STGfg[12]);
                                        }
                                        catch (Exception ex)
                                        {
                                            Echo($"出现异常:{ex.Message}");
                                        }
                                        Storage = "";
                                    }
                                }
                                //------------------------------------------------------------
                                if (fg2.Count() == 4 && fg2[3] == "3" && !st && cnnt)
                                {
                                    st = true;
                                    oc = false;
                                    sfxf = false;
                                    fh = false;
                                    IsClosing = false;
                                    ks = false;
                                    csh = false;
                                    cnnt = false;
                                    ljq.Disconnect();
                                    mb = ZV(fg2);
                                    xf = ZV(fg3);
                                    mb3 = ZV(fg4);
                                    txt.WriteText("矿物位置:" + mb);
                                    rem.DampenersOverride = true;
                                    rem.SetCollisionAvoidance(false);
                                }
                                //------------------------------------------------------------
                                double jl = DST(yjzb, rem.WorldAABB.Center);
                                rem.FlightMode = FlightMode.OneWay;
                                if (ljq.Status == MyShipConnectorStatus.Connectable && !st)
                                {
                                    cnnt = true;
                                    ljq.Connect();
                                    rem.ClearWaypoints();
                                    rem.SetAutoPilotEnabled(false);
                                    IGC.SendBroadcastMessage("zfb" + mz, "2");
                                    rem.DampenersOverride = false;
                                    foreach (IMyShipDrill zt in ztz)
                                    {
                                        zt.Enabled = false;
                                    }
                                }
                                if (ljq.Status == MyShipConnectorStatus.Connected && !st)
                                {
                                    txt.WriteText("矿机:" + mz + "\n正在等待挖矿任务...");
                                }
                                if (bt)
                                {
                                    txt.WriteText("等待与本体连接器连接");
                                    Echo("脚本运行状态:正常" + "\n本编程块类型:" + lx + "\n终端矿机名称:" + mz + "\n等待与本体连接\nMade by XFEstudio");
                                    rem.SpeedLimit = 100;
                                    bt = false;
                                }
                                if (cnnt)
                                {
                                    IGC.SendBroadcastMessage("zfb" + mz, "2");
                                }
                                //--------------------进入出发点--------------------------
                                if (st)
                                {
                                    rem.DampenersOverride = true;
                                    if (!ks && fg.Count() == 4 && fg[3] == "rd")
                                    {
                                        rem.Direction = Base6Directions.Direction.Forward;
                                        if (fg2.Count() == 3)
                                        {
                                            st = false;
                                            cnnt = false;
                                            yjd = false;
                                            rem.ClearWaypoints();
                                            rem.SpeedLimit = 100;
                                        }
                                        else
                                        {
                                            yjzb = ZV(fg);
                                            if (DST(yjzb, rem.WorldAABB.Center) <= 1)
                                            {
                                                if (fz == "fz") rem.SetCollisionAvoidance(true);
                                                else rem.SetCollisionAvoidance(false);
                                                ks = true;
                                                IGC.SendBroadcastMessage("zfb" + mz, "rd");
                                            }
                                            if (timer >= 1)
                                            {
                                                rem.ClearWaypoints();
                                                rem.AddWaypoint(yjzb, "接近出发点...");
                                                rem.SetAutoPilotEnabled(true);
                                                timer = 0;
                                            }
                                            txt.WriteText("正在接近出发点..." + timer);
                                        }
                                    }
                                    else
                                    {
                                        //--------------------开始挖矿--------------------------
                                        if (fg2.Count() == 3)
                                        {
                                            st = false;
                                            cnnt = false;
                                            yjd = false;
                                            rem.ClearWaypoints();
                                            rem.SpeedLimit = 100;
                                        }
                                        else
                                        {
                                            if (fh)
                                            {
                                                rem.Direction = Base6Directions.Direction.Backward;
                                                if (DST(rem.WorldAABB.Center, xf) <= 1 && !sfxf)
                                                {
                                                    foreach (IMyShipDrill zt in ztz)
                                                    {
                                                        zt.Enabled = false;
                                                    }
                                                    sfxf = true;
                                                    rem.SpeedLimit = 100;
                                                    st = false;
                                                    cnnt = false;
                                                    ks = false;
                                                    oc = false;
                                                    yjd = false;
                                                    fh = false;
                                                    if (fz == "fz") rem.SetCollisionAvoidance(true);
                                                    else rem.SetCollisionAvoidance(false);
                                                    IGC.SendBroadcastMessage("zfb" + mz, "0");
                                                    IGC.SendBroadcastMessage("times" + mz, "0");
                                                    Echo("ST:" + st + "\ntimer:" + timer + "\nCNNT:" + cnnt);
                                                }
                                                else if (timer >= 1)
                                                {
                                                    rem.ClearWaypoints();
                                                    rem.AddWaypoint(xf, "接近退出悬浮高度");
                                                    txt.WriteText("正在进入退出悬浮点:" + DST(rem.WorldAABB.Center, xf));
                                                    rem.SetAutoPilotEnabled(true);
                                                    timer = 0;
                                                }
                                            }
                                            else
                                            {
                                                double kwjl = DST(rem.WorldAABB.Center, mb3);
                                                rem.Direction = Base6Directions.Direction.Forward;
                                                if (!csh)
                                                {
                                                    rem.ClearWaypoints();
                                                    rem.AddWaypoint(xf, "靠近矿物目标");
                                                    rem.SetAutoPilotEnabled(true);
                                                    csh = true;
                                                }
                                                if (!oc && csh)
                                                {
                                                    if (DST(rem.WorldAABB.Center, xf) <= 20)
                                                    {
                                                        oc = true;
                                                        rem.SpeedLimit = 5;
                                                        timer = 0;
                                                        txt.WriteText("已靠近" + kwjl);
                                                        rem.SetCollisionAvoidance(false);
                                                    }
                                                    else
                                                    {
                                                        rem.SpeedLimit = 100;
                                                        txt.WriteText("未靠近" + kwjl);
                                                    }
                                                }
                                                //-------------------------------开始执行---------------------
                                                if (oc)
                                                {
                                                    if (!sfxf)
                                                    {
                                                        //------------------准备悬停-------------
                                                        txt.WriteText("正在悬停:" + xf);
                                                        if (DST(rem.WorldAABB.Center, xf) <= 1)
                                                        {
                                                            sfxf = true;
                                                            rem.SetCollisionAvoidance(false);
                                                        }
                                                        else if (timer >= 1)
                                                        {
                                                            rem.ClearWaypoints();
                                                            rem.AddWaypoint(xf, "进行悬浮");
                                                            rem.SetAutoPilotEnabled(true);
                                                            timer = 0;
                                                        }
                                                    }
                                                    else
                                                    {
                                                        //---------------接近---------------------
                                                        if (DST(mb, rem.WorldAABB.Center) <= xfdst)
                                                        {
                                                            IsClosing = true;
                                                        }
                                                        //----------------进行挖掘----------------
                                                        if (IsClosing)
                                                        {
                                                            rem.SpeedLimit = speedLmt;
                                                            txt.WriteText("正在挖掘:" + kwjl);
                                                            foreach (IMyShipDrill zt in ztz)
                                                            {
                                                                zt.Enabled = true;
                                                            }
                                                            if (timer >= 1)
                                                            {
                                                                rem.ClearWaypoints();
                                                                rem.AddWaypoint(mb3, "挖掘矿物目标");
                                                                rem.SetAutoPilotEnabled(true);
                                                                timer = 0;
                                                            }
                                                            //-----------------------准备退出-------------------------
                                                            if (kwjl <= 2)
                                                            {
                                                                fh = true;
                                                                sfxf = false;
                                                                rem.SpeedLimit = 5;
                                                            }
                                                        }
                                                        else
                                                        {
                                                            rem.SpeedLimit = 100;
                                                            if (timer >= 1)
                                                            {
                                                                rem.ClearWaypoints();
                                                                rem.AddWaypoint(mb, "挖掘矿物目标");
                                                                rem.SetAutoPilotEnabled(true);
                                                                timer = 0;
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                                //--------------------开始停靠--------------------------
                                else if (!cnnt)
                                {
                                    rem.Direction = Base6Directions.Direction.Forward;
                                    rem.SetAutoPilotEnabled(true);
                                    if (!yjd)
                                    {
                                        if (j.Data + "" == "" || j.Data + "" == null)
                                        {
                                            txt.WriteText("无");
                                        }
                                        else
                                        {
                                            if (fz == "fz")
                                            {
                                                rem.SetCollisionAvoidance(true);
                                                Echo("fz");
                                            }
                                            else
                                            {
                                                rem.SetCollisionAvoidance(false);
                                                Echo("bfz");
                                            }
                                            if (fg.Count() == 4 && fg[3] == "0")
                                            {
                                                yjd = false;
                                            }
                                            else
                                            {
                                                yjd = true;
                                            }
                                            yjzb = ZV(fg);
                                            txt.WriteText(yjzb + "\n" + jl);
                                        }
                                        if (jl < 2)
                                        {
                                            IGC.SendBroadcastMessage("zfb" + mz, "1");
                                        }
                                        else
                                        {
                                            IGC.SendBroadcastMessage("zfb" + mz, "0");
                                        }
                                        if (timer >= 1 && yjzb.X != 0)
                                        {
                                            rem.ClearWaypoints();
                                            rem.AddWaypoint(yjzb, "zy");
                                            timer = 0;
                                        }
                                    }
                                    else
                                    {
                                        rem.Direction = Base6Directions.Direction.Backward;
                                        rem.SetAutoPilotEnabled(true);
                                        rem.SetCollisionAvoidance(false);
                                        if (j2.Data + "" == "" || j2.Data + "" == null)
                                        {
                                            txt.WriteText("无");
                                        }
                                        else
                                        {
                                            if (fg.Count() == 4 && fg[3] == "0")
                                            {
                                                yjd = false;
                                            }
                                            else
                                            {
                                                yjd = true;
                                            }
                                            ejzb = ZV(fg2);
                                            txt.WriteText(ejzb + "\n" + timer);
                                        }
                                        if (timer >= 1 && ejzb.X != 0)
                                        {
                                            rem.ClearWaypoints();
                                            rem.AddWaypoint(ejzb, "cs");
                                            timer = 0;
                                        }
                                    }
                                }
                            }
                            else
                            {
                                txt.WriteText("脚本运行状态:中断!\n原因:数据挖掘速度并非一个数值:" + Me.CustomData.Split(new char[2] { '[', ']' })[1] + "\n请检查输入,如若还报错,请*删除自定义数据里面的全部内容*(删除干净)并重置本程序");
                                Echo("脚本运行状态:中断!\n原因:数据挖掘速度并非一个数值:" + Me.CustomData.Split(new char[2] { '[', ']' })[1] + "\n请检查输入,如若还报错,请*删除自定义数据里面的全部内容*(删除干净)并重置本程序");
                            }
                        }
                        else
                        {
                            txt.WriteText("脚本运行状态:中断!\n原因:\n自定义数据已被损毁,请删除全部自定义里的内容并重置本编程块");
                            Echo("脚本运行状态:中断!\n原因:\n自定义数据已被损毁,请删除全部自定义里的内容并重置本编程块");
                        }
                    }
                }
                //-----------------------------以上矿机------------------------------------
                else if (lx == "-本体")
                {
                    var txt = Me.GetSurface(0);
                    if (Me.CustomData == "")
                    {
                        Me.CustomData = "--------已设置类型:本体--------\n直接修改下列中括号里的内容\n停靠点悬停距离(单位 米):[15]\n停靠点悬停时间(单位 秒):[10]\n注意事项:矿船的连接器必须和远程控制在同一条直线上,不然会对不齐";
                    }
                    else if (Me.CustomData.Length > 25 && Me.CustomData.Substring(0, 24) != "--------已设置类型:本体--------")
                    {
                        Me.CustomData = "--------已设置类型:本体--------\n直接修改下列中括号里的内容\n停靠点悬停距离(单位 米):[15]\n停靠点悬停时间(单位 秒):[10]\n注意事项:矿船的连接器必须和远程控制在同一条直线上,不然会对不齐";
                    }
                    if (Me.CustomData.Split(new char[2] { '[', ']' }).Count() >= 5)
                    {
                        if (GridTerminalSystem.GetBlockWithName("连接器本体-" + mz) == null)
                        {
                            txt.WriteText("脚本运行状态:中断!\n原因:\n未找到方块:连接器本体-" + mz + "\n请检查是否安装方块 连接器 或者名称是否有误并 重命名");
                            Echo("脚本运行状态:中断!\n原因:\n未找到方块:连接器本体-" + mz + "\n请检查是否安装方块 连接器 或者名称是否有误并 重命名");
                        }
                        else if (GridTerminalSystem.GetBlockWithName("指引灯-" + mz) == null)
                        {
                            txt.WriteText("脚本运行状态:中断!\n原因:\n未找到方块:指引灯-" + mz + "\n请检查是否安装方块 聚光灯 或者名称是否有误并 重命名");
                            Echo("脚本运行状态:中断!\n原因:\n未找到方块:指引灯-" + mz + "\n请检查是否安装方块 聚光灯 或者名称是否有误并 重命名");
                        }
                        else
                        {
                            var yljq = GridTerminalSystem.GetBlockWithName("连接器本体-" + mz) as IMyFunctionalBlock;
                            var zyjgd = GridTerminalSystem.GetBlockWithName("指引灯-" + mz) as IMyLightingBlock;
                            bool zh1 = double.TryParse(Me.CustomData.Split(new char[2] { '[', ']' })[1], out dqjl);
                            bool zh2 = double.TryParse(Me.CustomData.Split(new char[2] { '[', ']' })[3], out dqsj);
                            if (!zh1)
                            {
                                txt.WriteText("脚本运行状态:中断!\n原因:数据停靠距离并非一个数值:" + Me.CustomData.Split(new char[2] { '[', ']' })[1] + "\n请检查输入,如若还报错,请*删除自定义数据里面的全部内容*(删除干净)并重置本程序");
                                Echo("脚本运行状态:中断!\n原因:数据停靠距离并非一个数值:" + Me.CustomData.Split(new char[2] { '[', ']' })[1] + "\n请检查输入,如若还报错,请*删除自定义数据里面的全部内容*(删除干净)并重置本程序");
                            }
                            if (!zh2)
                            {
                                txt.WriteText("脚本运行状态:中断!\n原因:数据停靠时间并非一个数值:" + Me.CustomData.Split(new char[2] { '[', ']' })[3] + "\n请检查输入,如若还报错,请*删除自定义数据里面的全部内容*(删除干净)并重置本程序");
                                Echo("脚本运行状态:中断!\n原因:数据停靠时间并非一个数值:" + Me.CustomData.Split(new char[2] { '[', ']' })[3] + "\n请检查输入,如若还报错,请*删除自定义数据里面的全部内容*(删除干净)并重置本程序");
                            }
                            if (zh1 && zh2)
                            {
                                Echo("脚本运行状态:正常" + "\n本编程块类型:" + lx + "\n终端矿机名称:" + mz + "\n\n停靠点距离连接器距离:" + dqjl + "\n停靠时间:" + dqsj + "\n\nMade by XFEstudio");
                            }
                            timer += Runtime.TimeSinceLastRun.TotalSeconds;
                            IMyBroadcastListener rcv = IGC.RegisterBroadcastListener("zfb" + mz);
                            bool xx = rcv.HasPendingMessage;
                            MyIGCMessage j = rcv.AcceptMessage();
                            zz = yljq.WorldAABB.Center + yljq.WorldMatrix.Forward * dqjl;
                            if (Storage != null && Storage != "")
                            {
                                string[] STGfg = Storage.Split('|');
                                if (STGfg.Length >= 5)
                                {
                                    try
                                    {
                                        stt = bool.Parse(STGfg[0]);
                                        wc = bool.Parse(STGfg[1]);
                                        ejd = bool.Parse(STGfg[2]);
                                        ks = bool.Parse(STGfg[3]);
                                        fz = bool.Parse(STGfg[4]);
                                    }
                                    catch (Exception ex)
                                    {
                                        Echo($"发生异常:{ex.Message}");
                                    }
                                    Storage = "";
                                }
                            }
                            if (j.Data + "" == "0")
                            {
                                wc = false;
                                stt = false;
                                timer = 0;
                            }
                            if (j.Data + "" == "1")
                            {
                                ejd = true;
                                timer = 0;
                            }
                            if (j.Data + "" == "2" && !wc)
                            {
                                wc = true;
                                ejd = false;
                                timer = 0;
                            }
                            if (j.Data + "" == "rd")
                            {
                                ks = true;
                            }
                            if (ejd)
                            {
                                zyjgd.Color = Color.Red;
                            }
                            else
                            {
                                zyjgd.Color = Color.White;
                            }
                            if (stt)
                            {
                                wc = false;
                                IMyBroadcastListener bkrcv = IGC.RegisterBroadcastListener(mz);
                                MyIGCMessage bkj = bkrcv.AcceptMessage();
                                string bkjs = bkj.Data + "";
                                string[] bkfg = bkjs.Split(',');
                                if (bkj.Data + "" == "" || bkj.Data + "" == null)
                                {
                                    txt.WriteText("无");
                                    Echo("无");
                                }
                                else if (bkj.Data + "" == "Return")
                                {
                                    stt = false;
                                    ks = false;
                                    fz = false;
                                    wc = false;
                                }
                                else if (bkj.Data + "" == "Retreat")
                                {
                                    stt = false;
                                    ks = false;
                                    fz = true;
                                    wc = false;
                                }
                                else
                                {
                                    Echo(bkjs);
                                    if (bkfg[9] == "fz")
                                    {
                                        fz = true;
                                    }
                                    else if (bkfg[9] == "bfz")
                                    {
                                        fz = false;
                                    }
                                    string[] bkfg2 = new string[3];
                                    string[] bkfg3 = new string[3];
                                    bkfg2[0] = bkfg[3];
                                    bkfg2[1] = bkfg[4];
                                    bkfg2[2] = bkfg[5];
                                    bkfg3[0] = bkfg[6];
                                    bkfg3[1] = bkfg[7];
                                    bkfg3[2] = bkfg[8];
                                    mb = ZV(bkfg);
                                    mb2 = ZV(bkfg2);
                                    mb3 = ZV(bkfg3);
                                    if (fz) IGC.SendBroadcastMessage("fz" + mz, "fz");
                                    else IGC.SendBroadcastMessage("fz" + mz, "bfz");
                                    if (ks)
                                    {
                                        zyjgd.Color = Color.White;
                                        IGC.SendBroadcastMessage("cs" + mz, mb.X + "," + mb.Y + "," + mb.Z + ",3");
                                        IGC.SendBroadcastMessage("ccs" + mz, mb2.X + "," + mb2.Y + "," + mb2.Z);
                                        IGC.SendBroadcastMessage("cccs" + mz, mb3.X + "," + mb3.Y + "," + mb3.Z);
                                    }
                                    else
                                    {
                                        zyjgd.Color = Color.Red;
                                        IGC.SendBroadcastMessage("cs" + mz, mb.X + "," + mb.Y + "," + mb.Z + ",3");
                                        IGC.SendBroadcastMessage("ccs" + mz, mb2.X + "," + mb2.Y + "," + mb2.Z);
                                        IGC.SendBroadcastMessage("cccs" + mz, mb3.X + "," + mb3.Y + "," + mb3.Z);
                                        IGC.SendBroadcastMessage("zy" + mz, zz.X + "," + zz.Y + "," + zz.Z + ",rd");
                                    }
                                }
                            }
                            else if (!wc)
                            {
                                IGC.SendBroadcastMessage("cs" + mz, yljq.WorldVolume.Center.X + "," + yljq.WorldVolume.Center.Y + "," + yljq.WorldVolume.Center.Z);
                                if (ejd)
                                {
                                    IGC.SendBroadcastMessage("zy" + mz, zz.X + "," + zz.Y + "," + zz.Z + ",1");
                                }
                                else
                                {
                                    if (fz) IGC.SendBroadcastMessage("fz" + mz, "fz");
                                    else IGC.SendBroadcastMessage("fz" + mz, "bfz");
                                    IGC.SendBroadcastMessage("zy" + mz, zz.X + "," + zz.Y + "," + zz.Z + ",0");
                                }
                            }
                            else if (wc && timer >= dqsj)
                            {
                                ks = false;
                                fz = false;
                                stt = true;
                                timer = 0;
                            }
                            txt.WriteText("名称:" + mz + "\n模式:本体\n坐标:\n\n方块:连接器本体-" + mz + "\n" + yljq.WorldAABB.Center + "\n方块:指引灯-" + mz + "\n" + zyjgd.WorldAABB.Center + "\n已连接时间" + timer);
                        }
                    }
                    else
                    {
                        txt.WriteText("脚本运行状态:中断!\n原因:\n自定义数据已被损毁,请删除全部自定义里的内容并重置本编程块");
                        Echo("脚本运行状态:中断!\n原因:\n自定义数据已被损毁,请删除全部自定义里的内容并重置本编程块");
                    }
                }
                //-----------------------------以上本体------------------------------------
                else if (lx == "-委派")
                {
                    var txt = Me.GetSurface(0);
                    if (Me.CustomData == "")
                    {
                        Me.CustomData = "--------已设置类型:委派--------\n直接修改下列中括号里的内容\n是否共用摄像机[否]\n共用摄像机名称[请输入名称](如果共用为否则可以忽略)\n挖掘范围(请输入直线,十字,或大范围)[大范围]\n挖掘范围间距(单位 米)[3]\n注意事项:委派模式下,需要在运行本编程块的时候输入参数,如果是给矿机下达挖掘指令则需要4个参数,中间用英文的逗号隔开*注意是英文的逗号,如果不运行或者报错说明您使用的是中文的逗号,请切换输入法\n而如果是给无人机下达返回的指令则只需要一个返回参数\n4个参数分别是:模式,最远标点距离(建议2000),悬浮高度,挖掘深度   且这4个参数都不需要您带上单位,只输入数字\n模式:1表示半自动防撞,2表示全自动防撞,3表示半自动不防撞,4表示全自动不防撞,开启防撞矿机可能会在一个地方一直ob,而防撞的作用则是适用于避障,例如从矿石的一面直线飞到另一面\n最远标点:即这个摄像机能投射到矿石表面的点最远有多远(最大标点距离),建议2000,超过5000扫描时间会很长\n悬浮高度:矿船从本体前往的点即为悬浮高度,适当运用可避障,建议大于2倍矿船的长度,但也不建议特别高,除非特殊情况\n挖掘深度:即每次往下挖多深,根据矿机的载荷即储物大小来定,小网格建议输入15\n1个返回参数是:stop或者stop2,这两返回参数只需选择输入一个,stop代表不以防撞模式返回而stop2则是以防撞模式返回\n没看懂不要紧,建议输入以下示例:\n示例1:4,2000,15,15  意思是以全自动不防撞,最大扫描距离2000,悬浮高度15,挖掘深度15来运行\n示例2:stop  意思是以不防撞模式返回\n示例3:stop2  意思是以防撞模式返回";
                    }
                    else if (Me.CustomData.Length > 25 && Me.CustomData.Substring(0, 24) != "--------已设置类型:委派--------")
                    {
                        Me.CustomData = "--------已设置类型:委派--------\n直接修改下列中括号里的内容\n是否共用摄像机[否]\n共用摄像机名称[请输入名称](如果共用为否则可以忽略)\n挖掘范围(请输入直线,十字,或大范围)[大范围]\n挖掘范围间距(单位 米)[3]\n注意事项:委派模式下,需要在运行本编程块的时候输入参数,如果是给矿机下达挖掘指令则需要4个参数,中间用英文的逗号隔开*注意是英文的逗号,如果不运行或者报错说明您使用的是中文的逗号,请切换输入法\n而如果是给无人机下达返回的指令则只需要一个返回参数\n4个参数分别是:模式,最远标点距离(建议2000),悬浮高度,挖掘深度   且这4个参数都不需要您带上单位,只输入数字\n模式:1表示半自动防撞,2表示全自动防撞,3表示半自动不防撞,4表示全自动不防撞,开启防撞矿机可能会在一个地方一直ob,而防撞的作用则是适用于避障,例如从矿石的一面直线飞到另一面\n最远标点:即这个摄像机能投射到矿石表面的点最远有多远(最大标点距离),建议2000,超过5000扫描时间会很长\n悬浮高度:矿船从本体前往的点即为悬浮高度,适当运用可避障,建议大于2倍矿船的长度,但也不建议特别高,除非特殊情况\n挖掘深度:即每次往下挖多深,根据矿机的载荷即储物大小来定,小网格建议输入15\n1个返回参数是:stop或者stop2,这两返回参数只需选择输入一个,stop代表不以防撞模式返回而stop2则是以防撞模式返回\n没看懂不要紧,建议输入以下示例:\n示例1:4,2000,15,15  意思是以全自动不防撞,最大扫描距离2000,悬浮高度15,挖掘深度15来运行\n示例2:stop  意思是以不防撞模式返回\n示例3:stop2  意思是以防撞模式返回";
                    }
                    if (Me.CustomData.Split(new char[2] { '[', ']' }).Count() >= 9)
                    {
                        string nam = Me.CustomData.Split(new char[2] { '[', ']' })[3];
                        if (Me.CustomData.Split(new char[2] { '[', ']' })[1] == "是")
                        {
                            gy = true;
                            if (GridTerminalSystem.GetBlockWithName(nam) != null)
                            {
                                cmr = GridTerminalSystem.GetBlockWithName(Me.CustomData.Split(new char[2] { '[', ']' })[3]) as IMyCameraBlock;
                                crun = true;
                            }
                            else
                            {
                                crun = false;
                                txt.WriteText("脚本运行状态:中断!\n原因:\n在共用模式下,未找到名称为:" + Me.CustomData.Split(new char[2] { '[', ']' })[3] + " 的摄像机\n请检查输入的名称或放置该摄像机");
                                Echo("脚本运行状态:中断!\n原因:未找到名称为:" + Me.CustomData.Split(new char[2] { '[', ']' })[3] + " 的摄像机\n请检查输入的名称或放置该摄像机");
                            }
                        }
                        else if (Me.CustomData.Split(new char[2] { '[', ']' })[1] == "否")
                        {
                            gy = false;
                            if (GridTerminalSystem.GetBlockWithName("摄像机-" + mz) != null)
                            {
                                cmr = GridTerminalSystem.GetBlockWithName("摄像机-" + mz) as IMyCameraBlock;
                                crun = true;
                            }
                            else
                            {
                                crun = false;
                                txt.WriteText("脚本运行状态:中断!\n原因:\n在不共用模式下未找到名称为:摄像机-" + mz + " 的摄像机\n请检查输入的名称或放置该摄像机");
                                Echo("脚本运行状态:中断!\n原因:\n在不共用模式下未找到名称为:摄像机-" + mz + " 的摄像机\n请检查输入的名称或放置该摄像机");
                            }
                        }
                        else
                        {
                            txt.WriteText("脚本运行状态:中断!\n原因:\n是否共用方块只能填入是或否\n您的输入:" + Me.CustomData.Split(new char[2] { '[', ']' })[1] + "\n请检查输入,如若还报错,请*删除自定义数据里面的全部内容*(删除干净)并重置本程序");
                            Echo("脚本运行状态:中断!\n原因:\n是否共用方块只能填入是或否\n您的输入:" + Me.CustomData.Split(new char[2] { '[', ']' })[1] + "\n请检查输入,如若还报错,请*删除自定义数据里面的全部内容*(删除干净)并重置本程序");
                        }
                        if (Me.CustomData.Split(new char[2] { '[', ']' })[5] == "直线")
                        {
                            bs = 1;
                        }
                        else if (Me.CustomData.Split(new char[2] { '[', ']' })[5] == "十字")
                        {
                            bs = 2;
                        }
                        else if (Me.CustomData.Split(new char[2] { '[', ']' })[5] == "大范围")
                        {
                            bs = 3;
                        }
                        else
                        {
                            txt.WriteText("脚本运行状态:中断!\n原因:\n挖掘范围只能填入直线,十字或大范围\n您的输入:" + Me.CustomData.Split(new char[2] { '[', ']' })[1] + "\n请检查输入,如若还报错,请*删除自定义数据里面的全部内容*(删除干净)并重置本程序");
                            Echo("脚本运行状态:中断!\n原因:\n挖掘范围只能填入直线,十字或大范围\n您的输入:" + Me.CustomData.Split(new char[2] { '[', ']' })[1] + "\n请检查输入,如若还报错,请*删除自定义数据里面的全部内容*(删除干净)并重置本程序");
                        }
                        bool zh1 = double.TryParse(Me.CustomData.Split(new char[2] { '[', ']' })[7], out DistanceBetween);
                        if (!zh1)
                        {
                            txt.WriteText("脚本运行状态:中断!\n原因:\n挖掘范围间距必须是一个数值\n您的输入:" + Me.CustomData.Split(new char[2] { '[', ']' })[7] + "\n请检查输入,如若还报错,请*删除自定义数据里面的全部内容*(删除干净)并重置本程序");
                        }
                        if (crun && zh1)
                        {
                            if (gy)
                            {
                                Echo("脚本运行状态:正常" + "\n本编程块类型:" + lx + "\n终端矿机名称:" + mz + "\n\n是否共用摄像机:" + Me.CustomData.Split(new char[2] { '[', ']' })[1] + "\n共用摄像机名称:" + nam + "\n挖掘范围" + Me.CustomData.Split(new char[2] { '[', ']' })[5] + "\n挖掘范围间距:" + Me.CustomData.Split(new char[2] { '[', ']' })[7] + "\n\nMade by XFEstudio");
                            }
                            else
                            {
                                Echo("脚本运行状态:正常" + "\n本编程块类型:" + lx + "\n终端矿机名称:" + mz + "\n\n是否共用摄像机:" + Me.CustomData.Split(new char[2] { '[', ']' })[1] + "\n挖掘范围" + Me.CustomData.Split(new char[2] { '[', ']' })[5] + "\n挖掘范围间距:" + Me.CustomData.Split(new char[2] { '[', ']' })[7] + "\n\nMade by XFEstudio");
                            }
                            if (Storage != null && Storage != "")
                            {
                                string[] STGfg = Storage.Split('|');
                                if (STGfg.Length >= 21)
                                {
                                    try
                                    {
                                        tp = bool.Parse(STGfg[0]);
                                        tp2 = bool.Parse(STGfg[1]);
                                        yxcs = bool.Parse(STGfg[2]);
                                        times = int.Parse(STGfg[3]);
                                        pyl = ZVV(STGfg[4]);
                                        pyl2 = ZVV(STGfg[5]);
                                        Up = ZVV(STGfg[6]);
                                        Down = ZVV(STGfg[7]);
                                        Left = ZVV(STGfg[8]);
                                        Right = ZVV(STGfg[9]);
                                        mb = ZVV(STGfg[10]);
                                        mb2 = ZVV(STGfg[11]);
                                        mb3 = ZVV(STGfg[12]);
                                        dst = double.Parse(STGfg[13]);
                                        mod = int.Parse(STGfg[14]);
                                        gd = double.Parse(STGfg[15]);
                                        sd = double.Parse(STGfg[16]);
                                        aabName = STGfg[17];
                                        aabType = STGfg[18];
                                        aabRelationship = STGfg[19];
                                        aabId = STGfg[20];
                                    }
                                    catch (Exception ex)
                                    {
                                        Echo($"发生异常:{ex.Message}");
                                    }
                                    Storage = "";
                                }
                            }
                            Echo(mb + "\n\n" + mb2 + "\n\n" + mb3 + "\n\n" + times + "\n" + mod);
                            int ttm = times - 1;
                            if (argument != "")
                            {
                                if (argument == "stop")
                                {
                                    tp = true;
                                }
                                else if (argument == "stop2")
                                {
                                    tp2 = true;
                                }
                                else
                                {
                                    string[] fg = argument.Split(',');
                                    tp = false;
                                    tp2 = false;
                                    yxcs = true;
                                    times = 1;
                                    dst = double.Parse(fg[1]);
                                    mod = int.Parse(fg[0]);
                                    gd = double.Parse(fg[2]);
                                    sd = double.Parse(fg[3]);
                                    cmr.EnableRaycast = true;
                                    aab = cmr.Raycast(dst, 0, 0);
                                }
                                if (!aab.IsEmpty())
                                {
                                    if (mod == 1)
                                    {
                                        txt.WriteText("目标矿机终端名称:" + mz + "\n模式:半自动 - 避障" + "\n目标名字:" + aab.Name + "\n类型:" + aab.Type + "\n关系:" + aab.Relationship + "\n坐标:" + aab.HitPosition + "\n实体ID:" + aab.EntityId);
                                    }
                                    else if (mod == 2)
                                    {
                                        txt.WriteText("目标矿机终端名称:" + mz + "\n模式:全自动 - 避障" + "\n目标名字:" + aab.Name + "\n类型:" + aab.Type + "\n关系:" + aab.Relationship + "\n坐标:" + aab.HitPosition + "\n实体ID:" + aab.EntityId + "\n已执行次数:" + ttm);
                                    }
                                    else if (mod == 3)
                                    {
                                        txt.WriteText("目标矿机终端名称:" + mz + "\n模式:半自动 - 不避障" + "\n目标名字:" + aab.Name + "\n类型:" + aab.Type + "\n关系:" + aab.Relationship + "\n坐标:" + aab.HitPosition + "\n实体ID:" + aab.EntityId);
                                    }
                                    else if (mod == 4)
                                    {
                                        txt.WriteText("目标矿机终端名称:" + mz + "\n模式:全自动 - 不避障" + "\n目标名字:" + aab.Name + "\n类型:" + aab.Type + "\n关系:" + aab.Relationship + "\n坐标:" + aab.HitPosition + "\n实体ID:" + aab.EntityId + "\n已执行次数:" + ttm);
                                    }
                                    if (aab.Type == MyDetectedEntityType.Asteroid || aab.Type == MyDetectedEntityType.Planet)
                                    {
                                        mb = aab.HitPosition.Value;
                                        pyl = cmr.WorldMatrix.Forward;
                                        pyl2 = cmr.WorldMatrix.Backward;
                                        Up = cmr.WorldMatrix.Up;
                                        Down = cmr.WorldMatrix.Down;
                                        Left = cmr.WorldMatrix.Left;
                                        Right = cmr.WorldMatrix.Right;
                                        mb2 = mb + pyl2 * gd;
                                        mb3 = mb + pyl * sd * times;
                                        aabName = aab.Name;
                                        aabType = aab.Type + "";
                                        aabRelationship = aab.Relationship + "";
                                        aabId = aab.EntityId + "";
                                    }
                                }
                            }
                            else if (!yxcs)
                            {
                                txt.WriteText("等待运行参数");
                                cmr.EnableRaycast = true;
                            }
                            if (tp)
                            {
                                IGC.SendBroadcastMessage(mz, "Return");
                                txt.WriteText("终止挖掘任务,以不防撞模式返回...\n等待下一次任务");
                                tp2 = false;
                            }
                            else if (tp2)
                            {
                                IGC.SendBroadcastMessage(mz, "Retreat");
                                txt.WriteText("终止挖掘任务,以防撞模式返回...\n等待下一次任务");
                                tp = false;
                            }
                            else if (!mb.IsZero() && mod == 1)
                            {
                                mb3 = mb + pyl * sd;
                                IGC.SendBroadcastMessage(mz, mb.X + "," + mb.Y + "," + mb.Z + "," + mb2.X + "," + mb2.Y + "," + mb2.Z + "," + mb3.X + "," + mb3.Y + "," + mb3.Z + ",fz");
                                txt.WriteText("目标矿机终端名称:" + mz + "\n模式:半自动 - 避障" + "\n目标名字:" + aabName + "\n类型:" + aabType + "\n关系:" + aabRelationship + "\n坐标:" + mb + "\n实体ID:" + aabId);
                            }
                            else if (!mb.IsZero() && mod == 3)
                            {
                                mb3 = mb + pyl * sd;
                                IGC.SendBroadcastMessage(mz, mb.X + "," + mb.Y + "," + mb.Z + "," + mb2.X + "," + mb2.Y + "," + mb2.Z + "," + mb3.X + "," + mb3.Y + "," + mb3.Z + ",bfz");
                                txt.WriteText("目标矿机终端名称:" + mz + "\n模式:半自动 - 不避障" + "\n目标名字:" + aabName + "\n类型:" + aabType + "\n关系:" + aabRelationship + "\n坐标:" + mb + "\n实体ID:" + aabId);
                            }
                            else if (!mb.IsZero() && mod == 2)
                            {
                                if (IGC.RegisterBroadcastListener("times" + mz).AcceptMessage().Data + "" == "0")
                                {
                                    times++;
                                    if (bs == 1)
                                    {
                                        mb3 = mb + pyl * sd * times;
                                    }
                                    else if (bs == 2)
                                    {
                                        int sdbs = (times / 5) + 1;
                                        int fx = times % 5;
                                        //前
                                        if (fx == 1)
                                        {
                                            mb2 = mb + pyl2 * gd;
                                            mb3 = mb + pyl * sd * sdbs;
                                        }
                                        //上
                                        else if (fx == 2)
                                        {
                                            mb += Up * sd * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Up * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Up * sd * DistanceBetween;
                                        }
                                        //下
                                        else if (fx == 3)
                                        {
                                            mb += Down * sd * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Down * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Down * sd * DistanceBetween;
                                        }
                                        //左
                                        else if (fx == 4)
                                        {
                                            mb += Left * sd * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Left * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Left * sd * DistanceBetween;
                                        }
                                        //右
                                        else if (fx == 0)
                                        {
                                            mb += Right * sd * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Right * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Right * sd * DistanceBetween;
                                        }
                                    }
                                    else if (bs == 3)
                                    {
                                        int sdbs = (times / 9) + 1;
                                        int fx = times % 9;
                                        //前
                                        if (fx == 1)
                                        {
                                            mb2 = mb + pyl2 * gd;
                                            mb3 = mb + pyl * sd * sdbs;
                                        }
                                        //左上
                                        else if (fx == 2)
                                        {
                                            mb += Left * DistanceBetween + Up * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Left * DistanceBetween + Up * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Left * DistanceBetween + Up * DistanceBetween;
                                        }
                                        //上
                                        else if (fx == 3)
                                        {
                                            mb += Up * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Up * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Up * DistanceBetween;
                                        }
                                        //右上
                                        else if (fx == 4)
                                        {
                                            mb += Right * DistanceBetween + Up * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Right * DistanceBetween + Up * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Right * DistanceBetween + Up * DistanceBetween;
                                        }
                                        //右
                                        else if (fx == 5)
                                        {
                                            mb += Right * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Right * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Right * DistanceBetween;
                                        }
                                        //右下
                                        else if (fx == 6)
                                        {
                                            mb += Right * DistanceBetween + Down * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Right * DistanceBetween + Down * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Right * DistanceBetween + Down * DistanceBetween;
                                        }
                                        //下
                                        else if (fx == 7)
                                        {
                                            mb = mb + pyl2 * gd + Down * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Down * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Down * DistanceBetween;
                                        }
                                        //左下
                                        else if (fx == 8)
                                        {
                                            mb += Left * DistanceBetween + Down * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Left * DistanceBetween + Down * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Left * DistanceBetween + Down * DistanceBetween;
                                        }
                                        //左
                                        else if (fx == 0)
                                        {
                                            mb += Left * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Left * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Left * DistanceBetween;
                                        }
                                    }
                                }
                                IGC.SendBroadcastMessage(mz, mb.X + "," + mb.Y + "," + mb.Z + "," + mb2.X + "," + mb2.Y + "," + mb2.Z + "," + mb3.X + "," + mb3.Y + "," + mb3.Z + ",fz");
                                txt.WriteText("目标矿机终端名称:" + mz + "\n模式:全自动 - 避障" + "\n目标名字:" + aabName + "\n类型:" + aabType + "\n关系:" + aabRelationship + "\n坐标:" + mb + "\n实体ID:" + aabId + "\n已执行次数:" + ttm);
                            }
                            else if (!mb.IsZero() && mod == 4)
                            {
                                if (IGC.RegisterBroadcastListener("times" + mz).AcceptMessage().Data + "" == "0")
                                {
                                    times++;
                                    if (bs == 1)
                                    {
                                        mb3 = mb + pyl * sd * times;
                                    }
                                    else if (bs == 2)
                                    {
                                        int sdbs = (times / 5) + 1;
                                        int fx = times % 5;
                                        //前
                                        if (fx == 1)
                                        {
                                            mb2 = mb + pyl2 * gd;
                                            mb3 = mb + pyl * sd * sdbs;
                                        }
                                        //上
                                        else if (fx == 2)
                                        {
                                            mb += Up * sd * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Up * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Up * sd * DistanceBetween;
                                        }
                                        //下
                                        else if (fx == 3)
                                        {
                                            mb += Down * sd * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Down * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Down * sd * DistanceBetween;
                                        }
                                        //左
                                        else if (fx == 4)
                                        {
                                            mb += Left * sd * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Left * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Left * sd * DistanceBetween;
                                        }
                                        //右
                                        else if (fx == 0)
                                        {
                                            mb += Right * sd * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Right * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Right * sd * DistanceBetween;
                                        }
                                    }
                                    else if (bs == 3)
                                    {
                                        int sdbs = (times / 9) + 1;
                                        int fx = times % 9;
                                        //前
                                        if (fx == 1)
                                        {
                                            mb2 = mb + pyl2 * gd;
                                            mb3 = mb + pyl * sd * sdbs;
                                        }
                                        //左上
                                        else if (fx == 2)
                                        {
                                            mb += Left * DistanceBetween + Up * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Left * DistanceBetween + Up * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Left * DistanceBetween + Up * DistanceBetween;
                                        }
                                        //上
                                        else if (fx == 3)
                                        {
                                            mb += Up * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Up * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Up * DistanceBetween;
                                        }
                                        //右上
                                        else if (fx == 4)
                                        {
                                            mb += Right * DistanceBetween + Up * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Right * DistanceBetween + Up * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Right * DistanceBetween + Up * DistanceBetween;
                                        }
                                        //右
                                        else if (fx == 5)
                                        {
                                            mb += Right * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Right * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Right * DistanceBetween;
                                        }
                                        //右下
                                        else if (fx == 6)
                                        {
                                            mb += Right * DistanceBetween + Down * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Right * DistanceBetween + Down * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Right * DistanceBetween + Down * DistanceBetween;
                                        }
                                        //下
                                        else if (fx == 7)
                                        {
                                            mb = mb + pyl2 * gd + Down * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Down * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Down * DistanceBetween;
                                        }
                                        //左下
                                        else if (fx == 8)
                                        {
                                            mb += Left * DistanceBetween + Down * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Left * DistanceBetween + Down * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Left * DistanceBetween + Down * DistanceBetween;
                                        }
                                        //左
                                        else if (fx == 0)
                                        {
                                            mb += Left * DistanceBetween;
                                            mb2 = mb + pyl2 * gd + Left * DistanceBetween;
                                            mb3 = mb + pyl * sd * sdbs + Left * DistanceBetween;
                                        }
                                    }
                                }
                                IGC.SendBroadcastMessage(mz, mb.X + "," + mb.Y + "," + mb.Z + "," + mb2.X + "," + mb2.Y + "," + mb2.Z + "," + mb3.X + "," + mb3.Y + "," + mb3.Z + ",bfz");
                                txt.WriteText("目标矿机终端名称:" + mz + "\n模式:全自动 - 不避障" + "\n目标名字:" + aabName + "\n类型:" + aabType + "\n关系:" + aabRelationship + "\n坐标:" + mb + "\n实体ID:" + aabId + "\n已执行次数:" + ttm);
                            }
                            if (mb.IsZero())
                            {
                                aab = cmr.Raycast(dst, 0, 0);
                                if (!aab.IsEmpty() && aab.Type == MyDetectedEntityType.Asteroid || aab.Type == MyDetectedEntityType.Planet)
                                {
                                    mb = aab.HitPosition.Value;
                                    mb2 = mb + pyl2 * gd;
                                    mb3 = mb + pyl * sd * times;
                                }
                            }
                        }
                    }
                    else
                    {
                        txt.WriteText("脚本运行状态:中断!\n原因:\n自定义数据已被损毁,请删除全部自定义里的内容并重置本编程块");
                        Echo("脚本运行状态:中断!\n原因:\n自定义数据已被损毁,请删除全部自定义里的内容并重置本编程块");
                    }
                }
                //-----------------------------以上委派------------------------------------
                else
                {
                    var txt = Me.GetSurface(0);
                    txt.WriteText("脚本运行状态:中断!\n原因:类型不合要求\n未知类型:" + lx + "\n请更改编程块的名称\n(注意是中文的“ - ”)\n格式:矿机名字-类型\n类型有三种:矿机  本体  委派,分别放置于矿机   矿机的母舰   标点(标点可以是独立的探矿飞船也可以放在矿机的母舰上) 的编程块,每个矿机都需要这三要素\n例如:矿机1号-矿机\n矿机1号-本体\n矿机1号-委派\n以上三要素才能构成一个完整的无人矿机系统");
                    Echo("脚本运行状态:中断!\n原因:类型不合要求\n未知类型:" + lx + "\n请更改编程块的名称\n(注意是中文的“ - ”)\n格式:矿机名字-类型\n类型有三种:矿机  本体  委派,分别放置于矿机   矿机的母舰   标点(标点可以是独立的探矿飞船也可以放在矿机的母舰上) 的编程块,每个矿机都需要这三要素\n例如:矿机1号-矿机\n矿机1号-本体\n矿机1号-委派\n以上三要素才能构成一个完整的无人矿机系统");
                }
            }
            else
            {
                var txt = Me.GetSurface(0);
                txt.WriteText("脚本运行状态:中断!\n原因:类型不合要求\n请更改编程块的名称\n(注意是中文的“ - ”)\n格式:矿机名字-类型\n类型有三种:矿机  本体  委派,分别放置于矿机   矿机的母舰   标点(标点可以是独立的探矿飞船也可以放在矿机的母舰上) 的编程块,每个矿机都需要这三要素\n例如:矿机1号-矿机\n矿机1号-本体\n矿机1号-委派\n以上三要素才能构成一个完整的无人矿机系统");
                Echo("脚本运行状态:中断!\n原因:类型不合要求\n请更改编程块的名称\n(注意是中文的“ - ”)\n格式:矿机名字-类型\n类型有三种:矿机  本体  委派,分别放置于矿机   矿机的母舰   标点(标点可以是独立的探矿飞船也可以放在矿机的母舰上) 的编程块,每个矿机都需要这三要素\n例如:矿机1号-矿机\n矿机1号-本体\n矿机1号-委派\n以上三要素才能构成一个完整的无人矿机系统");
            }
        }
        //---------------------以下保存-----------------------
        public void Save()
        {
            if (lx == "-矿机")
            {
                Storage = st + "|" + oc + "|" + sfxf + "|" + fh + "|" + IsClosing + "|" + ks + "|" + csh + "|" + cnnt + "|" + yjd + "|" + bt + "|" + mb.X + "," + mb.Y + "," + mb.Z + "|" + xf.X + "," + xf.Y + "," + xf.Z + "|" + mb3.X + "," + mb3.Y + "," + mb3.Z;
            }
            else if (lx == "-本体")
            {
                Storage = stt + "|" + wc + "|" + ejd + "|" + ks + "|" + fz;
            }
            else
            {
                Storage = tp + "|" + tp2 + "|" + yxcs + "|" + times + "|" + pyl.X + "," + pyl.Y + "," + pyl.Z + "|" + pyl2.X + "," + pyl2.Y + "," + pyl2.Z + "|" + Up.X + "," + Up.Y + "," + Up.Z + "|" + Down.X + "," + Down.Y + "," + Down.Z + "," + "|" + Left.X + "," + Left.Y + "," + Left.Z + "|" + Right.X + "," + Right.Y + "," + Right.Z + "|" + mb.X + "," + mb.Y + "," + mb.Z + "|" + mb2.X + "," + mb2.Y + "," + mb2.Z + "|" + mb3.X + "," + mb3.Y + "," + mb3.Z + "|" + dst + "|" + mod + "|" + gd + "|" + sd + "|" + aabName + "|" + aabType + "|" + aabRelationship + "|" + aabId;
            }
        }
        //----------------------------------------------------------------------------------------
    }
}