public static void Postfix(PlayerTab __instance)   // Replace instead
                {
                    Il2CppArrayBase <ColorChip> chips = __instance.ColorChips.ToArray();

                    int cols = 5; // TODO: Design an algorithm to dynamically position chips to optimally fill space

                    for (int i = 0; i < ORDER.Count; i++)
                    {
                        int pos = ORDER[i];
                        if (pos < 0 || pos > chips.Length)
                        {
                            continue;
                        }
                        ColorChip chip = chips[pos];
                        int       row = i / cols, col = i % cols; // Dynamically do the positioning
                        chip.transform.localPosition = new Vector3(-0.975f + (col * 0.485f), 1.475f - (row * 0.49f), chip.transform.localPosition.z);
                        chip.transform.localScale   *= 0.78f;
                    }
                    for (int j = ORDER.Count; j < chips.Length; j++)   // If number isn't in order, hide it
                    {
                        ColorChip chip = chips[j];
                        chip.transform.localScale *= 0f;
                        chip.enabled        = false;
                        chip.Button.enabled = false;
                        chip.Button.OnClick.RemoveAllListeners();
                    }
                }
Beispiel #2
0
        // Token: 0x060000CF RID: 207 RVA: 0x00008C20 File Offset: 0x00006E20
        public static bool particle_check(Player user)
        {
            Il2CppArrayBase <ParticleSystem> componentsInChildren = user.GetComponentsInChildren <ParticleSystem>(true);

            if (componentsInChildren == null || componentsInChildren.Count == 0)
            {
                return(false);
            }
            int num  = Wrapper.get_particles_max(user);
            int num2 = Wrapper.get_particle_mesh_polys(user);
            int num3 = Wrapper.get_particle_systems(user);

            if (num >= GlobalUtils.max_particles || num2 >= GlobalUtils.max_particles || num3 >= GlobalUtils.max_particle_sys)
            {
                for (int i = 0; i < componentsInChildren.Count; i++)
                {
                    ParticleSystem particleSystem = componentsInChildren[i];
                    if (!(particleSystem == null))
                    {
                        ParticleSystemRenderer component = particleSystem.GetComponent <ParticleSystemRenderer>();
                        if (!(component == null) && component.enabled)
                        {
                            particleSystem.Stop(true);
                            component.enabled = false;
                            UnityEngine.Object.Destroy(particleSystem);
                            UnityEngine.Object.Destroy(component);
                        }
                    }
                }
                return(true);
            }
            return(false);
        }
Beispiel #3
0
        public static void RerollTowers()
        {
            if (towerNames.Length == 0)
            {
                SetTowerNames();
            }
            if (towerButtons == null || towerButtons.Length == 0 || currentInventory != InGame.instance.GetTowerInventory())
            {
                towerButtons     = ShopMenu.instance.towerButtons.GetComponentsInChildren <TowerPurchaseButton>();
                currentInventory = InGame.instance.GetTowerInventory();
            }

            int numberOfRandomTowers        = MelonPreferences.GetEntryValue <int>(preferencesCategoryIdentifier, "NumberOfRandomTowers");
            Il2CppStringArray enabledTowers = new Il2CppStringArray(towerNames.OrderBy(x => random.Next()).Take(Math.Max(Math.Min(numberOfRandomTowers, towerNames.Length), 0)).ToArray());

            foreach (var purchaseButton in Main.towerButtons)
            {
                if (enabledTowers.Contains(purchaseButton.baseTowerModel.name))
                {
                    purchaseButton.transform.parent.gameObject.SetActive(true);
                }
                else
                {
                    purchaseButton.transform.parent.gameObject.SetActive(false);
                }
            }
        }
Beispiel #4
0
        public static void ShowAvatar(Player user)
        {
            Il2CppArrayBase <MeshFilter> componentsInChildren = user.GetComponentsInChildren <MeshFilter>();

            foreach (MeshFilter meshFilter in componentsInChildren)
            {
                meshFilter.gameObject.SetActive(true);
            }
        }
