private unsafe static IntPtr OurGetInputString()
        {
            string input    = IL2CPP.Il2CppStringToManaged(originalInputStringGetter());
            IntPtr vr_input = IL2CPP.ManagedStringToIl2Cpp(VRKeyboard.GetKeyboardInput() + input);

            return(vr_input);
        }
Beispiel #2
0
        private unsafe static void ChatMsgPatch(IntPtr thisPtr, MarshChatMsg msg)
        {
            string chatStr = IL2CPP.Il2CppStringToManaged(msg.msg.m_data);

            if (!CommandParser.HandleMessage(chatStr))
            {
                ourChatDelegate(thisPtr, msg);
            }
        }
Beispiel #3
0
        private bool TrySetString(IntPtr keyPtr, IntPtr valuePtr)
        {
            myHadChanges = true;

            var key = IL2CPP.Il2CppStringToManaged(keyPtr);

            myPrefs[key] = IL2CPP.Il2CppStringToManaged(valuePtr);
            return(true);
        }
Beispiel #4
0
        private bool TrySetInt(IntPtr keyPtr, int value)
        {
            myHadChanges = true;

            var key = IL2CPP.Il2CppStringToManaged(keyPtr);

            myPrefs[key] = value;
            return(true);
        }
Beispiel #5
0
        private IntPtr GetString(IntPtr keyPtr, IntPtr defaultValuePtr)
        {
            var key = IL2CPP.Il2CppStringToManaged(keyPtr);

            if (myPrefs.TryGetValue(key, out var result))
            {
                if (result is string resultString)
                {
                    return(IL2CPP.ManagedStringToIl2Cpp(resultString));
                }
            }

            return(defaultValuePtr);
        }
Beispiel #6
0
        private static void FadeToPatch(IntPtr instancePtr, IntPtr fadeNamePtr, float fade, IntPtr actionPtr, IntPtr stackPtr)
        {
            if (instancePtr == IntPtr.Zero)
            {
                return;
            }
            origFadeTo(instancePtr, fadeNamePtr, fade, actionPtr, stackPtr);

            if (!IL2CPP.Il2CppStringToManaged(fadeNamePtr).Equals("BlackFade", StringComparison.Ordinal) ||
                !fade.Equals(0f) ||
                RoomManager.field_Internal_Static_ApiWorldInstance_0 == null)
            {
                return;
            }

            MelonCoroutines.Start(Utilities.CheckWorld());
        }
Beispiel #7
0
        private int GetInt(IntPtr keyPtr, int defaultValue)
        {
            var key = IL2CPP.Il2CppStringToManaged(keyPtr);

            if (myPrefs.TryGetValue(key, out var result))
            {
                switch (result)
                {
                case float resultFloat:
                    return((int)resultFloat);

                case int resultInt:
                    return(resultInt);
                }
            }

            return(defaultValue);
        }
Beispiel #8
0
        public static string LayerToName(int layer)
        {
            var iCall = ICallHelper.GetICall <d_LayerToName>("UnityEngine.LayerMask::LayerToName");

            return(IL2CPP.Il2CppStringToManaged(iCall.Invoke(layer)));
        }
Beispiel #9
0
        private static void InstantiateObjectPatch(IntPtr thisPtr, IntPtr objectNamePtr, Vector3 position, Quaternion rotation, int networkId, IntPtr playerPtr)
        {
            try
            {
                ourDelegate(thisPtr, objectNamePtr, position, rotation, networkId, playerPtr);

                if (!AdvancedSafetySettings.HidePortalsFromBlockedUsers &&
                    !AdvancedSafetySettings.HidePortalsFromNonFriends &&
                    !AdvancedSafetySettings.HidePortalsCreatedTooClose || playerPtr == IntPtr.Zero)
                {
                    return;
                }

                var player     = new Player(playerPtr);
                var objectName = IL2CPP.Il2CppStringToManaged(objectNamePtr);

                if (objectName != "Portals/PortalInternalDynamic")
                {
                    return;
                }
                var apiUser = player.prop_APIUser_0;
                if (apiUser == null)
                {
                    return;
                }
                if (APIUser.CurrentUser?.id == apiUser.id)
                {
                    return;
                }

                if (Imports.IsDebugMode())
                {
                    MelonLogger.Log($"User {apiUser.displayName} dropped a portal");
                }

                string denyReason = null;
                if (AdvancedSafetySettings.HidePortalsFromBlockedUsers && IsBlockedEitherWay(apiUser.id))
                {
                    denyReason = $"Disabling portal from ͏blocked user {apiUser.displayName}";
                }
                else if (AdvancedSafetySettings.HidePortalsFromNonFriends && !APIUser.IsFriendsWith(apiUser.id))
                {
                    denyReason = $"Disabling portal from non-friend {apiUser.displayName}";
                }
                else if (AdvancedSafetySettings.HidePortalsCreatedTooClose && VRCPlayer.field_Internal_Static_VRCPlayer_0 != null && Vector3.Distance(position, VRCPlayer.field_Internal_Static_VRCPlayer_0.transform.position) < .5f)
                {
                    denyReason = $"Disabling portal from {apiUser.displayName}/{apiUser.id} because it was dropped too close to local player";
                }

                if (denyReason == null)
                {
                    return;
                }

                var instantiator = new ObjectInstantiator(thisPtr);
                var dict         = instantiator.field_Private_Dictionary_2_Int32_ObjectNPrivateStVeQuGaInStUnique_0;
                if (dict.ContainsKey(networkId))
                {
                    var someStruct = dict[networkId];
                    MelonLogger.Log(denyReason);
                    MelonCoroutines.Start(HideGameObjectAfterDelay(someStruct.field_Public_GameObject_0));
                }
            }
            catch (Exception ex)
            {
                MelonLogger.LogError($"Exception in portal hider patch: {ex}");
            }
        }
Beispiel #10
0
 public unsafe string Get(TOwner owner) => IL2CPP.Il2CppStringToManaged(*(IntPtr *)GetPointer(owner.Pointer));
Beispiel #11
0
        private void DeleteKey(IntPtr keyPtr)
        {
            var key = IL2CPP.Il2CppStringToManaged(keyPtr);

            myPrefs.TryRemove(key, out _);
        }
Beispiel #12
0
        private bool HasKey(IntPtr keyPtr)
        {
            var key = IL2CPP.Il2CppStringToManaged(keyPtr);

            return(myPrefs.ContainsKey(key));
        }