Ejemplo n.º 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;

            if (cmdArgs.Length == 0)
            {
                PrintUsage(); return;
            }

            string cmd = string.Join(" ", cmdArgs);

            if (cmd == "ground")
            {
                Client.Self.SitOnGround();
                wl("Sat on the ground");
                return;
            }

            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();
                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((Primitive prim) =>
            {
                return(prim.Properties != null &&
                       prim.Properties.Name.ToLower().Contains(cmd.ToLower()));
            });

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

            WriteLine("Requesting to sit on object '{0}'", target.Properties.Name);
            Instance.State.SetSitting(true, target.ID);
        }
Ejemplo n.º 2
0
        public void ActivateConversationFromTab(METAboltTab Tab)
        {
            System.Windows.Forms.Control sTabControl = Tab.Control;

            if (sTabControl is InventoryConsole && control.config["enabled_for_inventory"])
            {
                SelectConversation(inventory);
            }
            else if (sTabControl is ChatConsole)
            {
                if (chat == null)
                {
                    chat         = new Chat(control);
                    chat.Console = sTabControl;
                    AddConversation(chat);
                }
                SelectConversation(chat);
            }
            else if (sTabControl is FriendsConsole && control.config["enabled_for_friends"])
            {
                SelectConversation(friends);
            }
            else if (sTabControl is VoiceConsole)
            {
                SelectConversation(voice);
            }
            else if (sTabControl is GroupIMTabWindow)
            {
                GroupIMTabWindow tab = (GroupIMTabWindow)sTabControl;
                SelectConversation(
                    control.instance.Groups[tab.SessionId].Name);
            }
            else if (sTabControl is ConferenceIMTabWindow)
            {
                ConferenceIMTabWindow tab = (ConferenceIMTabWindow)sTabControl;
                SelectConversation(tab.SessionName);
            }
            else if (sTabControl is IMTabWindow)
            {
                IMTabWindow tab = (IMTabWindow)sTabControl;
                SelectConversation(tab.TargetName);
            }
            else if (sTabControl is ObjectsConsole && control.config["enabled_for_objects"])
            {
                SelectConversation(surroundings);
            }
        }
Ejemplo n.º 3
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;
            }
        }
Ejemplo n.º 4
0
        public void CreateConversationFromTab(METAboltTab Tab, bool selectConversation)
        {
            System.Windows.Forms.Control sTabControl = Tab.Control;

            Mode newConv = null;

            // Create a conversation on first appearance of its tab.
            if (sTabControl is InventoryConsole && control.config["enabled_for_inventory"])
            {
                newConv = inventory = new Closet(control);
            }
            else if (sTabControl is ChatConsole)
            {
                if (chat != null)
                {
                    return;
                }
                newConv = chat = new Chat(control);
            }
            else if (sTabControl is FriendsConsole && control.config["enabled_for_friends"])
            {
                newConv = friends = new Friends(control);
            }
            else if (sTabControl is VoiceConsole)
            {
                newConv = voice = new Voice(control);
            }
            else if (sTabControl is GroupIMTabWindow)
            {
                GroupIMTabWindow tab = (GroupIMTabWindow)sTabControl;
                AddConversation(new GroupIMSession(control, tab.SessionId));
                return;
            }
            else if (sTabControl is ConferenceIMTabWindow)
            {
                ConferenceIMTabWindow tab = (ConferenceIMTabWindow)sTabControl;
                AddConversation(new ConferenceIMSession(control, tab.SessionId, tab.SessionName));
                return;
            }
            else if (sTabControl is IMTabWindow)
            {
                IMTabWindow tab = (IMTabWindow)sTabControl;
                AddConversation(new SingleIMSession(control, tab.TargetName, tab.TargetId, tab.SessionId));
                return;
            }
            else if (sTabControl is ObjectsConsole && control.config["enabled_for_objects"])
            {
                surroundings = new Surroundings(control);
                AddConversation(surroundings);
            }

            // If a conversation was created, switch to it.
            if (newConv != null)
            {
                AddConversation(newConv);
                // Select CHAT as soon as it is created.
                if (selectConversation && sTabControl is ChatConsole)
                {
                    SelectConversation(newConv);
                }
            }
        }