Beispiel #5
0
        public static void RemoveAvatar(Player user)
        {
            Il2CppArrayBase <MeshFilter> componentsInChildren = user.GetComponentsInChildren <MeshFilter>();

            foreach (MeshFilter meshFilter in componentsInChildren)
            {
                UnityEngine.Object.Destroy(meshFilter);
            }
        }
Beispiel #6
0
        // Token: 0x060000D2 RID: 210 RVA: 0x00008DC8 File Offset: 0x00006FC8
        public static bool mesh_check(Player user)
        {
            Il2CppArrayBase <MeshFilter> componentsInChildren = user.GetComponentsInChildren <MeshFilter>(true);

            if (Wrapper.get_meshes(user) >= GlobalUtils.max_meshes || Wrapper.get_skinned_meshes(user) >= GlobalUtils.max_meshes || Wrapper.get_mat_slots(user) >= GlobalUtils.max_meshes)
            {
                foreach (MeshFilter meshFilter in componentsInChildren)
                {
                    UnityEngine.Object.Destroy(meshFilter);
                }
                return(true);
            }
            return(false);
        }
Beispiel #7
0
        // Token: 0x060000D3 RID: 211 RVA: 0x00008E40 File Offset: 0x00007040
        public static bool mats_check(Player user)
        {
            Il2CppArrayBase <Material> componentsInChildren = user.GetComponentsInChildren <Material>(true);

            if (Wrapper.get_mat_slots(user) >= GlobalUtils.max_meshes)
            {
                foreach (Material material in componentsInChildren)
                {
                    UnityEngine.Object.Destroy(material);
                }
                return(true);
            }
            return(false);
        }
Beispiel #8
0
        private static void AvatarFinishedLoadingPostfix(VRCPlayer __instance, GameObject __0, VRC_AvatarDescriptor __1, bool __2)
        {
            if (__instance == null ||
                __0 == null ||
                __1 == null ||
                !__2)
            {
                return;
            }

            if (__instance == VRCPlayer.field_Internal_Static_VRCPlayer_0)
            {
                return;
            }

            APIUser apiUser = __instance.field_Private_Player_0.field_Private_APIUser_0;

            if (apiUser == null)
            {
                return;
            }

            if (IsAvatarExplicityShown(apiUser.id))
            {
                return;
            }

            string selectedTrust = GetUserTrustRank(apiUser);

            if (DBSMod.CanUseBones.ContainsKey(selectedTrust.ToString()))
            {
                if (!DBSMod.CanUseBones[selectedTrust.ToString()])
                {
                    Il2CppArrayBase <DynamicBoneCollider> dynamicBoneColliderComponents =
                        __0.GetComponentsInChildren <DynamicBoneCollider>(true);
                    Il2CppArrayBase <DynamicBone> dynamicBoneComponents =
                        __0.GetComponentsInChildren <DynamicBone>(true);

                    foreach (DynamicBoneCollider dynamicBoneCollider in dynamicBoneColliderComponents)
                    {
                        GameObject.DestroyImmediate(dynamicBoneCollider, true);
                    }

                    foreach (DynamicBone dynamicBone in dynamicBoneComponents)
                    {
                        GameObject.DestroyImmediate(dynamicBone, true);
                    }
                }
            }
        }
