Exemple #1
0
        /// <summary>
        /// Converts byte[] data from a data transfer into a bodypart class
        /// </summary>
        /// <returns></returns>
        internal void UpdateFromAssetData()
        {
            if (AssetData == null || AssetData.Length == 0)
            {
                return;
            }

            string wearableData = Helpers.FieldToUTF8String(this._AssetData);

            int version = -1;
            int n       = -1;

            try
            {
                n            = wearableData.IndexOf('\n');
                version      = Int32.Parse(wearableData.Substring(19, n - 18));
                wearableData = wearableData.Remove(0, n);

                if (version != 22)
                {
                    Console.WriteLine("** WARNING ** : Wearable asset has unrecognized version " + version);
                    return;
                }

                n            = wearableData.IndexOf('\n');
                Name         = wearableData.Substring(0, n);
                wearableData = wearableData.Remove(0, n);

                n            = wearableData.IndexOf('\n');
                Description  = wearableData.Substring(0, n);
                wearableData = wearableData.Remove(0, n);

                // Split in to an upper and lower half
                string[] parts = wearableData.Split(new string[] { "parameters" }, StringSplitOptions.None);
                parts[1] = "parameters" + parts[1];

                // Parse the upper half
                string[] lines = parts[0].Split('\n');
                foreach (string thisline in lines)
                {
                    string   line   = thisline.Trim();
                    string[] fields = line.Split('\t');

                    if (fields.Length == 2)
                    {
                        if (fields[0] == "creator_mask")
                        {
                            // Deprecated, apply this as the base mask
                            _Permission_Base_Mask = UInt32.Parse(fields[1], System.Globalization.NumberStyles.HexNumber);
                        }
                        else if (fields[0] == "base_mask")
                        {
                            _Permission_Base_Mask = UInt32.Parse(fields[1], System.Globalization.NumberStyles.HexNumber);
                        }
                        else if (fields[0] == "owner_mask")
                        {
                            _Permission_Owner_Mask = UInt32.Parse(fields[1], System.Globalization.NumberStyles.HexNumber);
                        }
                        else if (fields[0] == "group_mask")
                        {
                            _Permission_Group_Mask = UInt32.Parse(fields[1], System.Globalization.NumberStyles.HexNumber);
                        }
                        else if (fields[0] == "everyone_mask")
                        {
                            _Permission_Everyone_Mask = UInt32.Parse(fields[1], System.Globalization.NumberStyles.HexNumber);
                        }
                        else if (fields[0] == "next_owner_mask")
                        {
                            _Permission_Next_Owner_Mask = UInt32.Parse(fields[1], System.Globalization.NumberStyles.HexNumber);
                        }
                        else if (fields[0] == "creator_id")
                        {
                            _Creator_ID = new LLUUID(fields[1]);
                        }
                        else if (fields[0] == "owner_id")
                        {
                            _Owner_ID = new LLUUID(fields[1]);
                        }
                        else if (fields[0] == "last_owner_id")
                        {
                            _Last_Owner_ID = new LLUUID(fields[1]);
                        }
                        else if (fields[0] == "group_id")
                        {
                            _Group_ID = new LLUUID(fields[1]);
                        }
                        else if (fields[0] == "group_owned")
                        {
                            _Group_Owned = (Int32.Parse(fields[1]) != 0);
                        }
                        else if (fields[0] == "sale_type")
                        {
                            for (int i = 0; i < _ForSaleNames.Length; i++)
                            {
                                if (fields[1] == _ForSaleNames[i])
                                {
                                    _Sale = (_ForSale)i;
                                    break;
                                }
                            }
                        }
                        else if (fields[0] == "sale_price")
                        {
                            _Sale_Price = UInt32.Parse(fields[1]);
                        }
                        else if (fields[0] == "perm_mask")
                        {
                            Console.WriteLine("** WARNING ** : Wearable asset has deprecated perm_mask field, ignoring");
                        }
                    }
                    else if (line.StartsWith("type "))
                    {
                        AppearanceLayer = (AppearanceLayerType)Int32.Parse(line.Substring(5));
                        break;
                    }
                }

                // Break up the lower half in to parameters and textures
                string[] lowerparts = parts[1].Split(new string[] { "textures" }, StringSplitOptions.None);
                lowerparts[1] = "textures" + lowerparts[1];

                // Parse the parameters
                lines = lowerparts[0].Split('\n');
                foreach (string line in lines)
                {
                    string[] fields = line.Split(' ');

                    int id;
                    if (Int32.TryParse(fields[0], out id) == false)
                    {
                        continue; // Not interested in this line
                    }

                    float weight = 0.0f;
                    Single.TryParse(fields[1], System.Globalization.NumberStyles.Float,
                                    Helpers.EnUsCulture.NumberFormat, out weight);
                    _Parameters[id] = weight;
                }

                // Parse the textures
                lines = lowerparts[1].Split('\n');
                foreach (string line in lines)
                {
                    string[] fields = line.Split(' ');

                    uint id;
                    if (UInt32.TryParse(fields[0], out id) == false)
                    {
                        continue; // Not interested in this line
                    }

                    LLUUID texture;

                    if (LLUUID.TryParse(fields[1], out texture) == false)
                    {
                        continue; // if it won't parse, ignore and continue
                    }

                    _Textures[id] = texture;
                }

                return;
            }
            catch (Exception e)
            {
                Console.WriteLine("** WARNING **", "Failed to parse wearable asset: " + e.ToString());
            }

            return;
        }
