Example #1
0
 public void Set(OutfitCategories categories, List <WorldType> worldTypes, OutfitCategoriesExtended extended, CASAgeGenderFlags age, CASAgeGenderFlags gender, CASAgeGenderFlags species)
 {
     mCategories = categories;
     mExtended   = extended;
     mAge        = age;
     mGender     = gender;
     mSpecies    = species;
     mWorldTypes = worldTypes;
 }
Example #2
0
        public bool Import(Persistence.Lookup settings)
        {
            mAge = settings.GetEnum <CASAgeGenderFlags>("Age", CASAgeGenderFlags.None);

            mGender = settings.GetEnum <CASAgeGenderFlags>("Gender", CASAgeGenderFlags.None);

            mSpecies = settings.GetEnum <CASAgeGenderFlags>("Species", CASAgeGenderFlags.None);

            mCategories = settings.GetEnum <OutfitCategories>("Categories", OutfitCategories.None);

            mExtended = settings.GetEnum <OutfitCategoriesExtended>("Extended", (OutfitCategoriesExtended)0x0);

            mWorldTypes = new ToWorldType().Convert(settings.GetString("WorldTypes"));

            return(true);
        }
Example #3
0
        public static InvalidPartBase.Reason Allow(CASParts.Wrapper part, CASAgeGenderFlags age, CASAgeGenderFlags gender, CASAgeGenderFlags species, bool maternity, OutfitCategories category)
        {
            OutfitCategoriesExtended extended = (OutfitCategoriesExtended)0;

            if ((part.ExtendedCategory & OutfitCategoriesExtended.IsHat) == OutfitCategoriesExtended.IsHat)
            {
                extended |= OutfitCategoriesExtended.IsHat;
            }

            if (maternity)
            {
                extended |= OutfitCategoriesExtended.ValidForMaternity;
            }

            if (species == CASAgeGenderFlags.Human)
            {
                switch (part.BodyType)
                {
                case BodyTypes.FullBody:
                case BodyTypes.LowerBody:
                case BodyTypes.UpperBody:
                case BodyTypes.Shoes:
                case BodyTypes.Hair:
                    switch (age)
                    {
                    case CASAgeGenderFlags.Baby:
                    case CASAgeGenderFlags.Toddler:
                    case CASAgeGenderFlags.Child:
                        if (part.Age != age)
                        {
                            return(InvalidPartBase.Reason.ImproperAge);
                        }
                        break;

                    default:
                        if ((part.Age & (CASAgeGenderFlags.Baby | CASAgeGenderFlags.Toddler | CASAgeGenderFlags.Child)) != CASAgeGenderFlags.None)
                        {
                            return(InvalidPartBase.Reason.ImproperAge);
                        }
                        break;
                    }
                    break;
                }
            }

            InvalidPartBase.Reason reason = InvalidPartBase.Reason.None;

            if ((sValidPartsByKey.Count > 0) || (sValidPartsByType.Count > 0))
            {
                List <InvalidPartBase> tests;
                if (sValidPartsByKey.TryGetValue(part.Key, out tests))
                {
                    foreach (InvalidPartBase test in tests)
                    {
                        if (test.Allow(age, gender, species, category, extended, out reason))
                        {
                            return(InvalidPartBase.Reason.None);
                        }
                    }
                }

                if (sValidPartsByType.TryGetValue(part.BodyType, out tests))
                {
                    foreach (InvalidPartBase test in tests)
                    {
                        if (test.Allow(age, gender, species, category, extended, out reason))
                        {
                            return(InvalidPartBase.Reason.None);
                        }
                    }
                }

                return(InvalidPartBase.Reason.ValidFail);
            }
            else
            {
                List <InvalidPartBase> tests;
                if (sInvalidPartsByKey.TryGetValue(part.Key, out tests))
                {
                    foreach (InvalidPartBase test in tests)
                    {
                        if (!test.Allow(age, gender, species, category, extended, out reason))
                        {
                            return(reason);
                        }
                    }
                }

                if (sInvalidPartsByType.TryGetValue(part.BodyType, out tests))
                {
                    foreach (InvalidPartBase test in tests)
                    {
                        if (!test.Allow(age, gender, species, category, extended, out reason))
                        {
                            return(reason);
                        }
                    }
                }

                return(InvalidPartBase.Reason.None);
            }
        }
