示例#1
0
        public override void Execute(string name, string[] cmdArgs, ConsoleWriteLine WriteLine)
        {
            if (Chat.InvokeRequired)
            {
                if (!Instance.MonoRuntime || Chat.IsHandleCreated)
                {
                    Chat.Invoke(new MethodInvoker(() => Execute(name, cmdArgs, WriteLine)));
                }
                return;
            }
            wl = WriteLine;

            string        cmd  = string.Join(" ", cmdArgs);
            List <string> args = new List <string>(Regex.Split(cmd, @"\s", regexOptions));

            if (args.Count == 0)
            {
                PrintUsage(); return;
            }

            string subcmd = args[0];

            args.RemoveAt(0);
            string subarg = string.Empty;

            // Face certain direction
            int heading = 0;

            if (int.TryParse(subcmd, out heading))
            {
                double rad = 0.0174532925d * heading;
                Client.Self.Movement.UpdateFromHeading(rad, true);
                WriteLine("Facing {0} degrees", heading % 360);
                return;
            }

            if (subcmd == "help")
            {
                PrintFullUsage();
                return;
            }

            KnownHeading kh = null;

            kh = StateManager.KnownHeadings.Find(h => { return(h.ID == subcmd.ToUpper()); });
            if (kh != null)
            {
                Client.Self.Movement.BodyRotation = Client.Self.Movement.HeadRotation = kh.Heading;
                WriteLine("Facing {0}", kh.Name);
                return;
            }

            if (args.Count == 0)
            {
                PrintUsage(); return;
            }
            subarg = string.Join(" ", args.ToArray());

            // Move towards
            switch (subcmd)
            {
            case "person":
                List <UUID> people = Chat.GetAvatarList();
                UUID        person = people.Find(id => { return(Instance.Names.Get(id).ToLower().StartsWith(subarg.ToLower())); });
                if (person == UUID.Zero)
                {
                    WriteLine("Could not find {0}", subarg);
                    return;
                }
                string pname = Instance.Names.Get(person);

                if (!Instance.State.TryFindAvatar(person, out targetPos))
                {
                    WriteLine("Could not locate {0}", pname);
                    return;
                }

                WriteLine("Facing {0}", pname);
                Client.Self.Movement.TurnToward(targetPos);

                return;

            case "object":

                if (!TC.TabExists("objects"))
                {
                    RadegastTab tab = TC.AddTab("objects", "Objects", new ObjectsConsole(Instance));
                    tab.AllowClose  = true;
                    tab.AllowDetach = true;
                    tab.Visible     = true;
                    tab.AllowHide   = false;
                    ((ObjectsConsole)tab.Control).RefreshObjectList();
                    TC.Tabs["chat"].Select();

                    WriteLine("Objects list was not active. Started getting object names, please try again in a minute.");
                    return;
                }

                Objects = (ObjectsConsole)TC.Tabs["objects"].Control;
                List <Primitive> prims = Objects.GetObjectList();

                Primitive target = prims.Find(prim =>
                {
                    return(prim.Properties != null &&
                           prim.Properties.Name.ToLower().Contains(subarg.ToLower()));
                });

                if (target == null)
                {
                    WriteLine("Could not find '{0}' nearby", subarg);
                    return;
                }

                targetPos = target.Position;

                WriteLine("Facing object '{0}'", target.Properties.Name);
                Client.Self.Movement.TurnToward(targetPos);
                return;

            default:
                WriteLine("Unrecognized face command {0}", subcmd);
                return;
            }
        }
