コード例 #1
0
        public static T LoadAsset <T>(AssetBundle assetBundle, string assetPath) where T : Object
        {
            var asset = assetBundle.LoadAsset_Internal(assetPath, Il2CppType.Of <T>()).Cast <T>();

            asset.hideFlags |= HideFlags.DontUnloadUnusedAsset;
            return(asset);
        }
コード例 #2
0
        private static void OnContainerSuccess(ApiContainer container)
        {
            if (container == null)
            {
                return;
            }

            ApiModelListContainer <APIUser> listContainer = container.TryCast <ApiModelListContainer <APIUser> >();

            if (listContainer != null)
            {
                try
                {
                    for (int i = 0; i < listContainer.ResponseList.Count; i++)
                    {
                        cachedUsers[listContainer.ResponseModels.get_Item(i).id] = new UserInfoExtensionsAPIUser(listContainer.ResponseList.get_Item(i));
                    }
                }
                catch (Exception ex)
                {
                    MelonLogger.Error("Failed while caching user from list:\n" + ex.ToString());
                }
            }
            else if (container.Model != null && container.Model.GetIl2CppType() == Il2CppType.Of <APIUser>())
            {
                try
                {
                    cachedUsers[container.Model.id] = new UserInfoExtensionsAPIUser(container.Data);
                }
                catch (Exception ex)
                {
                    MelonLogger.Error("Failed while caching user:\n" + ex.ToString());
                }
            }
        }
コード例 #3
0
        public Il2CppSystem.Object BoxIl2CppObject(object value)
        {
            if (value == null)
            {
                return(null);
            }

            try
            {
                var type = value.GetType();
                if (!type.IsValueType)
                {
                    return(null);
                }

                if (type.IsEnum)
                {
                    return(Il2CppSystem.Enum.Parse(Il2CppType.From(type), value.ToString()));
                }

                if (type.IsPrimitive && AllTypes.TryGetValue($"Il2Cpp{type.FullName}", out Type cppType))
                {
                    return(BoxIl2CppObject(MakeIl2CppPrimitive(cppType, value), cppType));
                }

                return(BoxIl2CppObject(value, type));
            }
            catch (Exception ex)
            {
                ExplorerCore.LogWarning("Exception in BoxIl2CppObject: " + ex);
                return(null);
            }
        }
コード例 #4
0
        public PreloadedBundleContents(AssetBundle bundle)
        {
            StoredThingsParent = new GameObject("ModUiPreloadedBundleContents");
            Object.DontDestroyOnLoad(StoredThingsParent);
            StoredThingsParent.SetActive(false);

            GameObject Load(string str)
            {
                var objectFromBundle = bundle.LoadAsset_Internal(str, Il2CppType.Of <GameObject>()).Cast <GameObject>();
                var newObject        = Object.Instantiate(objectFromBundle, StoredThingsParent.transform);

                newObject.SetActive(true);
                return(newObject.NoUnload());
            }

            BigMenuExpando      = Load("Assets/ModUI/BigMenuSideExpando.prefab");
            SettingsMenuExpando = Load("Assets/ModUI/ModSettingsTopExpando.prefab");
            QuickMenuExpando    = Load("Assets/ModUI/QuickMenuExpandoRoot.prefab");

            QuickMenuButton = Load("Assets/ModUI/BigMenuSideButton.prefab");
            QuickMenuToggle = Load("Assets/ModUI/ToggleButton.prefab");

            SettingsCategory = Load("Assets/ModUI/CategoryElement.prefab");
            SettingsBool     = Load("Assets/ModUI/CheckboxGroup.prefab");
            SettingsText     = Load("Assets/ModUI/TextInputGroup.prefab");
        }
コード例 #5
0
        public static bool GetAbility(uint id, out Il2CppSystem.Type ability)
        {
            try
            {
                if (ExploderConfigDictionary.ContainsKey(id))
                {
                    ability = Il2CppType.Of <ExploderAbility>();
                    return(true);
                }

                if (EMPConfigDictionary.ContainsKey(id))
                {
                    ability = Il2CppType.Of <EMPAbility>();
                    return(true);
                }

                if (ImmortalConfigDictionary.ContainsKey(id))
                {
                    ability = Il2CppType.Of <ImmortalAbility>();
                    return(true);
                }
            }
            catch
            {
                ability = null;
                return(false);
            }

            ability = null;
            return(false);
        }
コード例 #6
0
ファイル: Utils.cs プロジェクト: Screwable/VRChat-Mods
        public static Vector3 GetWorldCameraPosition()
        {
            VRCVrCamera camera = GetVRCVrCamera();
            var         type   = camera.GetIl2CppType();

            if (type == Il2CppType.Of <VRCVrCameraSteam>())
            {
                VRCVrCameraSteam steam      = camera.Cast <VRCVrCameraSteam>();
                Transform        transform1 = steam.field_Private_Transform_0;
                Transform        transform2 = steam.field_Private_Transform_1;
                if (transform1.name == "Camera (eye)")
                {
                    return(transform1.position);
                }
                else if (transform2.name == "Camera (eye)")
                {
                    return(transform2.position);
                }
            }
            else if (type == Il2CppType.Of <VRCVrCameraUnity>())
            {
                VRCVrCameraUnity unity = camera.Cast <VRCVrCameraUnity>();
                return(unity.CameraStereo.transform.position);
            }
            else if (type == Il2CppType.Of <VRCVrCameraWave>())
            {
                VRCVrCameraWave wave = camera.Cast <VRCVrCameraWave>();
                return(wave.transform.position);
            }
            return(camera.transform.parent.TransformPoint(GetLocalCameraPosition()));
        }
コード例 #7
0
        private TypeInfo resolveTypeReference(Il2CppType typeRef)
        {
            TypeInfo underlyingType;

            switch (typeRef.type)
            {
            // Classes defined in the metadata (reference to a TypeDef)
            case Il2CppTypeEnum.IL2CPP_TYPE_CLASS:
            case Il2CppTypeEnum.IL2CPP_TYPE_VALUETYPE:
                underlyingType = TypesByDefinitionIndex[typeRef.datapoint];     // klassIndex
                break;

            // Constructed types
            case Il2CppTypeEnum.IL2CPP_TYPE_GENERICINST:
            case Il2CppTypeEnum.IL2CPP_TYPE_ARRAY:
            case Il2CppTypeEnum.IL2CPP_TYPE_SZARRAY:
            case Il2CppTypeEnum.IL2CPP_TYPE_PTR:

            // Generic type and generic method parameters
            case Il2CppTypeEnum.IL2CPP_TYPE_VAR:
            case Il2CppTypeEnum.IL2CPP_TYPE_MVAR:

                underlyingType = new TypeInfo(this, typeRef);
                break;

            // Primitive types
            default:
                underlyingType = getTypeDefinitionFromTypeEnum(typeRef.type);
                break;
            }

            // Create a reference type if necessary
            return(typeRef.byref ? underlyingType.MakeByRefType() : underlyingType);
        }
コード例 #8
0
        private static Texture2D LoadTexture(string texture)
        {
            var texture2 = _bundle.LoadAsset_Internal(texture, Il2CppType.Of <Texture2D>()).Cast <Texture2D>();

            texture2.hideFlags |= HideFlags.DontUnloadUnusedAsset | HideFlags.HideAndDontSave;
            return(texture2);
        }
