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

FREE MagicHammer : 0.4 0.4

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

namespace Oxide.Plugins
{
    [Info("MagicHammer", "Norn", 0.4, ResourceId = 1375)]
    [Description("Hit stuff with the hammer and do things.")]
    public class MagicHammer : RustPlugin
    {
        int MODE_REPAIR = 1;
        int MODE_DESTROY = 2;
        int MAX_MODES = 2;
        [PluginReference]
        Plugin PopupNotifications;
        class StoredData
        {
            public Dictionary<ulong, MagicHammerInfo> Users = new Dictionary<ulong, MagicHammerInfo>();
            public StoredData()
            {
            }
        }

        class MagicHammerInfo
        {
            public ulong UserId;
            public int Mode;
            public bool Enabled;
            public bool Messages_Enabled;
            public MagicHammerInfo()
            {
            }
        }

        StoredData hammerUserData;
        static FieldInfo buildingPriv;
        void Loaded()
        {
            if (!permission.PermissionExists("can.mh")) permission.RegisterPermission("can.mh", this);
            hammerUserData = Interface.GetMod().DataFileSystem.ReadObject<StoredData>(this.Title + "_users");
            buildingPriv = typeof(BasePlayer).GetField("buildingPrivlidges", (BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic));
        }
        void OnPlayerInit(BasePlayer player)
        {
            InitPlayerData(player);
        }
        bool InitPlayerData(BasePlayer player)
        {
            if(CanMagicHammer(player))
            {
                MagicHammerInfo p = null;
                if (hammerUserData.Users.TryGetValue(player.userID, out p) == false)
                {
                    var info = new MagicHammerInfo();
                    info.Enabled = false;
                    info.Mode = MODE_REPAIR; //Repair
                    info.UserId = player.userID;
                    info.Messages_Enabled = true;
                    hammerUserData.Users.Add(player.userID, info);
                    Interface.GetMod().DataFileSystem.WriteObject(this.Title + "_users", hammerUserData);
                    Puts("Adding entry " + player.userID.ToString());
                }
            }
            else
            {
                MagicHammerInfo p = null;
                if (hammerUserData.Users.TryGetValue(player.userID, out p))
                {
                    Puts("Removing " + player.userID + " from magic hammer data, cleaning up...");
                    hammerUserData.Users.Remove(player.userID);
                }
            }
            return false;
        }
        protected override void LoadDefaultConfig()
        {
            Puts("Updating configuration file...");
            Config.Clear();
            Config["iProtocol"] = Protocol.network;
            Config["bUsePopupNotifications"] = false;
            Config["bMessagesEnabled"] = true;
            Config["tMessageRepaired"] = "Entity: <color=#F2F5A9>{entity_name}</color> health <color=#2EFE64>updated</color> from <color=#FF4000>{current_hp}</color>/<color=#2EFE64>{new_hp}</color>.";
            Config["tMessageDestroyed"] = "Entity: <color=#F2F5A9>{entity_name}</color> <color=#FF4000>destroyed</color>.";
            Config["tMessageUsage"] = "/mh <enabled/mode>.";
            Config["tHammerEnabled"] = "Status: {hammer_status}.";
            Config["tHammerMode"] = "You have switched to: {hammer_mode} mode.";
            Config["tHammerModeText"] = "Choose your mode: 1 = <color=#2EFE64>repair</color>, 2 = <color=#FF4000>destroy</color>.";
            Config["tNoAccessCupboard"] = "You <color=#FF4000>don't</color> have access to all the tool cupboards around you.";
            Config["bDestroyCupboardCheck"] = true;
            SaveConfig();
        }
        bool CanMagicHammer(BasePlayer player)
        {
            if (permission.UserHasPermission(player.userID.ToString(), "can.mh")) return true;
            return false;
        }
        private void PrintToChatEx(BasePlayer player, string result, string tcolour = "#F5A9F2")
        {
            if (Convert.ToBoolean(Config["bMessagesEnabled"]))
            {
                if (Convert.ToBoolean(Config["bUsePopupNotifications"]))
                {
                    PopupNotifications?.Call("CreatePopupNotification", "<color=" + tcolour + ">" + this.Title.ToString() + "</color>\n" + result, player);
                }
                else
                {
                    PrintToChat(player, "<color=\"" + tcolour + "\">[" + this.Title.ToString() + "]</color> " + result);
                }
            }
        }
        void Unload()
        {
            Puts("Saving hammer database...");
            SaveData();
        }
        void SaveData()
        {
            Interface.Oxide.DataFileSystem.WriteObject(this.Title+"_users", hammerUserData);
        }
        int GetPlayerHammerMode(BasePlayer player)
        {
            MagicHammerInfo p = null;
            if (hammerUserData.Users.TryGetValue(player.userID, out p))
            {
                return p.Mode;
            }
            return -1;
        }
        bool SetPlayerHammerMode(BasePlayer player, int mode)
        {
            MagicHammerInfo p = null;
            if (hammerUserData.Users.TryGetValue(player.userID, out p))
            {
                p.Mode = mode;
                return true;
            }
            return false;
        }
        bool SetPlayerHammerStatus(BasePlayer player, bool enabled)
        {
            MagicHammerInfo p = null;
            if (hammerUserData.Users.TryGetValue(player.userID, out p))
            {
                p.Enabled = enabled;
                return true;
            }
            return false;
        }
        bool MagicHammerEnabled(BasePlayer player)
        {
            MagicHammerInfo p = null;
            if (hammerUserData.Users.TryGetValue(player.userID, out p))
            {
                return p.Enabled;
            }
            return false;
        }
        [ChatCommand("mh")]
        void cmdMH(BasePlayer player, string cmd, string[] args)
        {
            if (CanMagicHammer(player))
            {
                MagicHammerInfo p = null;
                if (hammerUserData.Users.TryGetValue(player.userID, out p) == false)
                {
                    InitPlayerData(player);
                }
                if (args.Length == 0 || args.Length > 2)
                {
                    PrintToChatEx(player, Config["tMessageUsage"].ToString());
                    if (player.net.connection.authLevel >= 1)
                    {
                        // Future Admin Cmds
                    }
                }
                else if (args[0] == "mode")
                {
                    if (args.Length == 1)
                    {
                        PrintToChatEx(player, Config["tHammerModeText"].ToString());
                    }
                    else if (args.Length == 2)
                    {
                        int mode = Convert.ToInt16(args[1]);
                        if (mode >= 1 && mode <= MAX_MODES)
                        {
                            string mode_text = "null";
                            if (mode == MODE_REPAIR)
                            {
                                mode_text = "<color=#2EFE64>repair</color>";
                            }
                            else if (mode == MODE_DESTROY)
                            {
                                mode_text = "<color=#FF4000>destroy</color>";
                            }
                            SetPlayerHammerMode(player, mode);
                            string parsed_config = Config["tHammerMode"].ToString();
                            parsed_config = parsed_config.Replace("{hammer_mode}", mode_text);
                            PrintToChatEx(player, parsed_config);
                        }
                        else
                        {
                            PrintToChatEx(player, "Valid modes: 1 - " + MAX_MODES.ToString() + "."); // Invalid Mode
                        }
                    }
                }
                else if (args[0] == "enabled")
                {
                    if (MagicHammerEnabled(player))
                    {
                        string parsed_config = Config["tHammerEnabled"].ToString();
                        parsed_config = parsed_config.Replace("{hammer_status}", "<color=#FF4000>disabled</color>");
                        PrintToChatEx(player, parsed_config);
                        SetPlayerHammerStatus(player, false);
                    }
                    else
                    {
                        string parsed_config = Config["tHammerEnabled"].ToString();
                        parsed_config = parsed_config.Replace("{hammer_status}", "<color=#2EFE64>enabled</color>");
                        PrintToChatEx(player, parsed_config);
                        SetPlayerHammerStatus(player, true);
                    }
                }
            }
        }
        void OnStructureRepairEx(BuildingBlock block, BasePlayer player)
        {
            if (CanMagicHammer(player) && MagicHammerEnabled(player))
            {
                int mode = GetPlayerHammerMode(player);
                if(mode != -1)
                {
                    string block_shortname = block.blockDefinition.hierachyName.ToString();
                    string block_displayname = block.blockDefinition.info.name.english.ToString();
                    float max_health = block.MaxHealth(); float current_health = block.Health();
                    if (mode == MODE_REPAIR)
                    {
                        if (current_health != max_health)
                        {
                            block.health = block.MaxHealth(); float new_hp = block.Health();
                            if (current_health != new_hp)
                            {
                                string parsed_config = Config["tMessageRepaired"].ToString();
                                parsed_config = parsed_config.Replace("{current_hp}", current_health.ToString());
                                parsed_config = parsed_config.Replace("{new_hp}", new_hp.ToString());
                                if (block_displayname.Length == 0)
                                {
                                    parsed_config = parsed_config.Replace("{entity_name}", block_shortname);
                                }
                                else
                                {
                                    parsed_config = parsed_config.Replace("{entity_name}", block_displayname);
                                }
                                PrintToChatEx(player, parsed_config);
                            }
                        }
                    }
                    else if (mode == MODE_DESTROY)
                    {
                        if (Convert.ToBoolean(Config["bDestroyCupboardCheck"]))
                        {
                            if (hasTotalAccess(player))
                            {
                                string parsed_config = Config["tMessageDestroyed"].ToString();
                                if (block_displayname.Length == 0)
                                {
                                    parsed_config = parsed_config.Replace("{entity_name}", block_shortname);
                                }
                                else
                                {
                                    parsed_config = parsed_config.Replace("{entity_name}", block_displayname);
                                }
                                PrintToChatEx(player, parsed_config);
                                RemoveEntity(block);
                            }
                            else
                            {
                                PrintToChatEx(player, Config["tNoAccessCupboard"].ToString());
                            }
                        }
                        else
                        {
                            string parsed_config = Config["tMessageDestroyed"].ToString();
                            if (block_displayname.Length == 0)
                            {
                                parsed_config = parsed_config.Replace("{entity_name}", block_shortname);
                            }
                            else
                            {
                                parsed_config = parsed_config.Replace("{entity_name}", block_displayname);
                            }
                            PrintToChatEx(player, parsed_config);
                            RemoveEntity(block);
                        }
                    }
                }
            }
        }
        static void RemoveEntity(BaseEntity entity)
        {
            if (entity == null) return;
            entity.KillMessage();
        }
        static bool hasTotalAccess(BasePlayer player) // Thanks Reneb
        {
            List<BuildingPrivlidge> playerpriv = buildingPriv.GetValue(player) as List<BuildingPrivlidge>;
            if (playerpriv.Count == 0)
            {
                return false;
            }
            foreach (BuildingPrivlidge priv in playerpriv.ToArray())
            {
                List<ProtoBuf.PlayerNameID> authorized = priv.authorizedPlayers;
                bool foundplayer = false;
                foreach (ProtoBuf.PlayerNameID pni in authorized.ToArray())
                {
                    if (pni.userid == player.userID)
                        foundplayer = true;
                }
                if (!foundplayer)
                {
                    return false;
                }
            }
            return true;
        }
        private void OnServerInitialized()
        {
            if (Config["tNoAccessCupboard"] == null) { Puts("Resetting configuration file (out of date)..."); LoadDefaultConfig(); }
        }
        void OnStructureRepair(BuildingBlock block, BasePlayer player)
        {
            OnStructureRepairEx(block, player);
        }
    }
}

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