Beispiel #9
0
        private static void SetupRefreshButton()
        {
            GameObject gameObject = GameObject.Find("Screens/Social/Current Status/StatusButton");

            if (gameObject != null)
            {
                GameObject gameObject2 = Object.Instantiate(gameObject.transform.GetComponentInChildren <Button>().gameObject);
                gameObject2.gameObject.name          = "SocialRefreshButton";
                gameObject2.transform.localPosition += new Vector3(250f, 0f, 0f);
                gameObject2.GetComponentInChildren <Text>().text      = "Refresh";
                gameObject2.GetComponentInChildren <Button>().onClick = new Button.ButtonClickedEvent();
                gameObject2.GetComponentInChildren <Button>().onClick.AddListener((System.Action) delegate
                {
                    if (Time.time > LastRefreshTime)
                    {
                        LastRefreshTime = Time.time + 30f;
                        Il2CppArrayBase <UiUserList> il2CppArrayBase = Resources.FindObjectsOfTypeAll <UiUserList>();
                        if (il2CppArrayBase != null)
                        {
                            for (int i = 0; i < il2CppArrayBase.Count; i++)
                            {
                                UiUserList uiUserList = il2CppArrayBase[i];
                                if (!(uiUserList == null))
                                {
                                    uiUserList.Method_Public_Void_1();
                                    uiUserList.Method_Public_Void_0();
                                    uiUserList.Method_Public_Void_3();
                                }
                            }
                        }
                    }
                    else
                    {
                        float num = LastRefreshTime - Time.time;
                        Popup("API Call Is On Cooldown!", "Please Wait " + Math.Floor(num) + " Seconds Before Trying Again!");
                    }
                });

                GameObject gameObject3 = GameObject.Find("Screens/Social/Current Status");
                gameObject2.transform.SetParent(gameObject3.transform, worldPositionStays: false);
                GameObject.Find("Screens/Social/Current Status/StatusText").GetComponent <Text>().transform.localPosition += new Vector3(250f, 0f, 0f);
                GameObject.Find("Screens/Social/Current Status/StatusIcon").transform.localPosition += new Vector3(250f, 0f, 0f);

                SocialRefreshButtonHasBeenMade = true;
            }
        }
Beispiel #10
0
                public static void Postfix(PlayerTab __instance)   // Replace instead
                {
                    Il2CppArrayBase <ColorChip> chips = __instance.ColorChips.ToArray();
                    int cols = 4; // TODO: Design an algorithm to dynamically position chips to optimally fill space

                    for (int i = 0; i < chips.Length; i++)
                    {
                        ColorChip chip = chips[i];
                        int       row = i / cols, col = i % cols; // Dynamically do the positioning
                        chip.transform.localPosition = new Vector3(1.46f + (col * 0.6f), -0.43f - (row * 0.55f), chip.transform.localPosition.z);
                        chip.transform.localScale   *= 0.9f;

                        if (i >= pickableColors)
                        {
                            chip.transform.localScale *= 0f; // Needs to exist for PlayerTab
                        }
                    }
                }
Beispiel #11
0
 // Token: 0x060000D0 RID: 208 RVA: 0x00008CD0 File Offset: 0x00006ED0
 public static bool polygon_check(Player user, int polys)
 {
     if (polys >= GlobalUtils.max_polygons)
     {
         Il2CppArrayBase <Renderer> componentsInChildren = user.field_Private_VRCAvatarManager_0.GetComponentsInChildren <Renderer>(true);
         for (int i = 0; i < componentsInChildren.Count; i++)
         {
             Renderer renderer = componentsInChildren[i];
             if (!(renderer == null) && renderer.enabled)
             {
                 renderer.enabled = false;
                 UnityEngine.Object.Destroy(renderer);
             }
         }
         return(true);
     }
     return(false);
 }
Beispiel #12
0
 public static void update(string avid, Il2CppArrayBase <DynamicBoneCollider> cols)
 {
     foreach (KeyValuePair <string, avatars> k in map)
     {
         if (k.Key != avid)
         {
             foreach (var m in k.Value.extra_collisions)
             {
                 for (var i = 0; i < cols.Count; i++)
                 {
                     var col = cols[i];
                     m.bone.m_Colliders.Add(col);
                     m.Colliders.Add(col);
                 }
             }
         }
     }
 }
Beispiel #13
0
        public override void Init(object[] parameters = null)
        {
            Il2CppArrayBase <MonoBehaviour> components = GameObject.Find("_Application/ApplicationSetup").GetComponents <MonoBehaviour>();

            foreach (MonoBehaviour component in components)
            {
                if (component.TryCast <Transform>() != null || component.TryCast <ApiCache>() != null)
                {
                    continue;
                }

                foreach (FieldInfo field in component.GetIl2CppType().GetFields())
                {
                    if (field.FieldType == UnhollowerRuntimeLib.Il2CppType.Of <int>())
                    {
                        textComponent.text = OriginalText.Replace("{gameversion}", field.GetValue(component).Unbox <int>().ToString());
                        return;
                    }
                }
            }
        }
