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

FREE Hookie : 0.1 0.1

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using Oxide.Core;
using UnityEngine;
using Oxide.Core.Plugins;
using Rust;
using System.Reflection;
namespace Oxide.Plugins {
    /* ------------------- [ HOOKS ] -------------------

    [1] IsPlayerInArea(player, MinX, MinY, MaxX, MaxY); (Bool)
    [2] SetPlayerHealth(player, amount); (Void)
    [3] Slap(BasePlayer player, amount = 12); (Bool)
    [4] GivePlayerHealth(player, amount); (Void)
    [5] RemovePlayerHealth(player, amount); (Void)
    [6] Explode(BasePlayer player, damage = 60, times = 1); (Void)
    [7] IsPlayerInWater(player); (Bool)
    [8] HealAll(); (Void)
    [9] MoveEveryPlayerToPlayer(player); (Void)
    [10] GetGroundPosition(sourcepos); (Vecto3)
    [11] FindPlayer(stringtofind); (BasePlayer); [Reneb]
    [12] FindPlayerByID(id); (BasePlayer); [Reneb]

        Commands:
        Slap, Explode, Heal, HealAll, TpAll
    ----------------------------------------------------*/
    [Info("Hookie", "Norn", 0.1, ResourceId = 1518)]
    [Description("Useful hooks.")]
    public class Hookie : RustPlugin {
        void OnServerInitialized() {
            if(Config["Messages", "Teleported"] == null) {
                Puts("Configuration file out of date, resetting...");
                LoadDefaultConfig();
            }
        }
        protected override void LoadDefaultConfig() {
            Puts("No configuration file found, generating...");
            Config.Clear();
            Config["General", "Commands"] = true;
            Config["Messages", "NoAuth"] = "<color=yellow>ERROR:</color> You don't have access to this command.";
            Config["Messages", "NoPlayersFound"] = "<color=yellow>ERROR:</color> No players found.";
            Config["Messages", "MultiplePlayers"] = "<color=yellow>ERROR:</color> Multiple players found.";
            Config["Messages", "Slap"] = "<color=yellow>INFO:</color> You have slapped <color=red>{name}</color>!";
            Config["Messages", "Slapped"] = "<color=yellow>INFO:</color> You have been slapped by <color=red>{name}</color>!";
            Config["Messages", "Explode"] = "<color=yellow>INFO:</color> You have exploded <color=red>{name}</color>!";
            Config["Messages", "Exploded"] = "<color=yellow>INFO:</color> You have been exploded by <color=red>{name}</color>!";
            Config["Messages", "Heal"] = "<color=yellow>INFO:</color> You have healed <color=green>{name}</color>!";
            Config["Messages", "Healed"] = "<color=yellow>INFO:</color> You have been healed by <color=green>{name}</color>!";
            Config["Messages", "TP"] = "<color=yellow>INFO:</color> You have teleported <color=green>{name}</color>!";
            Config["Messages", "Teleported"] = "<color=yellow>INFO:</color> You have been teleported by <color=green>{name}</color>!";
            Config["Admin", "MinLevel"] = 1;
            Config["Admin", "MaxLevel"] = 2;
        }
        private bool IsPlayerInArea(BasePlayer player, float MinX, float MinY, float MaxX, float MaxY) {
            if (player != null && player.isConnected) {
                float X = player.transform.position.x;
                float Y = player.transform.position.y;
                float Z = player.transform.position.z;
                if (X >= MinX && X <= MaxX && Y >= MinY && Y <= MaxY) {
                    return true;
                }
            }
            return false;
        }
        private void Explode(BasePlayer player, float damage = 60, int times = 1) {
            if (player != null & player.isConnected) {
                for (int i = 1; i <= times; i++) {
                    Effect.server.Run("assets/bundled/prefabs/fx/firebomb.prefab", player.transform.position);
                    Effect.server.Run("assets/bundled/prefabs/fx/gas_explosion_small.prefab", player.transform.position);
                    Effect.server.Run("assets/prefabs/npc/patrol helicopter/effects/rocket_explosion.prefab", player.transform.position);
                    Effect.server.Run("assets/prefabs/npc/patrol helicopter/effects/rocket_explosion.prefab", player.transform.position);
                    Effect.server.Run("assets/prefabs/npc/patrol helicopter/effects/rocket_explosion.prefab", player.transform.position);
                    Effect.server.Run("assets/prefabs/tools/c4/effects/c4_explosion.prefab", player.transform.position);
                }
                player.Hurt(damage, global : : Rust.DamageType.Explosion, null, true);
            }
        }
        private static LayerMask GROUND_MASKS = LayerMask.GetMask("Terrain", "World", "Construction");
        static Vector3 GetGroundPosition(Vector3 sourcePos) {
            RaycastHit hitInfo;
            if (Physics.Raycast(sourcePos, Vector3.down, out hitInfo, GROUND_MASKS)) {
                sourcePos.y = hitInfo.point.y;
            }
            sourcePos.y = Mathf.Max(sourcePos.y, TerrainMeta.HeightMap.GetHeight(sourcePos));
            return sourcePos;
        }
        private object FindPlayerByID(ulong steamid) {
            BasePlayer targetplayer = BasePlayer.FindByID(steamid);
            if (targetplayer != null) {
                return targetplayer;
            }
            targetplayer = BasePlayer.FindSleeping(steamid);
            if (targetplayer != null) {
                return targetplayer;
            }
            return null;
        }
        private object FindPlayer(string tofind) {
            if (tofind.Length == 17) {
                ulong steamid;
                if (ulong.TryParse(tofind.ToString(), out steamid)) {
                    return FindPlayerByID(steamid);
                }
            }
            List<BasePlayer> onlineplayers = BasePlayer.activePlayerList as List<BasePlayer>;
            object targetplayer = null;
            foreach (BasePlayer player in onlineplayers.ToArray()) {
                if (player.displayName.ToString() == tofind) return player;
                else if (player.displayName.ToString().Contains(tofind)) {
                    if (targetplayer == null) targetplayer = player;
                    else return Config["Messages", "MultiplePlayers"].ToString();
                }
            }
            if (targetplayer != null) return targetplayer;
            List<BasePlayer> offlineplayers = BasePlayer.sleepingPlayerList as List<BasePlayer>;
            foreach (BasePlayer player in offlineplayers.ToArray()) {
                if (player.displayName.ToString() == tofind) return player;
                else if (player.displayName.ToString().Contains(tofind)) {
                    if (targetplayer == null) targetplayer = player;
                    else return Config["Messages", "MultiplePlayers"].ToString();
                }
            }
            if (targetplayer == null) return Config["Messages", "NoPlayersFound"].ToString();
            return targetplayer;
        }
        private int MoveEveryPlayerToPlayer(BasePlayer user) {
            int count = 0;
            if (user == null) {
                return count;
            }
            float addon = 1;
            foreach (BasePlayer player in BasePlayer.activePlayerList) {
                if (player != user) {
                    Vector3 pos = player.transform.position;
                    pos.z = pos.z + addon;
                    var newSpawn = GetGroundPosition(pos);
                    player.SetPlayerFlag(BasePlayer.PlayerFlags.Sleeping, true);
                    player.ClientRPCPlayer(null, player, "StartLoading");
                    if (BasePlayer.sleepingPlayerList.Contains(player) == false) BasePlayer.sleepingPlayerList.Add(player);
                    player.transform.position = newSpawn;
                    var LastPositionValue = typeof(BasePlayer).GetField("lastPositionValue", (BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic));
                    LastPositionValue.SetValue(player, player.transform.position);
                    player.ClientRPCPlayer(null, player, "ForcePositionTo", newSpawn);
                    player.TransformChanged();
                    player.SetPlayerFlag(BasePlayer.PlayerFlags.ReceivingSnapshot, true);
                    player.UpdateNetworkGroup();
                    player.SendNetworkUpdateImmediate(false);
                    player.SendFullSnapshot();
                    player.SetPlayerFlag(BasePlayer.PlayerFlags.ReceivingSnapshot, false);
                    player.ClientRPCPlayer(null, player, "FinishLoading");
                    count++;
                    addon++;
                }
            }
            if (count != 0) {
                Puts("Moved " + count.ToString() + " players to " + user.displayName + " [" + user.userID + "].");
            }
            return count;
        }
        [ChatCommand("explode")]
        private void cmdExplode(BasePlayer player, string command, string[] args) {
            if (!Convert.ToBoolean(Config["General", "Commands"])) {
                return;
            }
            if (player.net.connection.authLevel >= Convert.ToInt32(Config["Admin", "MinLevel"]) && player.net.connection.authLevel <= Convert.ToInt32(Config["Admin", "MaxLevel"])) {
                if (args.Length == 1) {
                    object foundp = FindPlayer(args[0]);
                    BasePlayer target = foundp as BasePlayer;
                    if (target == null || !target.IsConnected()) {
                        PrintToChat(player, Config["Messages", "NoPlayersFound"].ToString());
                        return;
                    }
                    else {
                        string parsed_config = Config["Messages", "Explode"].ToString();
                        parsed_config = parsed_config.Replace("{name}", target.displayName);
                        PrintToChat(player, parsed_config);
                        parsed_config = Config["Messages", "Exploded"].ToString();
                        parsed_config = parsed_config.Replace("{name}", player.displayName);
                        PrintToChat(target, parsed_config);
                        Puts(player.displayName + " has exploded " + target.displayName + " [ " + target.userID.ToString() + " ].");
                        Explode(target);
                    }
                }
            }
            else {
                PrintToChat(player, Config["Messages", "NoAuth"].ToString());
            }
        }
        [ChatCommand("slap")]
        private void cmdSlap(BasePlayer player, string command, string[] args) {
            if (!Convert.ToBoolean(Config["General", "Commands"])) {
                return;
            }
            if (player.net.connection.authLevel >= Convert.ToInt32(Config["Admin", "MinLevel"]) && player.net.connection.authLevel <= Convert.ToInt32(Config["Admin", "MaxLevel"])) {
                if (args.Length == 1) {
                    object foundp = FindPlayer(args[0]);
                    BasePlayer target = foundp as BasePlayer;
                    if (target == null || !target.IsConnected()) {
                        PrintToChat(player, Config["Messages", "NoPlayersFound"].ToString());
                        return;
                    }
                    else {
                        string parsed_config = Config["Messages", "Slap"].ToString();
                        parsed_config = parsed_config.Replace("{name}", target.displayName);
                        PrintToChat(player, parsed_config);
                        parsed_config = Config["Messages", "Slapped"].ToString();
                        parsed_config = parsed_config.Replace("{name}", player.displayName);
                        PrintToChat(target, parsed_config);
                        Puts(player.displayName + " has slapped " + target.displayName + " [ " + target.userID.ToString() + " ].");
                        Slap(target);
                    }
                }
            }
            else {
                PrintToChat(player, Config["Messages", "NoAuth"].ToString());
            }
        }
        [ChatCommand("tpall")]
        private void cmdTPAll(BasePlayer player, string command, string[] args) {
            if (!Convert.ToBoolean(Config["General", "Commands"])) {
                return;
            }
            if (player.net.connection.authLevel >= Convert.ToInt32(Config["Admin", "MinLevel"]) && player.net.connection.authLevel <= Convert.ToInt32(Config["Admin", "MaxLevel"])) {
                string parsed_config = Config["Messages", "TP"].ToString();
                parsed_config = parsed_config.Replace("{name}", player.displayName);
                PrintToChat(parsed_config);
                MoveEveryPlayerToPlayer(player);
                PrintToChat("<color=yellow>"+player.displayName + "</color> has moved teleported every user.");
            }
            else {
                PrintToChat(player, Config["Messages", "NoAuth"].ToString());
            }
        }
        [ChatCommand("healall")]
        private void cmdHealAll(BasePlayer player, string command, string[] args) {
            if (!Convert.ToBoolean(Config["General", "Commands"])) {
                return;
            }
            if (player.net.connection.authLevel >= Convert.ToInt32(Config["Admin", "MinLevel"]) && player.net.connection.authLevel <= Convert.ToInt32(Config["Admin", "MaxLevel"])) {
                string parsed_config = Config["Messages", "Healed"].ToString();
                parsed_config = parsed_config.Replace("{name}", player.displayName);
                PrintToChat(parsed_config);
                HealAll();
            }
            else {
                PrintToChat(player, Config["Messages", "NoAuth"].ToString());
            }
        }
        [ChatCommand("heal")]
        private void cmdHeal(BasePlayer player, string command, string[] args) {
            if (!Convert.ToBoolean(Config["General", "Commands"])) {
                return;
            }
            if (player.net.connection.authLevel >= Convert.ToInt32(Config["Admin", "MinLevel"]) && player.net.connection.authLevel <= Convert.ToInt32(Config["Admin", "MaxLevel"])) {
                if (args.Length == 1) {
                    object foundp = FindPlayer(args[0]);
                    BasePlayer target = foundp as BasePlayer;
                    if (target == null || !target.IsConnected()) {
                        PrintToChat(player, Config["Messages", "NoPlayersFound"].ToString());
                        return;
                    }
                    else {
                        string parsed_config = Config["Messages", "Heal"].ToString();
                        parsed_config = parsed_config.Replace("{name}", target.displayName);
                        PrintToChat(player, parsed_config);
                        parsed_config = Config["Messages", "Healed"].ToString();
                        parsed_config = parsed_config.Replace("{name}", player.displayName);
                        PrintToChat(target, parsed_config);
                        Puts(player.displayName + " has healed " + target.displayName + " [ " + target.userID.ToString() + " ].");
                        SetPlayerHealth(target, 100);
                    }
                }
            }
            else {
                PrintToChat(player, Config["Messages", "NoAuth"].ToString());
            }
        }
        private void HealAll() {
            foreach (BasePlayer player in BasePlayer.activePlayerList) {
                if (player != null && player.isConnected) {
                    player.health = 100;
                }
            }
        }
        private bool IsPlayerInWater(BasePlayer player) {
            if (player != null && player.isConnected) {
                return player.IsSwimming();
            }
            return false;
        }
        private void RemovePlayerHealth(BasePlayer player, float hp) {
            if (player != null && player.isConnected) {
                player.health = player.health - hp;
            }
        }
        private void GivePlayerHealth(BasePlayer player, float hp) {
            if (player != null && player.isConnected) {
                player.health = player.health + hp;
            }
        }
        private void SetPlayerHealth(BasePlayer player, float hp) {
            if (player != null && player.isConnected) {
                player.health = hp;
            }
        }
        private bool Slap(BasePlayer player, float amount = 12) {
            if (player != null && player.isConnected) {
                float X = player.transform.position.x;
                float Y = player.transform.position.y;
                float Z = player.transform.position.z;
                Vector3 destination = new Vector3(X, Y + amount, Z);
                player.transform.position = destination;
                var LastPositionValue = typeof(BasePlayer).GetField("lastPositionValue", (BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic));
                LastPositionValue.SetValue(player, player.transform.position);
                player.ClientRPCPlayer(null, player, "ForcePositionTo", destination);
                player.TransformChanged();
                return true;
            }
            return false;
        }
    }
}

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