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); }
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); } }
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; } }
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); } } }
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; } }
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; } }