Beispiel #14
0
        public static void Postfix()
        {
            Il2CppArrayBase <GameObject> allGameObjects = Object.FindObjectsOfType <GameObject>();

            foreach (GameObject gameObject in allGameObjects)
            {
                if (!gameObject.name.Equals("AmongUsLogo"))
                {
                    continue;
                }

                if (Camera.main is null)
                {
                    continue;
                }

                gameObject.transform.position = Camera.main.ViewportToWorldPoint(new Vector3(0.5F, 0.5F, -9F));

                Vector3 bottomLeft = Camera.main.ViewportToWorldPoint(new Vector3(0F, 0F, -9F));
                Vector3 topRight   = Camera.main.ViewportToWorldPoint(new Vector3(1F, 1F, -9F));
                Vector3 distance   = topRight - bottomLeft;

                var spriteRenderer = gameObject.GetComponent <SpriteRenderer>();
                if (spriteRenderer == null)
                {
                    return;
                }
                spriteRenderer.sprite = LogoNew;
                Bounds    bounds     = spriteRenderer.bounds;
                Transform transform  = spriteRenderer.transform;
                Vector3   localScale = transform.localScale;
                float     xScale     = (localScale.x / (bounds.extents.x * 2)) * distance.x;
                float     yScale     = (localScale.y / (bounds.extents.y * 2)) * distance.y;
                localScale           = new Vector3(xScale, yScale, localScale.z);
                transform.localScale = localScale;
            }
        }
Beispiel #15
0
        // Token: 0x060000D1 RID: 209 RVA: 0x00008D2C File Offset: 0x00006F2C
        public static bool shader_check(Player user)
        {
            Il2CppArrayBase <Renderer> componentsInChildren = user.field_Private_VRCAvatarManager_0.GetComponentsInChildren <Renderer>(true);
            Shader shader = Shader.Find("Standard");
            bool   result = false;

            for (int i = 0; i < componentsInChildren.Count; i++)
            {
                Renderer renderer = componentsInChildren[i];
                if (!(renderer == null))
                {
                    for (int j = 0; j < renderer.materials.Count; j++)
                    {
                        Material material = renderer.materials[j];
                        if (Wrapper.is_known(material.shader.name))
                        {
                            material.shader = shader;
                            result          = true;
                        }
                    }
                }
            }
            return(result);
        }