Example #4
0
        protected static void ParseParts <TYPE>(string suffix, Dictionary <ResourceKey, List <InvalidPartBase> > partsByKey, Dictionary <BodyTypes, List <InvalidPartBase> > partsByType)
            where TYPE : InvalidPartBase, new()
        {
            partsByKey.Clear();
            partsByType.Clear();

            BooterLogger.AddTrace(suffix + ":OnPreLoad");

            string name = VersionStamp.sNamespace + "." + suffix;

            XmlDbData data = null;

            try
            {
                data = XmlDbData.ReadData(name);
                if ((data == null) || (data.Tables == null))
                {
                    BooterLogger.AddTrace(name + " Missing");
                    return;
                }
            }
            catch (Exception e)
            {
                BooterLogger.AddTrace(name + " Formatting Error");

                Common.Exception(name, e);
                return;
            }

            XmlDbTable table = data.Tables[suffix];

            if ((table != null) && (table.Rows != null))
            {
                Dictionary <ResourceKey, bool> allParts = new Dictionary <ResourceKey, bool>();

                BooterLogger.AddTrace(name + " PartSearch");

                PartSearch search = new PartSearch();

                foreach (CASPart part in search)
                {
                    if (allParts.ContainsKey(part.Key))
                    {
                        continue;
                    }

                    allParts.Add(part.Key, true);
                }

                search.Reset();

                BooterLogger.AddTrace(name + " Rows");

                foreach (XmlDbRow row in table.Rows)
                {
                    try
                    {
                        OutfitCategories categories;
                        if (!row.TryGetEnum <OutfitCategories>("Categories", out categories, OutfitCategories.All))
                        {
                            BooterLogger.AddError(suffix + " Unknown Categories: " + row.GetString("Categories"));
                            continue;
                        }

                        /*
                         * ProductVersion productVersion = ProductVersion.Undefined;
                         * if (row.Exists("ProductVersion"))
                         * {
                         *  if (!row.TryGetEnum<ProductVersion>(row["ProductVersion"], out productVersion, ProductVersion.Undefined))
                         *  {
                         *      BooterLogger.AddError(suffix + " Unknown WorldTypes: " + row.GetString("WorldTypes"));
                         *      continue;
                         *  }
                         * }
                         */
                        List <WorldType> worldTypes = new List <WorldType>();
                        if (row.Exists("WorldTypes"))
                        {
                            if (!ParserFunctions.TryParseCommaSeparatedList <WorldType>(row["WorldTypes"], out worldTypes, WorldType.Undefined))
                            {
                                BooterLogger.AddError(suffix + " Unknown WorldTypes: " + row.GetString("WorldTypes"));
                                continue;
                            }
                        }

                        OutfitCategoriesExtended extended = OutfitCategoriesExtended.ValidForRandom;
                        if (row.Exists("Extended"))
                        {
                            if (!row.TryGetEnum <OutfitCategoriesExtended>("Extended", out extended, OutfitCategoriesExtended.ValidForRandom))
                            {
                                BooterLogger.AddError(suffix + " Unknown Extended: " + row.GetString("Extended"));
                                continue;
                            }
                        }

                        CASAgeGenderFlags age;
                        if (!row.TryGetEnum <CASAgeGenderFlags>("Age", out age, CASAgeGenderFlags.AgeMask))
                        {
                            BooterLogger.AddError(suffix + " Unknown Age: " + row.GetString("Age"));
                            continue;
                        }

                        CASAgeGenderFlags gender;
                        if (!row.TryGetEnum <CASAgeGenderFlags>("Gender", out gender, CASAgeGenderFlags.GenderMask))
                        {
                            BooterLogger.AddError(suffix + " Unknown Gender: " + row.GetString("Gender"));
                            continue;
                        }

                        CASAgeGenderFlags species = CASAgeGenderFlags.Human;

                        if (row.Exists("Species"))
                        {
                            if (!row.TryGetEnum <CASAgeGenderFlags>("Species", out species, CASAgeGenderFlags.Human))
                            {
                                BooterLogger.AddError(suffix + " Unknown Species: " + row.GetString("Species"));
                                continue;
                            }
                        }

                        BodyTypes type = BodyTypes.None;

                        if (!string.IsNullOrEmpty(row.GetString("BodyType")))
                        {
                            if (!row.TryGetEnum <BodyTypes>("BodyType", out type, BodyTypes.None))
                            {
                                BooterLogger.AddError(suffix + " Unknown BodyTypes: " + row.GetString("BodyType"));
                                continue;
                            }
                        }

                        ResourceKey key = ResourceKey.kInvalidResourceKey;

                        List <InvalidPartBase> tests = null;

                        if (type == BodyTypes.None)
                        {
                            ulong instance = row.GetUlong("Instance");
                            if (instance == 0)
                            {
                                BooterLogger.AddError(suffix + " Invalid Instance " + row.GetString("Key"));
                                continue;
                            }

                            uint group = row.GetUInt("Group");

                            key = new ResourceKey(instance, 0x034aeecb, group);

                            if (!allParts.ContainsKey(key))
                            {
                                BooterLogger.AddError(suffix + " Key not found: " + key);
                                continue;
                            }

                            if (!partsByKey.TryGetValue(key, out tests))
                            {
                                tests = new List <InvalidPartBase>();
                                partsByKey.Add(key, tests);
                            }
                        }
                        else
                        {
                            if (!partsByType.TryGetValue(type, out tests))
                            {
                                tests = new List <InvalidPartBase>();
                                partsByType.Add(type, tests);
                            }
                        }

                        TYPE newPart = new TYPE();
                        newPart.Set(categories, worldTypes, extended, age, gender, species);

                        tests.Add(newPart);
                    }
                    catch (Exception e)
                    {
                        string setDump = suffix;
                        foreach (string column in row.ColumnNames)
                        {
                            setDump += Common.NewLine + column + " = " + row.GetString(column);
                        }

                        Common.Exception(setDump, e);
                    }
                }

                BooterLogger.AddTrace(suffix + " Parts By Key Added: " + partsByKey.Count);
                BooterLogger.AddTrace(suffix + " Parts By Type Added: " + partsByType.Count);
            }
        }
Example #5
0
        public bool Allow(CASAgeGenderFlags age, CASAgeGenderFlags gender, CASAgeGenderFlags species, OutfitCategories category, OutfitCategoriesExtended extended, out Reason reason)
        {
            if (mWorldTypes.Count > 0)
            {
                if (!mWorldTypes.Contains(GameUtils.GetCurrentWorldType()))
                {
                    reason = Reason.World;
                    return(true);
                }
            }

            if ((mAge & age) != age)
            {
                reason = Reason.Age;
                return(true);
            }

            if ((mGender & gender) != gender)
            {
                reason = Reason.Gender;
                return(true);
            }

            if (mSpecies != species)
            {
                reason = Reason.Species;
                return(true);
            }

            if ((mCategories & category) != category)
            {
                reason = Reason.Category;
                return(true);
            }

            if (mExtended != OutfitCategoriesExtended.ValidForRandom)
            {
                if ((mExtended & extended) != mExtended)
                {
                    reason = Reason.Extended;
                    return(true);
                }
            }

            reason = Reason.TuningMatch;
            return(false);
        }