Иконка ресурса

FREE AimAssistDonate : 2.0.0 2.0.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Facepunch.Extend;
using Oxide.Core;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using ProtoBuf;
using System;
using System.Collections.Generic;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("AimAssistDonate", "FourTeen & Koks", "2.0.0")]
    class AimAssistDonate : RustPlugin
    {
        [PluginReference] private Plugin ImageLibrary;

        private Dictionary<ulong, PlayerSettings> playerSettings = new Dictionary<ulong, PlayerSettings>();

        private class PlayerSettings
        {
            public bool On { get; set; } = false;
            public bool BetaAim { get; set; } = false;
            public bool TeamFF { get; set; } = false;
            public bool BotsFF { get; set; } = false;
            public int Distance { get; set; } = 300;
        }

        private PlayerSettings GetPlayerSettings(BasePlayer player)
        {
            ulong userID = player.userID;
            if (!playerSettings.ContainsKey(userID))
            {
                playerSettings[userID] = new PlayerSettings();
            }
            return playerSettings[userID];
        }
        private void SavePlayerSettings(BasePlayer player, PlayerSettings settings)
        {
            ulong userID = player.userID;
            playerSettings[userID] = settings;
        }

        private const string Main = "MainAIMUI";
        private const string ON = "https://gspics.org/images/2024/04/09/0Y1XOZ.png";
        private const string OFF = "https://gspics.org/images/2024/04/09/0Y1WXs.png";
        private const string MAIN = "https://i.postimg.cc/g2dZFY65/hsehf9sfh.png";

        private void OnServerInitialized()
        {
            LoadData();
            ImageLibrary.Call("AddImage", ON, ON);
            ImageLibrary.Call("AddImage", OFF, OFF);
            ImageLibrary.Call("AddImage", MAIN, MAIN);
            permission.RegisterPermission("aimassist.use", this);
            cmd.AddChatCommand("aim", this, "CmdAimAssist");
        }
        void Unload()
        {
            foreach (BasePlayer player in BasePlayer.activePlayerList)
            {
                CuiHelper.DestroyUi(player, Main);
            }
        }
        private void CmdAimAssist(BasePlayer player, string command, string[] args)
        {
            if (permission.UserHasPermission(player.UserIDString, "aimassist.use"))
            {
                GuiAim(player);
            }
            else
            {
                SendReply(player, "Вы не имеете доступа к использованию аима!");
            }
        }
        private void OnWeaponFired(BaseProjectile projectile, BasePlayer attacker, ItemModProjectile mod, ProjectileShoot projectileShoot)
        {
            if (attacker != null && permission.UserHasPermission(attacker.UserIDString, "aimassist.use"))
            {
                PlayerSettings settings = GetPlayerSettings(attacker);
                if (settings.On == false) return;
                Vector3 attackerPosition = attacker.transform.position;
                Collider[] hitColliders = Physics.OverlapSphere(attackerPosition, settings.Distance, LayerMask.GetMask("Player (Server)"));
                BasePlayer closestPlayer = null;
                float closestDistance = float.MaxValue;
                RelationshipManager.PlayerTeam team = RelationshipManager.ServerInstance.FindTeam(attacker.currentTeam);

                foreach (Collider collider in hitColliders)
                {
                    BasePlayer targetPlayer = collider.GetComponent<BasePlayer>();
                    bool teameit = true;
                    bool botff = true;
                    if (targetPlayer != null)
                    {
                        if (targetPlayer.name == "assets/rust.ai/agents/npcplayer/humannpc/tunneldweller/npc_tunneldweller.prefab") continue;
                        if (targetPlayer.name == "assets/rust.ai/agents/npcplayer/humannpc/banditguard/npc_bandit_guard.prefab") continue;
                        if (targetPlayer.name == "assets/rust.ai/agents/npcplayer/humannpc/scientist/scientistnpc_peacekeeper.prefab") continue;
                        if (targetPlayer.name == "assets/prefabs/npc/bandit/missionproviders/missionprovider_outpost_a.prefab") continue;
                        if (targetPlayer.name == "assets/prefabs/npc/bandit/missionproviders/missionprovider_outpost_b.prefab") continue;
                        if (targetPlayer.name == "assets/prefabs/npc/bandit/missionproviders/missionprovider_bandit_b.prefab") continue;
                        if (targetPlayer.name == "assets/prefabs/npc/bandit/missionproviders/missionprovider_fishing_a.prefab") continue;
                        if (targetPlayer.name == "assets/prefabs/npc/bandit/missionproviders/missionprovider_fishing_b.prefab") continue;
                        if (targetPlayer.name == "assets/prefabs/npc/bandit/shopkeepers/bandit_shopkeeper.prefab") continue;
                        if (targetPlayer.name == "assets/prefabs/npc/bandit/shopkeepers/boat_shopkeeper.prefab") continue;
                        if (targetPlayer.IsBot)
                        {
                            if (settings.BotsFF) botff = true;
                            else botff = false;
                        }
                    }
if (team != null && team.members.Contains(targetPlayer.userID))
{
    if (settings.TeamFF)
        teameit = true;
    else
        teameit = false;
}

                    if (targetPlayer != null && targetPlayer != attacker && teameit && !targetPlayer.IsSleeping() && !targetPlayer.IsWounded() && botff)
                    {
                        float distance = Vector3.Distance(attackerPosition, targetPlayer.transform.position);
                        if (settings.BetaAim)
                        {
                            Quaternion q = GetForPlayer(attacker, targetPlayer);
                            float xq = q.eulerAngles.x;
                            float yq = q.eulerAngles.y;
                            float x;
                            float y;
                            float xp = attacker.eyes.rotation.eulerAngles.x;
                            float yp = attacker.eyes.rotation.eulerAngles.y;
                            if (xq + 30 >= 360) xq = xq - 360;
                            if (yq + 30 >= 360) yq = yq - 360;
                            if (xp + 30 >= 360) xp = xp - 360;
                            if (yp + 30 >= 360) yp = yp - 360;
                            x = Math.Abs(xq - xp);
                            y = Math.Abs(yq - yp);
                            if (x < 30 && y < 30)
                            {
                                if (distance < closestDistance && permission.UserHasPermission(attacker.UserIDString, "aimassist.use"))
                                {
                                    closestDistance = distance;
                                    closestPlayer = targetPlayer;
                                }
                            }
                        }
                        else
                        {
                            if (distance < closestDistance && permission.UserHasPermission(attacker.UserIDString, "aimassist.use"))
                            {
                                closestDistance = distance;
                                closestPlayer = targetPlayer;
                            }
                        }
                    }
                }
                if (closestPlayer != null)
                {
                    Vector3 posseat = attacker.transform.position;
                    posseat.y = posseat.y + 0.5f;
                    posseat.y = posseat.y - 0.5f;
                    BaseMountable seat = GameManager.server.CreateEntity("assets/prefabs/vehicle/seats/passengerchair.prefab", posseat, GetForPlayerAim(attacker, closestPlayer)) as BaseMountable;
                    seat.Spawn();
                    attacker.SetMounted(seat);
                    attacker.SendNetworkUpdate();
                    attacker.UpdateNetworkGroup();
                    attacker.SendEntityUpdate();
                    seat.AdminKill();
                    projectile.primaryMagazine.contents = projectile.primaryMagazine.capacity;
                    projectile.SendNetworkUpdateImmediate();

                }
            }
        }
        public Quaternion GetForPlayer(BasePlayer attacker, BasePlayer closestPlayer)
        {
            Vector3 target = closestPlayer.ServerPosition;
            Vector3 posseat = attacker.transform.position;
            posseat.y = posseat.y + 0.5f;
            Vector3 dir = (target - posseat).normalized;
            posseat.y = posseat.y - 0.5f;
            Quaternion q = Quaternion.Euler(Quaternion.LookRotation(dir).eulerAngles.x, Quaternion.LookRotation(dir).eulerAngles.y, Quaternion.LookRotation(dir).eulerAngles.z);
            return q;
        }
        public Quaternion GetForPlayerAim(BasePlayer attacker, BasePlayer closetplayer)
        {
            Vector3 target = closetplayer.GetBounds(closetplayer.IsDucked()).center;
            Vector3 posseat = attacker.transform.position;
            int distance = (int)Vector2.Distance(attacker.transform.position, closetplayer.transform.position);
            if (distance < 170)
            {
                if (!attacker.IsDucked()) posseat.y += 1f;
                if (attacker.IsDucked()) posseat.y += 0.5f;
            }
            else
            {
                if (!attacker.IsDucked()) posseat.y -= 0.2f;
                if (attacker.IsDucked()) posseat.y -= 1.2f;
            }
            Vector3 dir = (target - posseat).normalized;
            Quaternion q = Quaternion.Euler(Quaternion.LookRotation(dir).eulerAngles.x, Quaternion.LookRotation(dir).eulerAngles.y, Quaternion.LookRotation(dir).eulerAngles.z);
            return q;
        }
        #region GUI
        void GuiAim(BasePlayer player)
        {
            CuiHelper.DestroyUi(player, Main);
            string OffsetMinON = "192.36 176";
            string OffsetMaxON = "245 196";

            string OffsetMinBA = "192.36 131";
            string OffsetMaxBA = "245 153";

            string OffsetMinTFF = "192.36 86";
            string OffsetMaxTFF = "245 107.5";

            string OffsetMinBFF = "192.36 39.7";
            string OffsetMaxBFF = "245 63";

            string OffsetMinDIST = "192.36 -5";
            string OffsetMaxDIST = "245 20";

            PlayerSettings settings = GetPlayerSettings(player);

            string OnText = settings.On ? "OFF" : "ON";
            string teamFFText = settings.TeamFF ? "OFF" : "ON";
            string betaaimtext = settings.BetaAim ? "OFF" : "ON";
            string botFFText = settings.BotsFF ? "OFF" : "ON";

            CuiElementContainer container = new CuiElementContainer();
            container.Add(new CuiPanel
            {
                CursorEnabled = true,
                KeyboardEnabled = true,
                RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-350 -268", OffsetMax = "355 265" },
                Image = { Png = (string)ImageLibrary.Call("GetImage", MAIN), Material = "assets/icons/greyout.mat", }
            }, "Hud", Main);
            container.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "296 215", OffsetMax = "341 258" },
                Button = { Color = "1 1 1 0", Material = "assets/icons/greyout.mat", Close = Main }
            }, Main, ".close");
            container.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = OffsetMinON, OffsetMax = OffsetMaxON },
                Button = { Color = "1 1 1 0", Material = "assets/icons/greyout.mat", Command = $"aimmenuguicommand aim {OnText.ToLower()}" },
                Text = { Color = "1 1 1 1", Text = OnText, FontSize = 12, Align = TextAnchor.MiddleCenter }
            }, Main, ".1");
            container.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = OffsetMinBA, OffsetMax = OffsetMaxBA },
                Button = { Color = "1 1 1 0", Material = "assets/icons/greyout.mat", Command = $"aimmenuguicommand betaaim {betaaimtext.ToLower()}" },
                Text = { Color = "1 1 1 1", Text = betaaimtext, FontSize = 12, Align = TextAnchor.MiddleCenter }
            }, Main, ".2");
            container.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = OffsetMinTFF, OffsetMax = OffsetMaxTFF },
                Button = { Color = "1 1 1 0", Material = "assets/icons/greyout.mat", Command = $"aimmenuguicommand teamff {teamFFText.ToLower()}" },
                Text = { Color = "1 1 1 1", Text = teamFFText, FontSize = 12, Align = TextAnchor.MiddleCenter }
            }, Main, ".3");
            container.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = OffsetMinBFF, OffsetMax = OffsetMaxBFF },
                Button = { Color = "1 1 1 0", Material = "assets/icons/greyout.mat", Command = $"aimmenuguicommand botff {botFFText.ToLower()}" },
                Text = { Color = "1 1 1 1", Text = botFFText, FontSize = 12, Align = TextAnchor.MiddleCenter }
            }, Main, ".4");
            container.Add(new CuiElement
            {
                Parent = Main,
                Name = ".5",
                Components =
                {
                    new CuiInputFieldComponent { Text = settings.Distance.ToString() + " / 300", Command  = "aimmenuguicommand aimradius ", ReadOnly = false, FontSize = 12, Align =  TextAnchor.MiddleCenter },
                    new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = OffsetMinDIST, OffsetMax = OffsetMaxDIST },
                }
            });
            CuiHelper.AddUi(player, container);
        }
        #endregion
        #region GUICOMMAND
        [ConsoleCommand("aimmenuguicommand")]
        private void ccmdESPGUI(ConsoleSystem.Arg arg)
        {
            PlayerSettings settings = GetPlayerSettings(arg.Player());
            switch (arg.Args[0])
            {
                case "aim":
                    {
                        if (arg.Args[1] == "off") settings.On = false;
                        if (arg.Args[1] == "on") settings.On = true;
                        break;
                    }
                case "betaaim":
                    {
                        if (arg.Args[1] == "off") settings.BetaAim = false;
                        if (arg.Args[1] == "on") settings.BetaAim = true;
                        break;
                    }
                case "teamff":
                    {
                        if (arg.Args[1] == "off") settings.TeamFF = false;
                        if (arg.Args[1] == "on") settings.TeamFF = true;
                        break;
                    }
                case "botff":
                    {
                        if (arg.Args[1] == "off") settings.BotsFF = false;
                        if (arg.Args[1] == "on") settings.BotsFF = true;
                        break;
                    }
                case "aimradius":
                    {
                        if (arg.Args[1].ToInt() <= 300) settings.Distance = arg.Args[1].ToInt();
                        else settings.Distance = 300;
                        break;
                    }
            }
            SavePlayerSettings(arg.Player(), settings);
            CuiHelper.DestroyUi(arg.Player(), Main);
            GuiAim(arg.Player());
            SaveData();
        }
        #endregion
        void SaveData()
        {
            Interface.Oxide.DataFileSystem.WriteObject(Title + "/playerSettings", playerSettings);
        }
        void LoadData()
        {
            try
            {
                playerSettings = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<ulong, PlayerSettings>>(Title + $"/playerSettings");
            }
            catch (Exception e)
            {
                PrintError(e.ToString());
            }
        }
    }
}

Автор
15FPS
Скачиваний
0
Просмотры
1
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху