private void CmdTp(String[] words) { if (words.Length >= 4) { float x = 0; float y = 0; float z = 0; try { x = float.Parse(words[1].Trim()); y = float.Parse(words[2].Trim()); z = float.Parse(words[3].Trim()); } catch { plugin.SayToUser("Usage: \"/tp 100 100 25\" "); return; } Vector3 go = new Vector3(x, y, z); plugin.SayToUser("Tping to " + go.ToString()); doTp(go); } else { plugin.SayToUser("Usage: \"/tp 100 100 25\" "); } }
private Packet InObjectUpdateHandler(Packet packet, IPEndPoint sim) { string simIP = sim.ToString(); ObjectUpdatePacket ObjectUpdate = (ObjectUpdatePacket)packet; foreach (ObjectUpdatePacket.ObjectDataBlock block in ObjectUpdate.ObjectData) { if (block.PCode == 0x2f) // Avatars only { // If this simulator doesn't exist, create it if (!SharedInfo.Aux_Simulators.ContainsKey(simIP)) { SharedInfo.Aux_Simulators.Add(simIP, new PubComb.Aux_Simulator(simIP)); } Vector3 position = new Vector3(); #region decode position switch (block.ObjectData.Length) { case 76: position = new Vector3(block.ObjectData, 16); break; case 60: position = new Vector3(block.ObjectData, 0); break; case 32: // The data is an array of unsigned shorts position = new Vector3( Utils.UInt16ToFloat(block.ObjectData, 0, -0.5f * 256.0f, 1.5f * 256.0f), Utils.UInt16ToFloat(block.ObjectData, 2, -0.5f * 256.0f, 1.5f * 256.0f), Utils.UInt16ToFloat(block.ObjectData, 4, -256.0f, 3.0f * 256.0f)); break; case 16: // The data is an array of single bytes (8-bit numbers) position = new Vector3( Utils.ByteToFloat(block.ObjectData, 0, -256.0f, 256.0f), Utils.ByteToFloat(block.ObjectData, 1, -256.0f, 256.0f), Utils.ByteToFloat(block.ObjectData, 2, -256.0f, 256.0f)); break; default: plugin.SayToUser("Couldn't decode position, the data was " + block.ObjectData.Length.ToString() + " bytes long."); break; } #endregion string FirstName = null; string LastName = null; #region decode name if (block.NameValue != null) { string[] namevalues = Utils.BytesToString(block.NameValue).Split("\r\n".ToCharArray()); foreach (string line in namevalues) { NameValue namevalue = new NameValue(line); if (namevalue.Value != null) { if (namevalue.Name == "FirstName") { FirstName = Convert.ToString(namevalue.Value); } else if (namevalue.Name == "LastName") { LastName = Convert.ToString(namevalue.Value); } } } } string name = ""; if (FirstName != null) { name += FirstName; } else { name += "(Waiting)"; } name += " "; if (LastName != null) { name += LastName; } else { name += "(Waiting)"; } #endregion PubComb.Aux_Avatar avatar = new PubComb.Aux_Avatar(block.FullID, simIP, block.ID, name, position); if (!SharedInfo.Aux_Simulators[simIP].Avatars.ContainsKey(block.FullID)) { // Add avatar to simulator SharedInfo.Aux_Simulators[simIP].Avatars.Add(block.FullID, avatar); form.AddAvatar(avatar); } else { // Just update the avatar's position SharedInfo.Aux_Simulators[simIP].Avatars[block.FullID].Position = position; form.UpdateAvatar(avatar); } if (avatar.UUID == frame.AgentID) { SharedInfo.AgentName = name; SharedInfo.AvPosition = position; } } } return(packet); }