Exemple #2
0
        /// <summary>
        /// Converts byte[] data from a data transfer into a bodypart class
        /// </summary>
        /// <returns></returns>
        internal void UpdateFromAssetData()
        {
            if ( AssetData == null || AssetData.Length == 0)
            {
                return;
            }

            string wearableData = Helpers.FieldToUTF8String(this._AssetData);

            int version = -1;
            int n = -1;

            try
            {
                n = wearableData.IndexOf('\n');
                version = Int32.Parse(wearableData.Substring(19, n - 18));
                wearableData = wearableData.Remove(0, n);

                if (version != 22)
                {
                    Console.WriteLine("** WARNING ** : Wearable asset has unrecognized version " + version);
                    return;
                }

                n = wearableData.IndexOf('\n');
                Name = wearableData.Substring(0, n);
                wearableData = wearableData.Remove(0, n);

                n = wearableData.IndexOf('\n');
                Description = wearableData.Substring(0, n);
                wearableData = wearableData.Remove(0, n);

                // Split in to an upper and lower half
                string[] parts = wearableData.Split(new string[] { "parameters" }, StringSplitOptions.None);
                parts[1] = "parameters" + parts[1];

                // Parse the upper half
                string[] lines = parts[0].Split('\n');
                foreach (string thisline in lines)
                {
                    string line = thisline.Trim();
                    string[] fields = line.Split('\t');

                    if (fields.Length == 2)
                    {
                        if (fields[0] == "creator_mask")
                        {
                            // Deprecated, apply this as the base mask
                            _Permission_Base_Mask = UInt32.Parse(fields[1], System.Globalization.NumberStyles.HexNumber);
                        }
                        else if (fields[0] == "base_mask")
                        {
                            _Permission_Base_Mask = UInt32.Parse(fields[1], System.Globalization.NumberStyles.HexNumber);
                        }
                        else if (fields[0] == "owner_mask")
                        {
                            _Permission_Owner_Mask = UInt32.Parse(fields[1], System.Globalization.NumberStyles.HexNumber);
                        }
                        else if (fields[0] == "group_mask")
                        {
                            _Permission_Group_Mask = UInt32.Parse(fields[1], System.Globalization.NumberStyles.HexNumber);
                        }
                        else if (fields[0] == "everyone_mask")
                        {
                            _Permission_Everyone_Mask = UInt32.Parse(fields[1], System.Globalization.NumberStyles.HexNumber);
                        }
                        else if (fields[0] == "next_owner_mask")
                        {
                            _Permission_Next_Owner_Mask = UInt32.Parse(fields[1], System.Globalization.NumberStyles.HexNumber);
                        }
                        else if (fields[0] == "creator_id")
                        {
                            _Creator_ID = new LLUUID(fields[1]);
                        }
                        else if (fields[0] == "owner_id")
                        {
                            _Owner_ID = new LLUUID(fields[1]);
                        }
                        else if (fields[0] == "last_owner_id")
                        {
                            _Last_Owner_ID = new LLUUID(fields[1]);
                        }
                        else if (fields[0] == "group_id")
                        {
                            _Group_ID = new LLUUID(fields[1]);
                        }
                        else if (fields[0] == "group_owned")
                        {
                            
                            _Group_Owned = (Int32.Parse(fields[1]) != 0);
                        }
                        else if (fields[0] == "sale_type")
                        {
                            for (int i = 0; i < _ForSaleNames.Length; i++)
                            {
                                if (fields[1] == _ForSaleNames[i])
                                {
                                    _Sale = (_ForSale)i;
                                    break;
                                }
                            }
                        }
                        else if (fields[0] == "sale_price")
                        {
                            _Sale_Price = UInt32.Parse(fields[1]);
                        }
                        else if (fields[0] == "perm_mask")
                        {
                            Console.WriteLine("** WARNING ** : Wearable asset has deprecated perm_mask field, ignoring");
                        }
                    }
                    else if (line.StartsWith("type "))
                    {
                        AppearanceLayer = (AppearanceLayerType)Int32.Parse(line.Substring(5));
                        break;
                    }
                }

                // Break up the lower half in to parameters and textures
                string[] lowerparts = parts[1].Split(new string[] { "textures" }, StringSplitOptions.None);
                lowerparts[1] = "textures" + lowerparts[1];

                // Parse the parameters
                lines = lowerparts[0].Split('\n');
                foreach (string line in lines)
                {
                    string[] fields = line.Split(' ');

                    int id;
                    if( Int32.TryParse(fields[0], out id) == false )
                    {
                        continue; // Not interested in this line
                    }

                    float weight = 0.0f;
                    Single.TryParse(fields[1], System.Globalization.NumberStyles.Float,
                        Helpers.EnUsCulture.NumberFormat, out weight);
                    _Parameters[id] = weight;
                }

                // Parse the textures
                lines = lowerparts[1].Split('\n');
                foreach (string line in lines)
                {
                    string[] fields = line.Split(' ');

                    uint id;
                    if (UInt32.TryParse(fields[0], out id) == false)
                    {
                        continue; // Not interested in this line
                    }

                    LLUUID texture;
                    
                    if( LLUUID.TryParse(fields[1], out texture) == false )
                    {
                        continue; // if it won't parse, ignore and continue
                    }

                    _Textures[id] = texture;
                }

                return;
            }
            catch (Exception e)
            {
                Console.WriteLine("** WARNING **", "Failed to parse wearable asset: " + e.ToString());
            }

            return;
        }