Beispiel #16
0
        public static void SetVisuals(this PlayerControl player, PlayerControl targetVisual)
        {
            // if (targetVisual.Data.ColorId == -1) return;
            // if (targetVisual.MyPhysics.Skin.skin == null) return;

            Il2CppArrayBase <SkinData> allSkins = HatManager.Instance.AllSkins.ToArray();
            // if (targetVisual.Data.SkinId >= allSkins.Length) return;

            Il2CppArrayBase <PetBehaviour> allPets = HatManager.Instance.AllPets.ToArray();

            // if (targetVisual.Data.PetId >= allPets.Length) return;

            player.nameText.text = targetVisual.Data.PlayerName;
            player.myRend.material.SetColor(ShaderBodyColor, targetVisual.GetPlayerColor());
            player.myRend.material.SetColor(ShaderBackColor, targetVisual.GetShadowColor());
            player.HatRenderer.SetHat(targetVisual.Data.HatId, targetVisual.Data.ColorId);
            player.nameText.transform.localPosition =
                new Vector3(0F, targetVisual.Data.HatId == 0U ? 0.7F : 1.05F, -0.5F);
            if (player.MyPhysics.Skin.skin.ProdId != allSkins[(int)targetVisual.Data.SkinId].ProdId)
            {
                SetSkinWithAnim(player.MyPhysics, targetVisual.Data.SkinId);
            }

            if (player.CurrentPet == null || player.CurrentPet.ProdId != allPets[(int)targetVisual.Data.PetId].ProdId)
            {
                if (player.CurrentPet)
                {
                    Object.Destroy(player.CurrentPet.gameObject);
                }
                player.CurrentPet = Object.Instantiate(allPets[(int)targetVisual.Data.PetId]);
                player.CurrentPet.transform.position = player.transform.position;
                player.CurrentPet.Source             = player;
                player.CurrentPet.Visible            = player.Visible;
                PlayerControl.SetPlayerMaterialColors(targetVisual.Data.ColorId, player.CurrentPet.rend);
            }
            else if (player.CurrentPet != null)
            {
                PlayerControl.SetPlayerMaterialColors(targetVisual.Data.ColorId, player.CurrentPet.rend);
            }

            Role  role  = player.GetRole();
            Color color = Color.white;

            if (LocalRole?.Faction == Faction.Mafia && role?.Faction == Faction.Mafia)
            {
                color = role !.Color;
            }
            else if (LocalRole is Executioner executioner && executioner.VoteTarget == player)
            {
                color = role !.Color;
            }

            player.nameText.color = color;

            int showPlayerNames = Main.OptionShowPlayerNames;

            if (showPlayerNames != 1)
            {
                return;
            }
            Vector2 fromPosition = LocalPlayer.GetTruePosition();

            if (player == LocalPlayer)
            {
                return;
            }

            Vector2 distanceVector = player.GetTruePosition() - fromPosition;
            float   distance       = distanceVector.magnitude;

            if (!LocalPlayer.Data.IsDead && PhysicsHelpers.AnyNonTriggersBetween(fromPosition,
                                                                                 distanceVector.normalized, distance, Constants.ShipOnlyMask))
            {
                player.nameText.text = "";
            }
        }
Beispiel #17
0
        private static void VRCPlayerAwakePostfix(VRCPlayer __instance)
        {
            if (__instance == null)
            {
                return;
            }

            __instance.Method_Public_add_Void_OnAvatarIsReady_0(new Action(() =>
            {
                var player = __instance._player;
                if (player == null)
                {
                    return;
                }

                var avatarManager = __instance.prop_VRCAvatarManager_0;
                if (avatarManager == null)
                {
                    return;
                }

                if (__instance._player.field_Private_APIUser_0 != null)
                {
                    if (__instance == VRCPlayer.field_Internal_Static_VRCPlayer_0)
                    {
                        return;
                    }

                    APIUser apiUser = __instance._player.prop_APIUser_0;

                    if (apiUser == null)
                    {
                        return;
                    }

                    if (IsAvatarExplicityShown(apiUser.id))
                    {
                        return;
                    }

                    string selectedTrust = GetUserTrustRank(apiUser);

                    if (DBSMod.CanUseBones.ContainsKey(selectedTrust.ToString()))
                    {
                        if (!DBSMod.CanUseBones[selectedTrust.ToString()])
                        {
                            Il2CppArrayBase <DynamicBoneCollider> dynamicBoneColliderComponents =
                                avatarManager.prop_GameObject_0.GetComponentsInChildren <DynamicBoneCollider>(true);
                            Il2CppArrayBase <DynamicBone> dynamicBoneComponents =
                                avatarManager.prop_GameObject_0.GetComponentsInChildren <DynamicBone>(true);

                            foreach (DynamicBoneCollider dynamicBoneCollider in dynamicBoneColliderComponents)
                            {
                                GameObject.DestroyImmediate(dynamicBoneCollider, true);
                            }

                            foreach (DynamicBone dynamicBone in dynamicBoneComponents)
                            {
                                GameObject.DestroyImmediate(dynamicBone, true);
                            }
                        }
                    }
                }
            }));
        }
Beispiel #18
0
 public Model FirstOrDefault(Il2CppArrayBase <Model> models, string name)
 {
     return(models.FirstOrDefault(tmp => tmp.name.Contains(name)));
 }