Exemple #1
0
 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\" ");
     }
 }
Exemple #2
0
        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);
        }