private void acceptInput0(string verb, Parser parser) { String[] args = parser.GetProperty("to"); string ToS = Parser.Rejoin(args, 0); if (String.IsNullOrEmpty(ToS)) { ToS = parser.str; } int argUsed; if (ToS == "home") { Client.Self.GoHome(); AddSuccess("teleporting home"); return; } SimPosition pos = WorldSystem.GetVector(args, out argUsed); if (argUsed > 0) { Vector3d global = pos.GlobalPosition; WriteLine("Teleporting to " + pos + "..."); float x, y; TheSimAvatar.StopMoving(); bool res = Client.Self.Teleport( SimRegion.GlobalPosToRegionHandle((float)global.X, (float)global.Y, out x, out y), pos.SimPosition, pos.SimPosition); if (res) { AddSuccess("Teleported to " + pos); } else { Failure("Teleport Failed to " + pos); } return; } char[] splitchar = null; if (ToS.Contains("/")) { splitchar = new char[] { '/' }; } string[] tokens = ToS.Split(splitchar); if (tokens.Length == 0) { WriteLine("Provide somewhere to teleport to."); } else { Vector3 coords = new Vector3(128, 128, 40); string simName = ""; //CurSim.Name; bool ifCoordinates = false; if (tokens.Length >= 3) { try { coords.X = float.Parse(tokens[tokens.Length - 3]); coords.Y = float.Parse(tokens[tokens.Length - 2]); coords.Z = float.Parse(tokens[tokens.Length - 1]); ifCoordinates = true; } catch (Exception e) { } } if (!ifCoordinates) { for (int i = 0; i < tokens.Length; i++) { simName += tokens[i] + " "; } simName = simName.Trim(); } else { for (int i = 0; i < tokens.Length - 3; i++) { simName += tokens[i] + " "; } simName = simName.Trim(); } { if (String.IsNullOrEmpty(simName)) { simName = Client.Network.CurrentSim.Name; } TeleportFinished.Reset(); Client.Self.TeleportProgress += On_Teleport; WriteLine("Trying to teleport to " + simName + " " + coords); Client.Self.Teleport(simName, coords); // wait 30 seconds if (!TeleportFinished.WaitOne(30000, false)) { Client.Self.TeleportProgress -= On_Teleport; WriteLine("Timeout on teleport to " + simName + " " + coords); } } } }