コード例 #9
0
        private TypeInfo getNewTypeUsage(Il2CppType usage, MemberTypes memberType)
        {
            TypeInfo underlyingType;

            switch (usage.type)
            {
            case Il2CppTypeEnum.IL2CPP_TYPE_CLASS:
            case Il2CppTypeEnum.IL2CPP_TYPE_VALUETYPE:
                // Classes defined in the metadata
                underlyingType = TypesByDefinitionIndex[usage.datapoint];     // klassIndex
                break;

            case Il2CppTypeEnum.IL2CPP_TYPE_GENERICINST:
            case Il2CppTypeEnum.IL2CPP_TYPE_ARRAY:
            case Il2CppTypeEnum.IL2CPP_TYPE_SZARRAY:
            case Il2CppTypeEnum.IL2CPP_TYPE_PTR:
            case Il2CppTypeEnum.IL2CPP_TYPE_VAR:
            case Il2CppTypeEnum.IL2CPP_TYPE_MVAR:
                // Everything that requires special handling
                underlyingType = new TypeInfo(this, usage, memberType);
                break;

            default:
                // Primitive types
                underlyingType = GetTypeFromTypeEnum(usage.type);
                break;
            }

            // Create a reference type if necessary
            return(usage.byref? underlyingType.MakeByRefType() : underlyingType);
        }
コード例 #10
0
        private static Material LoadMateral(string assetToLoad)
        {
            Material loadedMaterial = Bundle.LoadAsset_Internal(assetToLoad, Il2CppType.Of <Material>()).Cast <Material>();

            loadedMaterial.hideFlags |= HideFlags.DontUnloadUnusedAsset;
            return(loadedMaterial);
        }
コード例 #11
0
        public static void ExportDefaultStyle(string baseDir, StyleEngine styleEngine)
        {
            var textAssetType = Il2CppType.Of <TextAsset>();
            var spriteType    = Il2CppType.Of <Sprite>();
            var audioClipType = Il2CppType.Of <AudioClip>();

            MelonLogger.Msg($"Exporting default VRC skin to {baseDir}");
            foreach (var keyValuePair in styleEngine.field_Private_Dictionary_2_Tuple_2_String_Type_Object_0)
            {
                var basePath = Path.Combine(baseDir, keyValuePair.Key.Item1);

                if (keyValuePair.Key.Item2 == textAssetType)
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(basePath) !);
                    var textAsset = keyValuePair.Value.Cast <TextAsset>();
                    File.WriteAllBytes(basePath + ".txt", textAsset.bytes);
                }
                else if (keyValuePair.Key.Item2 == spriteType)
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(basePath) !);
                    var sprite = keyValuePair.Value.Cast <Sprite>();
                    SpriteSnipperUtil.SaveSpriteAsPngWithMetadata(sprite, basePath + ".png");
                }
                else if (keyValuePair.Key.Item2 == audioClipType)
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(basePath) !);
                    var audioClip = keyValuePair.Value.Cast <AudioClip>();
                    WriteWaveFile(basePath + ".wav", audioClip);
                }
            }
            MelonLogger.Msg($"Export finished");
        }
コード例 #12
0
        public static void ShowQuickMenuPage(QuickMenu quickMenu, Transform pageTransform, string currentMenu = "ShortcutMenu")
        {
            if (currentPageGetter == null)
            {
                var menu  = quickMenu.transform.Find(currentMenu).gameObject;
                var fis   = Il2CppType.Of <QuickMenu>().GetFields(BindingFlags.NonPublic | BindingFlags.Instance).Where(f => f.FieldType == Il2CppType.Of <GameObject>()).ToArray();
                int count = 0;
                foreach (FieldInfo fi in fis)
                {
                    var value = fi.GetValue(quickMenu)?.TryCast <GameObject>();
                    if (value == menu && ++count == 2)
                    {
                        currentPageGetter = fi;
                        break;
                    }
                }
                if (currentPageGetter == null)
                {
                    return;
                }
            }

            currentPageGetter.GetValue(quickMenu).TryCast <GameObject>().SetActive(false);
            quickMenu.transform.Find("QuickMenu_NewElements/_InfoBar").gameObject.SetActive(false);
            var quickMenuContextualDisplay = quickMenu.field_Private_QuickMenuContextualDisplay_0;

            quickMenuContextualDisplay.Method_Public_Void_QuickMenuContext_0(QuickMenuContextualDisplay.QuickMenuContext.NoSelection);
            pageTransform.gameObject.SetActive(true);
            currentPageGetter.SetValue(quickMenu, pageTransform.gameObject);
        }
