public static void AimAtPos(Vector3 pos)
            {
                Vector2 rotation    = Cons.Main._localPlayer.MovementContext.Rotation;
                Vector3 b           = Raycast.GetHandsPos();
                Vector3 eulerAngles = Quaternion.LookRotation((pos - b).normalized).eulerAngles;

                if (eulerAngles.x > 180f)
                {
                    eulerAngles.x -= 360f;
                }
                Cons.Main._localPlayer.MovementContext.Rotation = new Vector2(eulerAngles.y, eulerAngles.x);
            }
        private void Update()
        {
            try
            {
                Cons.Main.G_Scene.SaveScene();
            }
            catch (Exception e)
            {
                ErrorHandler.Catch("SaveScene", e);
            }
            try
            {
                FUNC.Update.Hotkeys();
            }
            catch (Exception e)
            {
                ErrorHandler.Catch("Hotkeys", e);
            }
            try
            {
                FUNC.Update.Buttons();
            }
            catch (Exception e)
            {
                ErrorHandler.Catch("Buttons", e);
            }
            // make sure scene is map scene and is loaded and ready
            if (Cons.Main.G_Scene.isInMatch() && Cons.Main.G_Scene.isActiveAndLoaded() && !MonoBehaviourSingleton <PreloaderUI> .Instance.IsBackgroundBlackActive)
            {
                if (Cons.Bools.ChangeSessionID)
                {
                    if (SessID_timer < Time.time)
                    {
                        MonoBehaviourSingleton <PreloaderUI> .Instance.SetSessionId("NotForSale"); // use this for memes ;)

                        SessID_timer = Time.time + 1f;
                    }
                }
                else
                {
                    if (Cons.Bools.StreamerMode)
                    {
                        MonoBehaviourSingleton <PreloaderUI> .Instance.SetStreamMode(true); // this should disable this stupid text ;)
                    }
                    else
                    {
                        // MonoBehaviourSingleton<PreloaderUI>.Instance.SetStreamMode(false); // this will not work cause of braindead BSG coders
                    }
                }
                if (Cons.Bools.NoVisorScreen)
                {
                    if (Camera.main != null)
                    {
                        Camera.main.GetComponent <VisorEffect>().Intensity = 0f;
                        Camera.main.GetComponent <VisorEffect>().enabled   = true;
                    }
                }

                // delay start of script for 20 seconds on start of match cause match is starting way before deploy is displaying - it will cause less errors displaying
                // lower time from 20f if its holdup too long
                if (timestamp == 0f)
                {
                    timestamp = Time.time + delay;
                }

                if (Time.time > timestamp)
                {
                    if (Cons.Main._GameWorld == null)
                    {
                        //done only once on start of each map
                        try
                        {
                            Cons.Main._GameWorld = FindObjectOfType <GameWorld>();
                        }
                        catch (Exception e)
                        {
                            ErrorHandler.Catch("Get_GameWorld", e);
                        }
                    }
                    else
                    {
                        // LiquidAce and his idea of grabbing data directly from GameWorld cause its better and less retarded - Thanks Mate
                        #region Doors

                        /*if (Cons.Bools.Draw_Doors)
                         * {
                         *  Doors.Update.Doors();
                         * }*/
                        #endregion
                        #region Players
                        if (Cons.Bools.Draw_ESP)
                        {
                            /* make sure to not call it all the time but only on ESP Enabled
                             * it creates list of alive objects (which is propably only alive objects but i check it anyway here)
                             * also it creates class with players count in diffrent distances between you
                             */
                            E5P.Players.Update.PlayerList();
                        }
                        #endregion
                        #region Grenades
                        if (Cons.Bools.Draw_Grenades)
                        {
                            /* Grenade scanner - scans for grenades if this function is enabled
                             * also added as much RAM free functions as possible
                             */
                            E5P.Throwables.Update.ThrowableList();
                        }
                        #endregion
                        #region Corpses
                        if (Cons.Bools.Draw_Corpses)
                        {
                            /* Corspes scanner - scans for corpses in the map and creates a list of them
                             * also contains RAM free things to not cause out of memory violations 0xc0...05
                             * also online Corpses are diffrent then Offline Corpses and i check for both of them
                             * EFT.Interactive.ObservedCorpse - as online corpse
                             * EFT.Interactive.Corpse - as offline corpse
                             */
                            E5P.Players.Update.DeadBodyList();
                        }
                        #endregion
                        #region AllLoot
                        if (Cons.Bools.Draw_Loot)
                        {
                            /* Map Loot Scanner - scans and creates a list of loot on map - RAM free as always
                             * EFT.Interactive.ObservedLootItem - as online LootItem
                             * EFT.Interactive.LootItem - as offline LootItem
                             */
                            E5P.Items.Update.ItemsList();
                        }
                        if (Cons.Bools.Draw_Containers)
                        {
                            E5P.Items.Update.ContainerList();
                        }
                        #endregion
                        #region Exfiltrations
                        if (Cons.Bools.Draw_Exfil)
                        {
                            /* Exfiltration - scans for Exfils in the map and creates a list of them
                             * also contains RAM free things to not cause out of memory violations 0xc0...05
                             * also online Corpses are diffrent then Offline Corpses and i check for both of them
                             */
                            E5P.Exfils.Update.ExfilsList();
                        }
                        #endregion
                        #region not used - loot pool map

                        /*
                         * - Items Patterns located on maps - also displays invisible loot deleted from map and broken loot below maps
                         * if (Bools.Draw_Loot)
                         * {
                         *  List<GClass711> tItems = new List<GClass711>();
                         *  foreach (GClass711 li in _GameWorld.AllLoot)
                         *  {
                         *      tItems.Add(li);
                         *  }
                         *  _lootItems = tItems;
                         * }
                         */
                        #endregion
                        // recoil reducer (break recoil animations)
                        try
                        {
                            if (Cons.Bools.Recoil_Reducer)
                            {
                                Cons.LocalPlayer.Weapon.NoRecoil();
                            }
                        }
                        catch (Exception e)
                        {
                            ErrorHandler.Catch("NoRecoil", e);
                        }

                        try
                        {
                            if (Cons.Main._localPlayer != null)
                            {
                                Cons.AimPoint = Raycast.BarrelRaycast();
                            }
                        }
                        catch (Exception e)
                        {
                            ErrorHandler.Catch("BarrelRaycast", e);
                        }
                        //FUNC.Update.RecoilReducer(); // incase we dont use that so we can leave it like this for now
                        try
                        {
                            FUNC.Update.FullBright();
                        }
                        catch (Exception e)
                        {
                            ErrorHandler.Catch("Update_FullBright", e);
                        }
                    }
                }
            }
            else
            {
                Cons.AliveCount.Reset();
                Cons.Main.Clear();
                timestamp            = 0f;
                Cons.Main._GameWorld = null;
            }
        }
                public static void Players()
                {
                    try
                    {
                        #region [INITIALS] - to skip data overflow (incase)
                        float  deltaDistance     = 25f;
                        string playerDisplayName = "";
                        float  devLabel          = 1f;
                        string Status            = "";
                        var    LabelSize         = new GUIStyle {
                            fontSize = 12
                        };
                        Color playerColor      = Constants.Colors.ESP.npc;
                        float distancesAxisY_0 = 0;
                        float distancesAxisY_1 = 0;
                        float distancesAxisY_2 = 0;
                        Color Backup;
                        #endregion
                        var e = Cons.Main._players.GetEnumerator();
                        while (e.MoveNext())
                        {
                            var player = e.Current;
                            if (FUNC.isInScreenYZ(FUNC.W2S(player.Transform.position)))
                            {
                                //fix for colors not holds after leaving screen
                                Calculations.PlayerType playerType = Calculations.PlayerType.Scav;
                                playerDisplayName = Calculations.PlayerName(player, ref playerType);
                                playerColor       = Calculations.PlayerColor(playerType);
                                #region [Snap.Lines]
                                if (Cons.Bools.SnapLines && player != Cons.Main._localPlayer)
                                {
                                    Calculations.SnapLines(player, playerColor);
                                }
                                #endregion
                                if (FUNC.isInScreenRestricted(FUNC.W2S(player.Transform.position)))
                                {
                                    float dTO = FastMath.FD(Camera.main.transform.position, player.Transform.position);
                                    // main head vector 3d (x,y,z)
                                    Vector3 pHeadVector = FUNC.W2S(player.PlayerBones.Head.position);
                                    // setting head size comparing head position and neck position and multiplying by 1.5 (actually its head size)
                                    float find_sizebox = Math.Abs(pHeadVector.y - FUNC.W2S(player.PlayerBones.Neck.position).y) * 1.5f; // size of the head - its not good but its scaling without much maths
                                                                                                                                        // making sure head will not be too big
                                    find_sizebox = (find_sizebox > 30f) ? 30f : find_sizebox;
                                    float half_sizebox = (find_sizebox > 30f) ? 15f : find_sizebox / 2f;
                                    // size of fonts depending on distance
                                    int FontSize = 12;
                                    FastMath.DistSizer(dTO, ref FontSize, ref deltaDistance, ref devLabel);
                                    LabelSize.fontSize = FontSize;
                                    //create 3 size table of distances for texts (name, status, weapon)
                                    distancesAxisY_0 = deltaDistance + 10f;
                                    distancesAxisY_1 = distancesAxisY_0 + FontSize + 1;
                                    distancesAxisY_2 = distancesAxisY_1 + FontSize + 1;
                                    Status           = Calculations.GetPlayerTotalHealth(player); // Health here
                                    #region BONE-DUMP

                                    /*if (dTO < 20f)
                                     * {
                                     *  //string forDump = "";
                                     *  try
                                     *  {
                                     *      for (int i = 0; i < 134; i++)
                                     *      {
                                     *          if ((i > 13 && i <= 27) || i == 38 || i == 39 || i == 40 || i == 41 || (i >= 66 && i <= 70) || i == 132)
                                     *          {
                                     *              string name = "";
                                     *              try
                                     *              {
                                     *                  name = FUNC.Bones.SkeletonBoneName(player.PlayerBones.AnimatedTransform.Original.gameObject.GetComponent<PlayerBody>().SkeletonRootJoint, i);
                                     *                  name = name.Split('/')[name.Split('/').Length - 1];
                                     *                  Vector3 pos = FUNC.W2S(FUNC.Bones.GetBonePosByID(player, i));
                                     *                  Drawing.Text(new Rect(pos.x, Screen.height - pos.y, 20f, 20f), i.ToString());
                                     *              }
                                     *              catch (Exception)
                                     *              {
                                     *                  name = "bad";
                                     *              }
                                     *              //forDump = forDump + name + " - " + i + Environment.NewLine;
                                     *          }
                                     *      }
                                     *  }
                                     *  catch (Exception ex)
                                     *  {
                                     *      ErrorHandler.Catch("DUMPED", ex);
                                     *  }
                                     *  //ErrorHandler.Dump("DUMPED", forDump);
                                     * }*/
                                    #endregion
                                    #region [BONE-ESP]
                                    if (Cons.Bools.ShowBones)
                                    {
                                        Calculations.PlayerBones(dTO, player);
                                    }
                                    #endregion
                                    if (playerType != Calculations.PlayerType.TeamMate)
                                    {
                                        Backup    = GUI.color;
                                        GUI.color = Color.red;
                                        Drawing.Special.DrawPoint(pHeadVector.x - half_sizebox, (float)(Screen.height - pHeadVector.y) - half_sizebox, find_sizebox, Constants.Colors.Red);
                                        GUI.color = Backup;
                                    }
                                    #region [VISIBILITY-CHECK]
                                    string isVisible = "";
                                    if (Raycast.BodyRaycastCheck(player.gameObject, pHeadVector))
                                    {
                                        isVisible = "+";
                                    }
                                    #endregion
                                    #region [Group-Num]
                                    int    gInt;
                                    string groupID = "";
                                    try
                                    {
                                        if (Types.GroupTable.TryGetValue(player.GroupId, out gInt))
                                        {
                                            groupID = "{" + gInt + "}";
                                        }
                                    }
                                    catch (Exception) { }
                                    #endregion
                                    #region [INIT-Texts]
                                    string nameNickname = $"{playerDisplayName}{groupID}";
                                    string playerStatus = $"{isVisible}[{(int)dTO}m] {Status}";
                                    string WeaponName   = "";
                                    #endregion

                                    #region [TRY-DecodeWeaponName]
                                    try
                                    {
                                        WeaponName = player.Weapon.ShortName.Localized();
                                    }
                                    catch (Exception)
                                    {
                                        WeaponName = "No Weapon";
                                    }
                                    #endregion

                                    // set colors now
                                    LabelSize.normal.textColor = playerColor;
                                    #region Slot 0 - Player Name (vector, size, drawing)
                                    if (nameNickname != "")
                                    {
                                        Vector2 vector_playerName = GUI.skin.GetStyle(nameNickname).CalcSize(new GUIContent(nameNickname));
                                        float   player_NameText   = (devLabel == 1f) ? vector_playerName.x : (vector_playerName.x / devLabel);
                                        Drawing.Special.DrawText(
                                            nameNickname,
                                            pHeadVector.x - player_NameText / 2f,
                                            (float)Screen.height - FUNC.W2S(player.PlayerBones.Head.position).y - distancesAxisY_0,
                                            vector_playerName,
                                            LabelSize,
                                            playerColor
                                            );
                                    }
                                    #endregion
                                    #region Slot 1 - Status (distance, health)
                                    Vector2 vector_playerStatus = GUI.skin.GetStyle(playerStatus).CalcSize(new GUIContent(playerStatus));
                                    float   player_TextWidth    = (devLabel == 1f) ? vector_playerStatus.x : (vector_playerStatus.x / devLabel);
                                    Drawing.Special.DrawText(
                                        playerStatus,
                                        pHeadVector.x - player_TextWidth / 2f,
                                        (float)Screen.height - FUNC.W2S(player.PlayerBones.Head.position).y - distancesAxisY_1,
                                        vector_playerStatus,
                                        LabelSize,
                                        playerColor
                                        );
                                    #endregion
                                    #region Slot 2 - Weapon Name (vector, size, drawing) - if not empty
                                    if (WeaponName != "")
                                    {
                                        Vector2 vector_WeaponName = GUI.skin.GetStyle(WeaponName).CalcSize(new GUIContent(WeaponName));
                                        float   player_WeaponName = (devLabel == 1f) ? vector_WeaponName.x : (vector_WeaponName.x / devLabel);
                                        Drawing.Special.DrawText(
                                            WeaponName,
                                            pHeadVector.x - player_TextWidth / 2f,
                                            (float)Screen.height - FUNC.W2S(player.PlayerBones.Head.position).y - distancesAxisY_2,
                                            vector_WeaponName,
                                            LabelSize,
                                            playerColor
                                            );
                                    }
                                    #endregion
                                }
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        ErrorHandler.Catch("e5p_Players_Draw_Players", e);
                    }
                }