Ejemplo n.º 5
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;

            if (cmdArgs.Length == 0)
            {
                PrintUsage(); return;
            }

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

            string subcmd = args[0];

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

            Primitive seat = null;

            if (Client.Self.SittingOn != 0)
            {
                Client.Network.CurrentSim.ObjectsPrimitives.TryGetValue(Client.Self.SittingOn, out seat);
            }

            Vector3 mypos = Client.Self.RelativePosition;

            if (seat != null)
            {
                mypos = seat.Position + mypos;
            }
            StringBuilder sb = new StringBuilder();

            if (subcmd == "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();
                    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();

                List <Primitive> targets = prims.FindAll((Primitive prim) =>
                {
                    return(prim.Properties != null &&
                           prim.Properties.Name.ToLower().Contains(subarg.ToLower()));
                });

                if (targets == null || targets.Count == 0)
                {
                    WriteLine("Could not find '{0}' nearby", subarg);
                    return;
                }

                foreach (Primitive target in targets)
                {
                    Vector3 heading = StateManager.RotToEuler(Vector3.RotationBetween(Vector3.UnitX, Vector3.Normalize(target.Position - mypos)));
                    int     facing  = (int)(57.2957795d * heading.Z);
                    if (facing < 0)
                    {
                        facing = 360 + facing;
                    }

                    sb.AppendFormat("{0} is {1:0} meters away to the {2}",
                                    target.Properties.Name,
                                    Vector3.Distance(mypos, target.Position),
                                    StateManager.ClosestKnownHeading(facing)
                                    );

                    float elev = target.Position.Z - mypos.Z;
                    if (Math.Abs(elev) < 2f)
                    {
                        sb.Append(" at our level");
                    }
                    else if (elev > 0)
                    {
                        sb.AppendFormat(", {0:0} meters above our level", elev);
                    }
                    else
                    {
                        sb.AppendFormat(", {0:0} meters below our level", -elev);
                    }

                    sb.AppendLine();
                }

                wl(sb.ToString());

                return;
            }

            if (subcmd == "person")
            {
                List <UUID> people = Chat.GetAvatarList();
                people = people.FindAll((UUID id) => { return(id != Client.Self.AgentID && Instance.Names.Get(id).ToLower().StartsWith(subarg.ToLower())); });
                if (people == null || people.Count == 0)
                {
                    WriteLine("Could not find {0}", subarg);
                    return;
                }

                foreach (UUID person in people)
                {
                    string pname = Instance.Names.Get(person);

                    Vector3 targetPos = Vector3.Zero;

                    // try to find where they are
                    Avatar avi = Client.Network.CurrentSim.ObjectsAvatars.Find((Avatar av) => { return(av.ID == person); });

                    if (avi != null)
                    {
                        if (avi.ParentID == 0)
                        {
                            targetPos = avi.Position;
                        }
                        else
                        {
                            Primitive theirSeat;
                            if (Client.Network.CurrentSim.ObjectsPrimitives.TryGetValue(avi.ParentID, out theirSeat))
                            {
                                targetPos = theirSeat.Position + avi.Position;
                            }
                        }
                    }
                    else
                    {
                        if (Client.Network.CurrentSim.AvatarPositions.ContainsKey(person))
                        {
                            targetPos = Client.Network.CurrentSim.AvatarPositions[person];
                        }
                    }

                    if (targetPos.Z < 0.01f)
                    {
                        WriteLine("Could not locate {0}", pname);
                        return;
                    }

                    Vector3 heading = StateManager.RotToEuler(Vector3.RotationBetween(Vector3.UnitX, Vector3.Normalize(targetPos - mypos)));
                    int     facing  = (int)(57.2957795d * heading.Z);
                    if (facing < 0)
                    {
                        facing = 360 + facing;
                    }

                    sb.AppendFormat("{0} is {1:0} meters away to the {2}",
                                    pname,
                                    Vector3.Distance(mypos, targetPos),
                                    StateManager.ClosestKnownHeading(facing)
                                    );

                    float elev = targetPos.Z - mypos.Z;
                    if (Math.Abs(elev) < 2f)
                    {
                        sb.Append(" at our level");
                    }
                    else if (elev > 0)
                    {
                        sb.AppendFormat(", {0:0} meters above our level", elev);
                    }
                    else
                    {
                        sb.AppendFormat(", {0:0} meters below our level", -elev);
                    }

                    sb.AppendLine();
                }

                wl(sb.ToString());
                return;
            }
        }
Ejemplo n.º 6
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((KnownHeading 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((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);

                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"))
                {
                    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();
                    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((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("Facing object '{0}'", target.Properties.Name);
                Client.Self.Movement.TurnToward(targetPos);
                return;

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