コード例 #13
0
 public void KillVideos()
 {
     foreach (var vrcUiVideo in Resources.FindObjectsOfTypeAll(Il2CppType.Of <VRCUiVideo>()))
     {
         Object.Destroy(vrcUiVideo);
     }
 }
コード例 #14
0
ファイル: EventInfo.cs プロジェクト: zj831007/Il2CppInspector
        public EventInfo(Il2CppInspector pkg, int eventIndex, TypeInfo declaringType) :
            base(declaringType)
        {
            Definition = pkg.Metadata.Events[eventIndex];
            Index      = eventIndex;
            Name       = pkg.Strings[Definition.nameIndex];

            eventType = pkg.TypeUsages[Definition.typeIndex];
            if ((eventType.attrs & Il2CppConstants.FIELD_ATTRIBUTE_SPECIAL_NAME) == Il2CppConstants.FIELD_ATTRIBUTE_SPECIAL_NAME)
            {
                Attributes |= EventAttributes.SpecialName;
            }

            // NOTE: This relies on methods being added to TypeInfo.DeclaredMethods in the same order they are defined in the Il2Cpp metadata
            // add, remove and raise are method indices from the first method of the declaring type
            if (Definition.add >= 0)
            {
                AddMethod = declaringType.DeclaredMethods[Definition.add];
            }
            if (Definition.remove >= 0)
            {
                RemoveMethod = declaringType.DeclaredMethods[Definition.remove];
            }
            if (Definition.raise >= 0)
            {
                RaiseMethod = declaringType.DeclaredMethods[Definition.raise];
            }
        }
コード例 #15
0
ファイル: HudIcon.cs プロジェクト: gompocp/VRChatMods
        public static void Setup()
        {
            using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("WorldPredownload.gompowpd"))
                using (var tempStream = new MemoryStream((int)stream.Length))
                {
                    stream.CopyTo(tempStream);

                    iconsAssetBundle            = AssetBundle.LoadFromMemory_Internal(tempStream.ToArray(), 0);
                    iconsAssetBundle.hideFlags |= HideFlags.DontUnloadUnusedAsset;
                }

            hudIcon = iconsAssetBundle.LoadAsset_Internal("Assets/DownloadIcon.png", Il2CppType.Of <Sprite>())
                      .Cast <Sprite>();
            hudIcon.hideFlags |= HideFlags.DontUnloadUnusedAsset;
            var Main      = CreateImage("DownloadStatusProgress");
            var Secondary = CreateImage("DownloadStatusTransparent");

            Secondary.color = new Color(1, 1, 1, 0.4f);
            Main.type       = Image.Type.Filled;
            Main.fillMethod = Image.FillMethod.Horizontal;
            Main.fillOrigin = (int)Image.OriginHorizontal.Left;
            Main.fillAmount = 0f;
            Heavy           = Main;
            Fade            = Secondary;
            Disable();
        }
