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

FREE AngryPromotion : 1.1.1 1.1.1

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Linq;
using System.Collections.Generic;
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
namespace Oxide.Plugins {
    [Info("AngryPromotion", "Tori1157", "1.1.1", ResourceId = 2686)]
    [Description("Automatically add users to a group if they have a specific word/phrase in their steam name.")]
    class AngryPromotion : CovalencePlugin {
#region Fields
        private bool Changed;
        private bool printToConsole;
        private bool informPlayer;
        private bool groupAdding;
        private bool useGroupInfo;
        private bool removeReward;
        private bool useThanksMessage;
        private string messagePrefix;
        private string messageColor;
        private string promotionKey;
        private string groupKey;
        private string groupInformation;
        private string thanksMessage;
        private float messageDelay;
        private const string AdminPermission = "angrypromotion.admin";
#endregion
#region Loaded
        private void Init() {
            permission.RegisterPermission(AdminPermission, this);
            LoadVariables();
            LoadData(ref promoters);
            SaveData(promoters);
            if (!permission.GroupExists(groupKey)) {
                PrintWarning(lang.GetMessage("Group NonExistent", this).Replace("{group}", groupKey));
            }
        }
        protected override void LoadDefaultConfig() {
            PrintWarning("Creating a new config file");
            Config.Clear();
            LoadVariables();
        }
        private void LoadVariables() {
            /// -- MESSAGING -- ///
            informPlayer = Convert.ToBoolean(GetConfig("Messaging Options", "Inform Player", true));
            messageColor = Convert.ToString(GetConfig("Messaging Options", "Message Color", "#ffa500"));
            messagePrefix = Convert.ToString(GetConfig("Messaging Options", "Message Prefix", "Angry Promotion"));
            printToConsole = Convert.ToBoolean(GetConfig("Messaging Options", "Print To Console", true));
            messageDelay = Convert.ToSingle(GetConfig("Messaging Options", "Chat Message Delay", 10));
            useThanksMessage = Convert.ToBoolean(GetConfig("Messaging Options", "Use Thanks Message", true));
            groupInformation = Convert.ToString(GetConfig("Messages", "Group Information", new List<string> {
                "As long as you have [#00ffff]{promotionkey}[/#] word/phrase in your name you will gain access to the items listed below, if you remove the phrase from your name you will lose access.\n", "//----------------------------//", "- [#ffa500]Remover Tool[/#]", "- [#ffa500]1.5% more SRP[/#]", "- [#008000]Colored Name[/#]", "//----------------------------//", "[#ff0000][i][+12]For more information contact an Administrator[/+][/i][/#]"
            }
            ));
            thanksMessage = Convert.ToString(GetConfig("Messages", "Thanks Message", new List<string> {
                "[+18][#ffa500]Thank you {player}![/#][/+]\n", "As a thanks for having [#00ffff]{promotionkey}[/#] in your name, we're giving you access to [#00ffff]{groupkey}[/#] group.", "\nTo learn more about what this group gives, type [#ffa500]/promotion group.[/#]"
            }
            ));
            /// -- OPTIONS -- ///
            groupKey = Convert.ToString(GetConfig("Options", "Group", "promoter"));
            groupAdding = Convert.ToBoolean(GetConfig("Options", "Group Adding", true));
            promotionKey = Convert.ToString(GetConfig("Options", "PromotionKey", "yourwebsite.com"));
            useGroupInfo = Convert.ToBoolean(GetConfig("Options", "Use Group Info", true));
            removeReward = Convert.ToBoolean(GetConfig("Options", "Toggle Phrase Check For Removal", true));
            if (Changed) {
                SaveConfig();
                Changed = false;
            }
        }
        protected override void LoadDefaultMessages() {
            lang.RegisterMessages(new Dictionary<string, string> {
                /// -- ERROR -- ///
                ["No Permission"]
                = "[#add8e6]{player}[/#] you do not have permission to use the [#00ffff]{command}[/#] command.", ["SteamID Not Found Chat"] = "SteamID [#00ffff]{id}[/#] could not be found.", ["Player Not Found Chat"] = "Username [#00ffff]{player}[/#] could not be found.", ["Multiple Players Found"] = "Multiple users found!\n\n{matches}", ["Invalid Parameter Chat"] = "Parameter [#00ffff]{parameter}[/#] is invalid or written wrong.", ["Invalid Syntax Check"] = "Invalid Syntax!  |  /promotion check \"User Name\"", ["Invalid Syntax Remove"] ="Invalid Syntax!  |  /promotion remove \"User Name\"", ["Group NonExistent"] = "Group '{group}' does not exist! Therefor users will not get put into groups!",  /// -- CONFIRM -- ///
                ["Player Added Group"]
                = "You have been added to the [#00ffff]{group}[/#] group.", ["Player Removed Group"] = "You have been removed from the [#00ffff]{group}[/#] group, since you removed [#00ffff]{promotionkey}[/#] from your name.", ["Admin Removed User"] = "You have successfully removed [#00ffff]{target}[/#] from [#00ffff]{group}[/#] group.",  /// -- INFO -- ///
                ["Default Message Group"]
                = "By having [#00ffff]{promotionkey}[/#] in your name you will gain access to the [#00ffff]{group}[/#] group automatically when you join.\n\nTo learn more about what [#00ffff]{group}[/#] group gives access to, type the following into chat: [#ffa500]/promotion group[/#].", ["Default Message"] = "By having [#00ffff]{promotionkey}[/#] in your name you will gain access to the [#00ffff]{group}[/#] group automatically when you join.", ["Player Is Promoting"] = "[#00ffff]{player}[/#] is currently promoting your server.", ["Player Not Promoting"] = "[#00ffff]{player}[/#] is currently [#ff0000]not[/#] promoting your server.", ["Admin Help1"] = "- [#ffa500]/promotion check[/#] [i](Checks to see if user is promoting)[/i]\n- [#ffa500]/promotion help[/#] [i](Displays this message)[/i]\n- [#ffa500]/promotion group[/#] [i](Displays the information regarding the group)[/i]\n- [#ffa500]/promotion[/#] [i](Displays the information regarding the plugin)[/i]\n- [#ffa500]/promotion remove \"User Name\"[/#] [i](Removes player from promotion group)[/i]", ["Player Help"] = "- [#ffa500]/promotion help[/#] [i](Displays this message)[/i]\n- [#ffa500]/promotion group[/#] [i](Displays the information regarding the group)[/i]\n- [#ffa500]/promotion[/#] [i](Displays the information regarding the plugin)[/i]",
            }
            , this);
        }
#endregion
#region Commands
        [Command("promotion")]
        private void PromotionCommand(IPlayer player, string command, string[] args) {
            var HasPerm = (player.HasPermission(AdminPermission));
#region Default
            if (args.Length == 0) {
                if (useGroupInfo == true) {
                    SendInfoMessage(player, lang.GetMessage("Default Message Group", this, player.Id).Replace("{promotionkey}", promotionKey).Replace("{group}", groupKey));
                    return;
                }
                SendInfoMessage(player, lang.GetMessage("Default Message", this, player.Id).Replace("{promotionkey}", promotionKey).Replace("{group}", groupKey));
                return;
            }
#endregion
            var CommandArg = args[0].ToLower();
            var CommandInfo = (command + " " + args[0]);
            var CaseArgs = (new List<object> {
                "check", "help", "group", "remove"
            }
            );
            if (!CaseArgs.Contains(CommandArg)) {
                SendChatMessage(player, lang.GetMessage("Invalid Parameter Chat", this, player.Id).Replace("{parameter}", CommandArg));
                return;
            }
            switch (CommandArg) {
#region Group
                case "group" : string message = "";
                foreach (var messageText in Config["Messages", "Group Information"] as List<object>) message = message + messageText + "\n";
                SendInfoMessage(player, message.Replace("{promotionkey}", promotionKey));
                return;
#endregion
#region Check
                case "check" : if (!HasPerm && !player.IsServer) {
                    SendChatMessage(player, lang.GetMessage("No Permission", this, player.Id).Replace("{player}", player.Name).Replace("{command}", CommandInfo));
                    return;
                }
                if (args.Length == 1) {
                    SendChatMessage(player, lang.GetMessage("Invalid Syntax Check", this, player.Id));
                    return;
                }
                IPlayer target;
                target = GetPlayer(args[1], player);
                if (target == null) return;
                if (PromotingInfo.IsPromoting(target)) {
                    SendChatMessage(player, lang.GetMessage("Player Is Promoting", this, player.Id).Replace("{player}", target.Name));
                    return;
                }
                SendChatMessage(player, lang.GetMessage("Player Not Promoting", this, player.Id).Replace("{player}", target.Name));
                return;
#endregion
#region Help
                case "help" : if (HasPerm) {
                    SendInfoMessage(player, lang.GetMessage("Admin Help1", this, player.Id));
                    return;
                }
                SendInfoMessage(player, lang.GetMessage("Player Help", this, player.Id));
                return;
#endregion
#region Remove
                case "remove" : if (!HasPerm && !player.IsServer) {
                    SendChatMessage(player, lang.GetMessage("No Permission", this, player.Id).Replace("{player}", player.Name).Replace("{command}", CommandInfo));
                    return;
                }
                if (args.Length == 1) {
                    SendChatMessage(player, lang.GetMessage("Invalid Syntax Remove", this, player.Id));
                    return;
                }
                IPlayer Target;
                Target = GetPlayer(args[1], player);
                if (Target == null) return;
                if (!PromotingInfo.IsPromoting(Target)) {
                    SendChatMessage(player, lang.GetMessage("Player Not Promoting", this, player.Id).Replace("{player}", Target.Name));
                    return;
                }
                permission.RemoveUserGroup(Target.Id, groupKey);
                promoters.Remove(Target.Id);
                SaveData(promoters);
                SendChatMessage(player, lang.GetMessage("Admin Removed User", this, player.Id).Replace("{target}", Target.Name).Replace("{group}", groupKey));
                return;
#endregion
            }
        }
#endregion
#region Functions
        private void OnUserConnected(IPlayer player) {
            if (player == null) return;
            if (!permission.GroupExists(groupKey)) return;
            var PlayerName = player.Name.ToLower();
            var PlayerNameChecker = PlayerName.Contains(promotionKey.ToLower());
            var PlayerIsPromoting = PromotingInfo.IsPromoting(player);
            if (groupAdding == true) {
                // Checks to see if player has already been given permissions
                if (!PlayerIsPromoting) {
                    if (PlayerNameChecker && !PlayerIsPromoting) {
                        /// ADDING THEM SINCE THEY HAVE KEY
                        permission.AddUserGroup(player.Id, groupKey);
                        promoters[player.Id] = new PromotingInfo();
                        SaveData(promoters);
                        if (informPlayer == true) {
                            string message = "";
                            foreach (var thanksText in Config["Messages", "Thanks Message"] as List<object>)  // TODO: Clean this mess up
                            message = message + thanksText + "\n";
                            timer.Once(messageDelay, () => {
                                if (useThanksMessage == true) {
                                    SendThanksMessage(player, message.Replace("{promotionkey}", promotionKey).Replace("{player}", player.Name).Replace("{groupkey}", groupKey));
                                    return;
                                }
                                SendChatMessage(player, lang.GetMessage("Player Added Group", this, player.Id).Replace("{group}", groupKey));
                            }
                            );
                        }
                        if (printToConsole == true) {
                            Puts(lang.GetMessage("Player Added Group", this, player.Id).Replace("{player}", player.Name).Replace("{group}", groupKey));
                        }
                        return;
                    }
                }
                if (removeReward == true) {
                    if (!PlayerNameChecker && PlayerIsPromoting) {
                        /// REMOVING SINCE THEY DO NOT HAVE KEY
                        permission.RemoveUserGroup(player.Id, groupKey);
                        promoters.Remove(player.Id);
                        SaveData(promoters);
                        if (informPlayer == true) {
                            timer.Once(messageDelay, () => {
                                SendChatMessage(player, lang.GetMessage("Player Removed Group", this, player.Id).Replace("{group}", groupKey).Replace("{promotionkey}", promotionKey));
                            }
                            );
                        }
                        if (printToConsole == true) {
                            Puts(lang.GetMessage("Player Removed Group", this, player.Id).Replace("{group}", groupKey).Replace("{promotionkey}", promotionKey));
                        }
                        return;
                    }
                }
            }
        }
#endregion
#region Helpers / Usefull Functions
#region Config
        private object GetConfig(string menu, string datavalue, object defaultValue) {
            var data = Config[menu] as Dictionary<string, object>;
            if (data == null) {
                data = new Dictionary<string, object>();
                Config[menu] = data;
                Changed = true;
            }
            object value;
            if (!data.TryGetValue(datavalue, out value)) {
                value = defaultValue;
                data[datavalue] = value;
                Changed = true;
            }
            return value;
        }
#endregion
#region Player Finding
        private IPlayer GetPlayer(string nameOrID, IPlayer player) {
            if (nameOrID.IsSteamId() == true) {
                IPlayer result = players.All.ToList().Find((p) => p.Id == nameOrID);
                if (result == null) SendChatMessage(player, lang.GetMessage("SteamID Not Found Chat", this, player.Id).Replace("{id}", nameOrID));
                return result;
            }
            List<IPlayer> foundPlayers = new List<IPlayer>();
            foreach (IPlayer current in players.Connected) {
                if (current.Name.ToLower() == nameOrID.ToLower()) return current;
                if (current.Name.ToLower().Contains(nameOrID.ToLower())) foundPlayers.Add(current);
            }
            switch (foundPlayers.Count) {
                case 0 : SendChatMessage(player, lang.GetMessage("Player Not Found Chat", this, player.Id).Replace("{player}", nameOrID));
                break;
                case 1 : return foundPlayers[0];
                default : string[] names = (from current in foundPlayers select current.Name).ToArray();
                SendChatMessage(player, lang.GetMessage("Multiple Players Found Chat", this, player.Id).Replace("{matches}", string.Join(", ", names)));
                break;
            }
            return null;
        }
        private bool IsParseableTo<T>(object s) {
            try {
                var parsed = (T)Convert.ChangeType(s, typeof(T));
                return true;
            }
            catch {
                return false;
            }
        }
#endregion
#region Data
        private static Dictionary<string, PromotingInfo> promoters = new Dictionary<string, PromotingInfo>();
        public class PromotingInfo {
            public static bool IsPromoting(IPlayer player) => promoters.ContainsKey(player.Id);
            public PromotingInfo() {
            }
        }
        private void LoadData<T>(ref T data, string filename = null) => data = Core.Interface.Oxide.DataFileSystem.ReadObject<T>(filename ?? Name);
        private void SaveData<T>(T data, string filename = null) => Core.Interface.Oxide.DataFileSystem.WriteObject(filename ?? Name, data);
#endregion
#endregion
#region Messaging
        private void SendChatMessage(IPlayer player, string message) {
            player.Reply(message, covalence.FormatText("[" + messageColor + "]" + messagePrefix + "[/#]:"));
        }
        private void SendInfoMessage(IPlayer player, string message) {
            player.Reply(message, covalence.FormatText("[+18][" + messageColor + "]" + messagePrefix + "[/#][/+]\n\n"));
        }
        private void SendThanksMessage(IPlayer player, string message) {
            player.Reply(message);
        }
#endregion
    }
}

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