示例#2
0
        public override void Execute(string name, string[] cmdArgs, ConsoleWriteLine WriteLine)
        {
            if (Chat.InvokeRequired)
            {
                if (!Instance.MonoRuntime || Chat.IsHandleCreated)
                {
                    Chat.Invoke(new MethodInvoker(() => Execute(name, cmdArgs, WriteLine)));
                }
                return;
            }
            wl = WriteLine;

            string        cmd  = string.Join(" ", cmdArgs);
            List <string> args = new List <string>(Regex.Split(cmd, @"\s", regexOptions));

            if (args.Count == 0)
            {
                PrintUsage(); return;
            }

            bool useTP = false;

            if (args[0] == "tp")
            {
                useTP = true;
                args.RemoveAt(0);
            }

            if (args.Count == 0)
            {
                PrintUsage(); return;
            }

            string subcmd = args[0];

            args.RemoveAt(0);
            string subarg = string.Empty;

            // Move certain distance
            int distance = 0;

            if (int.TryParse(subcmd, out distance))
            {
                if (distance < 1)
                {
                    return;
                }
                Quaternion   heading = Client.Self.Movement.BodyRotation;
                KnownHeading kh      = null;

                if (args.Count > 0)
                {
                    kh = StateManager.KnownHeadings.Find((KnownHeading h) => { return(h.ID == args[0].ToUpper()); });
                    if (kh != null)
                    {
                        heading = kh.Heading;
                    }
                }

                targetPos = Client.Self.SimPosition + new Vector3((float)distance, 0f, 0f) * heading;
                Client.Self.Movement.BodyRotation = Client.Self.Movement.HeadRotation = heading;
                Client.Self.Movement.Camera.LookAt(Client.Self.SimPosition, targetPos);
                Client.Self.Movement.SendUpdate(true);
                WriteLine("Going {0} to {1:0},{2:0},{3:0}", kh == null ? string.Empty : kh.Name, targetPos.X, targetPos.Y, targetPos.Z);
                Instance.State.MoveTo(targetPos, useTP);
                return;
            }

            if (subcmd == "help")
            {
                PrintFullUsage();
                return;
            }

            if (args.Count == 0)
            {
                PrintUsage(); return;
            }
            subarg = string.Join(" ", args.ToArray());

            // Move towards
            switch (subcmd)
            {
            case "xyz":
                string[] coords = Regex.Split(subarg, @"\D+");
                if (coords.Length < 2)
                {
                    PrintUsage(); return;
                }
                int x = int.Parse(coords[0]);
                int y = int.Parse(coords[1]);
                int z = coords.Length > 2 ? int.Parse(coords[2]) : (int)Client.Self.SimPosition.Z;
                targetPos = new Vector3(x, y, z);
                WriteLine("Going to {0:0},{1:0},{2:0}", targetPos.X, targetPos.Y, targetPos.Z);
                Instance.State.MoveTo(targetPos, useTP);
                return;

            case "person":
                List <UUID> people = Chat.GetAvatarList();
                UUID        person = people.Find((UUID id) => { return(Instance.Names.Get(id).ToLower().StartsWith(subarg.ToLower())); });
                if (person == UUID.Zero)
                {
                    WriteLine("Could not find {0}", subarg);
                    return;
                }
                string pname = Instance.Names.Get(person);

                targetPos = Vector3.Zero;

                if (!Instance.State.TryFindAvatar(person, out targetPos))
                {
                    WriteLine("Could not locate {0}", pname);
                    return;
                }

                WriteLine("Going to {3} at {0:0},{1:0},{2:0}", targetPos.X, targetPos.Y, targetPos.Z, pname);
                Instance.State.MoveTo(targetPos, useTP);

                return;

            case "object":

                if (!TC.TabExists("objects"))
                {
                    METAboltTab tab = TC.AddTab("objects", "Objects", new ObjectsConsole(Instance));
                    tab.AllowClose  = true;
                    tab.AllowDetach = true;
                    tab.Visible     = true;
                    tab.AllowHide   = false;
                    ((ObjectsConsole)tab.Control).RefreshObjectList();
                    WriteLine("Objects list was not active. Started getting object names, please try again in a minute.");
                    TC.Tabs["chat"].Select();
                    return;
                }

                Objects = (ObjectsConsole)TC.Tabs["objects"].Control;
                List <Primitive> prims = Objects.GetObjectList();

                Primitive target = prims.Find((Primitive prim) =>
                {
                    return(prim.Properties != null &&
                           prim.Properties.Name.ToLower().Contains(subarg.ToLower()));
                });

                if (target == null)
                {
                    WriteLine("Could not find '{0}' nearby", subarg);
                    return;
                }

                targetPos = target.Position;

                WriteLine("Going to object '{0}' at {1:0},{2:0},{3:0}", target.Properties.Name, targetPos.X, targetPos.Y, targetPos.Z);
                Instance.State.MoveTo(targetPos, useTP);
                return;

            default:
                WriteLine("Unrecognized go command {0}", subcmd);
                return;
            }
        }