コード例 #16
0
        public override void OnApplicationStart()
        {
            ModPrefs.RegisterCategory(ModCategory, "Mirror Resolution");
            ModPrefs.RegisterPrefInt(ModCategory, MaxResPref, 4096, "Max eye texture size");
            ModPrefs.RegisterPrefInt(ModCategory, MirrorMsaaPref, 0, "Mirror MSAA (0=default)");
            ModPrefs.RegisterPrefBool(ModCategory, AllMirrorsAutoPref, false, "Force auto resolution");

            unsafe
            {
                var methodInfo            = Il2CppType.Of <VRC_MirrorReflection>().GetMethod(nameof(VRC_MirrorReflection.GetReflectionData), BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
                var originalMethodPointer = *(IntPtr *)IL2CPP.il2cpp_method_get_from_reflection(methodInfo.Pointer);
                CompatHook((IntPtr)(&originalMethodPointer), typeof(MirrorResolutionUnlimiterMod).GetMethod(nameof(GetReflectionData), System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic) !.MethodHandle.GetFunctionPointer());
            }

            OnModSettingsApplied();

            if (AppDomain.CurrentDomain.GetAssemblies().Any(it => it.GetName().Name.StartsWith("UIExpansionKit")))
            {
                MelonModLogger.Log("Adding UIExpansionKit buttons");
                typeof(UiExtensionsAddon)
                .GetMethod(nameof(UiExtensionsAddon.Init),
                           System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static) !
                .Invoke(null, new object[0]);
            }
        }
コード例 #17
0
ファイル: GUIUnstrip.cs プロジェクト: enko7/Explorer
        private static Vector2 BeginScrollView_ImplLayout(Vector2 scrollPosition, bool alwaysShowHorizontal, bool alwaysShowVertical,
                                                          GUIStyle horizontalScrollbar, GUIStyle verticalScrollbar, GUIStyle background, params GUILayoutOption[] options)
        {
            var guiscrollGroup = GUILayoutUtility.BeginLayoutGroup(background, null, Il2CppType.Of <GUIScrollGroup>())
                                 .TryCast <GUIScrollGroup>();

            EventType type = Event.current.type;

            if (type == EventType.Layout)
            {
                guiscrollGroup.resetCoords              = true;
                guiscrollGroup.isVertical               = true;
                guiscrollGroup.stretchWidth             = 1;
                guiscrollGroup.stretchHeight            = 1;
                guiscrollGroup.verticalScrollbar        = verticalScrollbar;
                guiscrollGroup.horizontalScrollbar      = horizontalScrollbar;
                guiscrollGroup.needsVerticalScrollbar   = alwaysShowVertical;
                guiscrollGroup.needsHorizontalScrollbar = alwaysShowHorizontal;
                guiscrollGroup.ApplyOptions(options);
            }

            return(BeginScrollView_Impl(guiscrollGroup.rect,
                                        scrollPosition,
                                        new Rect(0f, 0f, guiscrollGroup.clientWidth, guiscrollGroup.clientHeight),
                                        alwaysShowHorizontal,
                                        alwaysShowVertical,
                                        horizontalScrollbar,
                                        verticalScrollbar,
                                        background
                                        ));
        }
コード例 #18
0
        private static void Prefix()
        {
            Logger.Debug("== List of Material that can be used for Materials Parameters ==");

            //TODO: Replace this to AssetShardManager Code
            var fullmats = Resources.FindObjectsOfTypeAll(Il2CppType.Of <Material>());

            foreach (var obj in fullmats)
            {
                var mat        = obj.Cast <Material>();
                var matName    = mat?.name ?? string.Empty;
                var shaderName = mat?.shader?.name ?? string.Empty;

                if (string.IsNullOrEmpty(matName))
                {
                    continue;
                }

                if (!ConfigManager.Current.ModelCustom.CacheAllMaterials)
                {
                    if (!shaderName.Contains("EnemyFlesh"))
                    {
                        continue;
                    }
                }

                MaterialCustom.AddToCache(matName, mat);
                Logger.Debug(matName);
            }

            Logger.Debug("== End of List ==");
        }
コード例 #19
0
        private IEnumerator WaitAndRegisterEmojiButtons()
        {
            while (QuickMenu.prop_QuickMenu_0 == null)
            {
                yield return(null);
            }

            var emojiMenuRoot = QuickMenu.prop_QuickMenu_0.transform.Find("EmojiMenu");

            if (emojiMenuRoot == null)
            {
                MelonLogger.LogError("Emoji menu root not found");
                yield break;
            }

            var emojiMenu = emojiMenuRoot.GetComponent <EmojiMenu>();

            var storeGo = new GameObject("ClonedPageStore");

            storeGo.transform.SetParent(emojiMenu.transform);
            storeGo.SetActive(false);

            for (var index = 0; index < emojiMenu.pages.Count; index++)
            {
                var pageGo = emojiMenu.pages[index];

                var clone = new GameObject($"Page{index}Button", new [] { Il2CppType.Of <RectTransform>() });
                clone.transform.SetParent(storeGo.transform, false);
                var grid = clone.AddComponent <GridLayoutGroup>();
                grid.constraint      = GridLayoutGroup.Constraint.FixedColumnCount;
                grid.cellSize        = new Vector2(33, 33);
                grid.startAxis       = GridLayoutGroup.Axis.Horizontal;
                grid.startCorner     = GridLayoutGroup.Corner.UpperLeft;
                grid.constraintCount = 3;

                foreach (var buttonXformObject in pageGo.transform)
                {
                    var buttonTransform = buttonXformObject.Cast <Transform>();
                    if (!buttonTransform.gameObject.activeSelf)
                    {
                        continue;
                    }

                    var buttonClone = Object.Instantiate(buttonTransform.gameObject, clone.transform, false);
                    CleanStuff(buttonClone);
                }

                var index1 = index;
                ExpansionKitApi.RegisterSimpleMenuButton(ExpandedMenu.EmojiQuickMenu, "", () =>
                {
                    emojiMenu.pages[emojiMenu.field_Private_Int32_0].SetActive(false);
                    pageGo.SetActive(true);
                    emojiMenu.field_Private_Int32_0 = index1;
                }, buttonGo =>
                {
                    Object.Instantiate(clone, buttonGo.transform, false);
                });
            }
        }
コード例 #20
0
        public static void ShowQuickmenuPage(string pagename)
        {
            QuickMenu quickmenu     = GetQuickMenuInstance();
            Transform pageTransform = quickmenu?.transform.Find(pagename);

            if (currentPageGetter == null)
            {
                GameObject shortcutMenu = quickmenu.transform.Find("ShortcutMenu").gameObject;
                if (!shortcutMenu.activeInHierarchy)
                {
                    shortcutMenu = quickmenu.transform.Find("UserInteractMenu").gameObject;
                }


                FieldInfo[] fis   = Il2CppType.Of <QuickMenu>().GetFields(BindingFlags.NonPublic | BindingFlags.Instance).Where((fi) => fi.FieldType == Il2CppType.Of <GameObject>()).ToArray();
                int         count = 0;
                foreach (FieldInfo fi in fis)
                {
                    GameObject value = fi.GetValue(quickmenu)?.TryCast <GameObject>();
                    if (value == shortcutMenu && ++count == 2)
                    {
                        currentPageGetter = fi;
                        break;
                    }
                }
                if (currentPageGetter == null)
                {
                    Console.WriteLine("[QMStuff] Unable to find field currentPage in QuickMenu");
                    return;
                }
            }

            currentPageGetter.GetValue(quickmenu)?.Cast <GameObject>().SetActive(false);

            GameObject infoBar = GetQuickMenuInstance().transform.Find("QuickMenu_NewElements/_InfoBar").gameObject;

            infoBar.SetActive(pagename == "ShortcutMenu");

            QuickMenuContextualDisplay quickmenuContextualDisplay = GetQuickMenuInstance().field_Private_QuickMenuContextualDisplay_0;

            quickmenuContextualDisplay.Method_Public_Void_EnumNPublicSealedvaUnNoToUs7vUsNoUnique_0(QuickMenuContextualDisplay.EnumNPublicSealedvaUnNoToUs7vUsNoUnique.NoSelection);
            //quickmenuContextualDisplay.Method_Public_Nested0_0(QuickMenuContextualDisplay.Nested0.NoSelection);

            pageTransform.gameObject.SetActive(true);

            currentPageGetter.SetValue(quickmenu, pageTransform.gameObject);
            if (pagename == "ShortcutMenu")
            {
                SetIndex(0);
            }
            else if (pagename == "UserInteractMenu")
            {
                SetIndex(3);
            }
            else
            {
                SetIndex(-1);
            }
        }
コード例 #21
0
        private static Texture2D LoadTexture(string Texture)
        { // https://github.com/KortyBoi/VRChat-TeleporterVR/blob/59bdfb200497db665621b519a9ff9c3d1c3f2bc8/Utils/ResourceManager.cs#L32
            Texture2D Texture2 = assetBundleIcons.LoadAsset_Internal(Texture, Il2CppType.Of <Texture2D>()).Cast <Texture2D>();

            Texture2.hideFlags |= HideFlags.DontUnloadUnusedAsset;
            //Texture2.hideFlags = HideFlags.HideAndDontSave;
            return(Texture2);
        }
コード例 #22
0
ファイル: Worker.cs プロジェクト: rfcclub/ModBahuang
        public override T Rework <T>(GameObject template, T marker)
        {
            template.AddComponent(Il2CppType.Of <SpriteRenderer>());
            var renderer = template.GetComponentInChildren <SpriteRenderer>();

            renderer.LoadCustomSprite(AbsolutelyPhysicalPath);

            return(renderer.sprite.Cast <T>());
        }
コード例 #23
0
ファイル: Main.cs プロジェクト: christianacuna/proyecto-qa
 public AssetBundleCreateRequest LoadAssetWithSubAssetsAsync <T>(string name) where T : Object
 {
     if (!UnhollowerSupport.IsGeneratedAssemblyType(typeof(T)))
     {
         throw new System.NullReferenceException("The type must be a Generated Assembly Type.");
     }
     System.IntPtr intptr = LoadAssetWithSubAssetsAsync(name, Il2CppType.Of <T>().Pointer);
     return((intptr != System.IntPtr.Zero) ? new AssetBundleCreateRequest(intptr) : null);
 }
コード例 #24
0
ファイル: Main.cs プロジェクト: christianacuna/proyecto-qa
 public Il2CppReferenceArray <T> LoadAllAssets <T>() where T : Object
 {
     if (!UnhollowerSupport.IsGeneratedAssemblyType(typeof(T)))
     {
         throw new System.NullReferenceException("The type must be a Generated Assembly Type.");
     }
     System.IntPtr intptr = LoadAllAssets(Il2CppType.Of <T>().Pointer);
     return((intptr != System.IntPtr.Zero) ? new Il2CppReferenceArray <T>(intptr) : null);
 }
コード例 #25
0
ファイル: Main.cs プロジェクト: christianacuna/proyecto-qa
 public T LoadAsset <T>(string name) where T : Object
 {
     if (!UnhollowerSupport.IsGeneratedAssemblyType(typeof(T)))
     {
         throw new System.NullReferenceException("The type must be a Generated Assembly Type.");
     }
     System.IntPtr intptr = LoadAsset(name, Il2CppType.Of <T>().Pointer);
     return((intptr != System.IntPtr.Zero) ? UnhollowerSupport.Il2CppObjectPtrToIl2CppObject <T>(intptr) : null);
 }
コード例 #26
0
        private void CheckAutocomplete()
        {
            // Temporary disabling this check in BepInEx Il2Cpp.
#if BIE
#if CPP
#else
            if (GUI.GetNameOfFocusedControl() != INPUT_CONTROL_NAME)
            {
                return;
            }
#endif
#else
            if (GUI.GetNameOfFocusedControl() != INPUT_CONTROL_NAME)
            {
                return;
            }
#endif

#if CPP
            textEditor = GUIUtility.GetStateObject(Il2CppType.Of <TextEditor>(), GUIUtility.keyboardControl).TryCast <TextEditor>();
#else
            textEditor = (TextEditor)GUIUtility.GetStateObject(typeof(TextEditor), GUIUtility.keyboardControl);
#endif

            var input = m_input;

            if (!string.IsNullOrEmpty(input))
            {
                try
                {
                    var splitChars = new[] { ',', ';', '<', '>', '(', ')', '[', ']', '=', '|', '&' };

                    // Credit ManlyMarco
                    // Separate input into parts, grab only the part with cursor in it
                    var cursorIndex = textEditor.cursorIndex;
                    var start       = cursorIndex <= 0 ? 0 : input.LastIndexOfAny(splitChars, cursorIndex - 1) + 1;
                    var end         = cursorIndex <= 0 ? input.Length : input.IndexOfAny(splitChars, cursorIndex - 1);
                    if (end < 0 || end < start)
                    {
                        end = input.Length;
                    }
                    input = input.Substring(start, end - start);
                }
                catch (ArgumentException) { }

                if (!string.IsNullOrEmpty(input) && input != m_prevInput)
                {
                    GetAutocompletes(input);
                }
            }
            else
            {
                ClearAutocompletes();
            }

            m_prevInput = input;
        }
コード例 #27
0
ファイル: Main.cs プロジェクト: nekoclient/NekoClient-ML
        private void IgnoreCollision(bool ignore)
        {
            Object[] colliders = Object.FindObjectsOfType(Il2CppType.Of <Collider>());

            foreach (Object c in colliders)
            {
                Physics.IgnoreCollision(GameObject.FindWithTag("Player").transform.GetComponent(Il2CppType.Of <Collider>()).TryCast <Collider>(), c.TryCast <Collider>(), ignore);
            }
        }
コード例 #28
0
        private static TypeContainer FindType(string name)
        {
            Initialize();

            try
            {
                string @namespace = string.Empty;
                string typeName   = null;

                var lastDot = name.LastIndexOf(".");
                if (lastDot == -1)
                {
                    typeName = name;
                }
                else
                {
                    @namespace = name.Substring(0, lastDot);
                    typeName   = name.Substring(lastDot + 1);
                }

                var ptr = Il2CppUtilities.GetIl2CppClass(@namespace, typeName);

                Type wrapperType = null;
                var  assemblies  = AppDomain.CurrentDomain.GetAssemblies();
                foreach (var assembly in assemblies)
                {
                    try
                    {
                        var type = assembly.GetType(name, false);
                        if (type != null)
                        {
                            wrapperType = type;
                        }
                    }
                    catch
                    {
                        // don't care!
                    }
                }

                if (wrapperType != null && ptr == IntPtr.Zero)
                {
                    XuaLogger.AutoTranslator.Warn("Could not find '" + name + "' in IL2CPP domain even though it could be found in the managed domain.");
                }

                if (wrapperType != null)
                {
                    return(new TypeContainer(ptr != IntPtr.Zero ? Il2CppType.TypeFromPointer(ptr) : null, wrapperType, ptr));
                }
            }
            catch (Exception e)
            {
                XuaLogger.AutoTranslator.Warn(e, "An error occurred while resolving type: " + name);
            }

            return(null);
        }
コード例 #29
0
        public override UnityEngine.Object[] FindObjectsOfTypeAll(Type type)
        {
            var iCall = ICallManager.GetICallUnreliable <d_FindObjectsOfTypeAll>(new[]
            {
                "UnityEngine.Resources::FindObjectsOfTypeAll",
                "UnityEngine.ResourcesAPIInternal::FindObjectsOfTypeAll" // Unity 2020+ updated to this
            });

            return(new Il2CppReferenceArray <UnityEngine.Object>(iCall.Invoke(Il2CppType.From(type).Pointer)));
        }
コード例 #30
0
ファイル: GUIUnstrip.cs プロジェクト: enko7/Explorer
        public static void BeginLayoutDirection(bool vertical, GUIContent content, GUIStyle style, GUILayoutOption[] options)
        {
            var g = BeginLayoutGroup(style, options, Il2CppType.Of <GUILayoutGroup>());

            g.isVertical = vertical;
            if (style != GUIStyle.none || content != GUIContent.none)
            {
                GUI.Box(g.rect, content, style);
            }
        }