Beispiel #1
0
 private static void GetValue(Traverse __instance)
 {
     if (!__instance.FieldExists() && !__instance.MethodExists() && !__instance.TypeExists())
     {
         Logging.Logger.LogWarning("Traverse.GetValue was called while not pointing at an existing Field, Property, Method or Type. The return value can be unexpected.\n" + new StackTrace());
     }
 }
Beispiel #2
0
 private static void SetValue(Traverse __instance)
 {
     // If method exists it will crash inside traverse so only need to mention the field missing
     if (!__instance.FieldExists() && !__instance.MethodExists())
     {
         Logging.Logger.LogWarning("Traverse.SetValue was called while not pointing at an existing Field or Property. The call will have no effect.\n" + new StackTrace());
     }
 }
        internal static bool IsSelected(UIButton button)
        {
            Panel_Inventory_Examine_MenuItem menuItem = button.GetComponent <Panel_Inventory_Examine_MenuItem>();

            if (menuItem == null)
            {
                return(false);
            }

            Traverse field = Traverse.Create(menuItem).Field("m_Selected");

            return(field.FieldExists() && field.GetValue <bool>());
        }
        public static void Prefix(Creature __instance)
        {
            if (Main.CreatureConfig is null)
            {
                Main.CreatureConfig = new CreatureConfig();
                Main.CreatureConfig.Load();
                IngameMenuHandler.RegisterOnSaveEvent(Main.CreatureConfig.Save);
            }

            if ((!__instance.gameObject?.GetComponent <WaterParkCreature>()?.IsInsideWaterPark() ?? true))
            {
                try
                {
                    string id    = __instance.GetComponent <PrefabIdentifier>().Id;
                    float  scale = 1;
                    if (!Main.CreatureConfig.CreatureSizes.ContainsKey(id))
                    {
                        UnityEngine.Random.InitState(DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second + DateTime.Now.Millisecond);
                        scale = UnityEngine.Random.Range(Main.Config.minsize, Main.Config.maxsize);
                        __instance.SetScale(scale);
                        Main.CreatureConfig.CreatureSizes.Add(__instance.GetComponent <PrefabIdentifier>().Id, scale);
                    }
                    else
                    {
                        scale = Main.CreatureConfig.CreatureSizes[id];
                        __instance.SetScale(scale);
                    }

                    List <CreatureAction> creatureActions = __instance.gameObject.GetComponentsInChildren <CreatureAction>().Where((x) => x.GetType().GetField("swimVelocity") != null)?.ToList() ?? new List <CreatureAction>();

                    scale = scale <1f ? 1f : scale> 5f ? 5f : scale;

                    foreach (CreatureAction creatureAction in creatureActions)
                    {
                        Traverse swimVelocity = Traverse.Create(creatureAction).Field("swimVelocity");
                        if (swimVelocity.FieldExists())
                        {
                            float currentSpeed = swimVelocity.GetValue <float>();
                            swimVelocity.SetValue(currentSpeed * scale);
                        }
                    }
                }
                catch { };
            }
        }
Beispiel #5
0
            public void LoadDataFromXmlCustom(XmlNode xmlRoot)
            {
                XmlAttribute mayRequire = xmlRoot.Attributes[name : "MayRequire"];
                int          index      = mayRequire != null?xmlRoot.Name.LastIndexOf(value : '\"') + 1 : 0;

                DirectXmlCrossRefLoader.RegisterObjectWantsCrossRef(this, nameof(this.hediff), xmlRoot.Name.Substring(index, xmlRoot.Name.Length - index), mayRequire?.Value.ToLower());

                this.path = xmlRoot.FirstChild.Value?.Trim();

                Traverse traverse = Traverse.Create(this);

                foreach (XmlNode xmlRootChildNode in xmlRoot.ChildNodes)
                {
                    Traverse field = traverse.Field(xmlRootChildNode.Name);
                    if (field.FieldExists())
                    {
                        field.SetValue(field.GetValueType().IsGenericType ?
                                       DirectXmlToObject.GetObjectFromXmlMethod(field.GetValueType())(xmlRootChildNode, arg2: false) :
                                       xmlRootChildNode.InnerXml.Trim());
                    }
                }
            }
        void Update()
        {
            // Check if Scene is set to ClassRoomSelect
            if (Manager.Scene.Instance.NowSceneNames[0] == "ClassRoomSelect")
            {
                // Check if classroom scene is currently stored
                if (Utilities.ClassroomScene == null)
                {
                    Utilities.ClassroomScene = Singleton <ActionGame.ClassRoomSelectScene> .Instance;
                }

                // Check if scene is visible, i.e. not currently loading a character
                if (Utilities.ClassroomScene != null && Utilities.ClassroomScene.classRoomList.isVisible)
                {
                    // Get PreviewClassData instance
                    Traverse enterPreview = Traverse.Create(Utilities.ClassroomScene.classRoomList).Field("enterPreview");
                    if (enterPreview.FieldExists())
                    {
                        Utilities.CurrClassData = enterPreview.GetValue <ReactiveProperty <ActionGame.PreviewClassData> >().Value;
                    }

                    // Get current school emblem
                    Outfits.EmblemID = Singleton <Manager.Game> .Instance.saveData.emblemID;

                    // Set GUI visible flag
                    UI.Visible = true;
                }
                else
                {
                    UI.Visible = false;
                }
            }
            else
            {
                // Reset stored classroom scene and disable gui
                Utilities.ClassroomScene = null;
                UI.Visible = false;
            }
        }