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

FREE GatherRewards : 1.5.3 1.5.3

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

namespace Oxide.Plugins
{
    [Info("Gather Rewards", "CanopySheep", "1.5.3", ResourceId = 770)]
    [Description("Earn rewards through Economics/Server Rewards for killing and gathering")]
    public class GatherRewards : RustPlugin
    {
        #region Helpers

        [PluginReference]
        private Plugin Economics, ServerRewards, Friends, Clans;
        private string amountstring;
        private float amount;
        private bool foundAnimal = false;
        private string resource = null;

        private static string UppercaseFirst(string s)
        {
            if (string.IsNullOrEmpty(s))
                return string.Empty;
            var a = s.ToCharArray();
            a[0] = char.ToUpper(a[0]);
            return new string(a);
        }

        private bool CheckPermission(BasePlayer player, string perm)
        {
            if (permission.UserHasPermission(player.UserIDString, perm)) return true;
            return false;
        }

        #endregion

        #region Configuration Defaults

        PluginConfig DefaultConfig()
        {
            var defaultConfig = new PluginConfig
            {
                Settings = new PluginSettings
                {
                    ChatEditCommand = "gatherrewards",
                    ConsoleEditCommand = "gatherrewards",
                    EditPermission = "gatherrewards.canedit",
                    ShowMessagesOnKill = true,
                    ShowMessagesOnGather = true,
                    UseEconomics = true,
                    UseServerRewards = false,
                    PluginPrefix = "<color=cyan>[GatherRewards]</color>",
                    Rewards = new Dictionary<string, float>
                    {
                        { PluginRewards.Player, 0 },
                        { PluginRewards.PlayerFriend, -25 },
                        { PluginRewards.ClanMember, -25 },
                        { PluginRewards.Ore, 25 },
                        { PluginRewards.Wood, 25 },
                        { PluginRewards.Stone, 25},
                        { PluginRewards.Corn, 25},
                        { PluginRewards.Hemp, 25},
                        { PluginRewards.Mushroom, 25},
                        { PluginRewards.Pumpkin, 25}
                    }
                }
            };
            foreach (GameManifest.PooledString str in GameManifest.Current.pooledStrings)
            {
                if (str.str.StartsWith("assets/rust.ai/agents"))
                {
                    if (str.str.Contains("-") || str.str.Contains("_")) { continue; }
					if (str.str.Contains("bottest")) { continue; }
                    var animal = str.str.Substring(str.str.LastIndexOf("/") + 1).Replace(".prefab", "");
                    if (animal.Contains(".")) { continue; }
                    defaultConfig.Settings.Rewards[UppercaseFirst(animal)] = 25;
                }
				else if (str.str.StartsWith("assets/prefabs/npc"))
				{
					if (!(str.str.Contains("murderer.prefab") || str.str.Contains("scientist.prefab"))) { continue; }
					var animal = str.str.Substring(str.str.LastIndexOf("/") + 1).Replace(".prefab", "");
                    if (animal.Contains(".")) { continue; }
                    defaultConfig.Settings.Rewards[UppercaseFirst(animal)] = 25;
				}
            }
            return defaultConfig;
        }

        #endregion

        #region Configuration Setup

        private bool configChanged;
        private PluginConfig config;

        private static class PluginRewards
        {
            public const string Player = "Player";
            public const string PlayerFriend = "Player's Friend";
            public const string ClanMember = "Clan Member";
            public const string Ore = "Ore";
            public const string Wood = "Wood";
            public const string Stone = "Stone";
            public const string Corn = "Corn";
            public const string Hemp = "Hemp";
            public const string Mushroom = "Mushroom";
            public const string Pumpkin = "Pumpkin";
        }

        private class PluginSettings
        {
            public string ChatEditCommand { get; set; }
            public string ConsoleEditCommand { get; set; }
            public string EditPermission { get; set; }
            public bool ShowMessagesOnKill { get; set; }
            public bool ShowMessagesOnGather { get; set; }
            public bool UseEconomics { get; set; }
            public bool UseServerRewards { get; set; }
            public string PluginPrefix { get; set; }
            public Dictionary<string, float> Rewards { get; set; }
        }

        private class PluginConfig
        {
            public PluginSettings Settings { get; set; }
        }

        protected override void LoadDefaultConfig()
        {
            Config.WriteObject(DefaultConfig(), true);
            PrintWarning("New configuration file created.");
        }

        private void LoadConfigValues()
        {
            config = Config.ReadObject<PluginConfig>();
            var defaultConfig = DefaultConfig();
            Merge(config.Settings.Rewards, defaultConfig.Settings.Rewards);

            if (!configChanged) return;
            PrintWarning("Configuration file updated.");
            Config.WriteObject(config);
        }

        private void Merge<T1, T2>(IDictionary<T1, T2> current, IDictionary<T1, T2> defaultDict)
        {
            foreach (var pair in defaultDict)
            {
                if (current.ContainsKey(pair.Key)) continue;
                current[pair.Key] = pair.Value;
                configChanged = true;
            }
            var oldPairs = current.Keys.Except(defaultDict.Keys).ToList();
            foreach (var oldPair in oldPairs)
            {
                current.Remove(oldPair);
                configChanged = true;
            }
        }

        #endregion

        #region Hooks

        private string Lang(string key, object userID = null) => lang.GetMessage(key, this, userID == null ? null : userID.ToString());

        private void Language()
        {
            lang.RegisterMessages(new Dictionary<string, string>
            {
                { "ReceivedForGather", "You have received ${0} for gathering {1}." },
                { "LostForGather", "You have lost ${0} for gathering {1}." },
                { "ReceivedForKill", "You have received ${0} for killing a {1}." },
                { "LostForKill", "You have lost ${0} for killing a {1}." },
                { "NoPermission", "You have no permission to use this command." },
                { "Usage", "Usage: /{0} [value] [amount]" },
                { "NotaNumber", "Error: value is not a number." },
                { "Success", "Successfully changed '{0}' to earn amount '{1}'." },
                { "ValueDoesNotExist", "Value '{0}' does not exist." }
            }, this);

            lang.RegisterMessages(new Dictionary<string, string>
            {
                { "ReceivedForGather", "Вы получили ${0} за сбор {1}." },
                { "LostForGather", "Вы потеряли ${0} за сбор {1}." },
                { "ReceivedForKill", "Вы получили ${0} за убийство {1}." },
                { "LostForKill", "Вы потеряли $ {0} за убийство {1}." },
                { "NoPermission", "У вас нет прав использовать эту команду." },
                { "Usage", "Использование: / {0} [значение] [количество]" } ,
                { "NotaNumber", "Ошибка: значение не является числом." },
                { "Success", "Успешно изменено '{0}', чтобы заработать деньги '{1}'." },
                { "ValueDoesNotExist", "Значение '{0}' не существует." }
            }, this, "ru");
        }

        private void Init()
        {
            LoadConfigValues();
            Language();
            RegisterPermsAndCommands();
        }

        private void RegisterPermsAndCommands()
        {
            permission.RegisterPermission(config.Settings.EditPermission, this);

            var command = Interface.Oxide.GetLibrary<Command>();
            command.AddChatCommand(config.Settings.ChatEditCommand, this, "cmdGatherRewards");
            command.AddConsoleCommand(config.Settings.ConsoleEditCommand, this, "cmdConsoleGatherRewards");
        }

        private void GiveCredit(BasePlayer player, string type, float amount, string gathered)
        {
            if (amount > 0)
            {
                if (config.Settings.UseEconomics && Economics) { Economics.Call("Deposit", player.UserIDString, (double)amount); }
                if (config.Settings.UseServerRewards && ServerRewards) { ServerRewards.Call("AddPoints", new object[] { player.userID, (int)amount }); }
                if (type == "gather" && config.Settings.ShowMessagesOnGather) { PrintToChat(player, config.Settings.PluginPrefix + " " + string.Format(Lang("ReceivedForGather", player), amount, gathered.ToLower())); }
                else if (type == "kill" && config.Settings.ShowMessagesOnKill) { PrintToChat(player, config.Settings.PluginPrefix + " " + string.Format(Lang("ReceivedForKill", player), amount, gathered.ToLower())); }
            }
            else
            {
                amountstring = amount.ToString().Replace("-", "");
                amount = float.Parse(amountstring);

                if (config.Settings.UseEconomics && Economics) { Economics.Call("Withdraw", player.UserIDString, (double)amount); }
                if (config.Settings.UseServerRewards && ServerRewards) { ServerRewards.Call("TakePoints", new object[] { player.userID, (int)amount }); }

                if (type == "gather" && config.Settings.ShowMessagesOnGather) { PrintToChat(player, config.Settings.PluginPrefix + " " + string.Format(Lang("LostForGather", player), amount, gathered.ToLower())); }
                else if (type == "kill" && config.Settings.ShowMessagesOnKill) { PrintToChat(player, config.Settings.PluginPrefix + " " + string.Format(Lang("LostForKill", player), amount, gathered.ToLower())); }
            }
        }

        private void OnDispenserGather(ResourceDispenser dispenser, BaseEntity entity, Item item)
        {
            if (!Economics && !ServerRewards) return;
            var player = entity.ToPlayer();

            if (player)
            {
                amount = 0;
                var shortName = item.info.shortname;
                resource = null;

                if (shortName.Contains(".ore"))
                {
                    amount = config.Settings.Rewards[PluginRewards.Ore];
                    resource = "ore";
                }

                if (shortName.Contains("stones"))
                {
                    amount = config.Settings.Rewards[PluginRewards.Stone];
                    resource = "stone";
                }

                if (dispenser.GetComponentInParent<TreeEntity>() && shortName.Contains("wood"))
                {
                    amount = config.Settings.Rewards[PluginRewards.Wood];
                    resource = "wood";
                }

                if (resource != null && amount != 0)
                {
                    GiveCredit(player, "gather", amount, resource);
                }
            }
        }

		private void OnCollectiblePickup(Item item, BasePlayer player)
		{
			if (!Economics && !ServerRewards) return;
			if (player == null) return;
			resource = null;
            amount = 0;

			if (item.ToString().Contains("stones"))
			{
				amount = config.Settings.Rewards[PluginRewards.Stone];
                resource = "stone";
			}

			if (item.ToString().Contains(".ore"))
			{
				amount = config.Settings.Rewards[PluginRewards.Ore];
                resource = "ore";
			}

			if (item.ToString().Contains("wood"))
			{
				amount = config.Settings.Rewards[PluginRewards.Wood];
                resource = "wood";
			}

            if (item.ToString().Contains("mushroom"))
            {
                amount = config.Settings.Rewards[PluginRewards.Mushroom];
                resource = "mushrooms";
            }

            if (item.ToString().Contains("seed.corn"))
            {
                amount = config.Settings.Rewards[PluginRewards.Corn];
                resource = "corn";
            }

            if (item.ToString().Contains("seed.hemp"))
            {
                amount = config.Settings.Rewards[PluginRewards.Hemp];
                resource = "hemp";
            }

            if (item.ToString().Contains("seed.pumpkin"))
            {
                amount = config.Settings.Rewards[PluginRewards.Pumpkin];
                resource = "pumpkins";
            }

            if (resource != null && amount != 0)
			{
                GiveCredit(player, "gather", amount, resource);
            }
		}

        private void OnEntityDeath(BaseCombatEntity entity, HitInfo info)
        {
            if (entity == null) return;
            if (!Economics && !ServerRewards) return;
            if (!info?.Initiator?.ToPlayer()) return;

            var player = info.Initiator.ToPlayer();
            var animal = UppercaseFirst(entity.LookupPrefab().ToString().Replace("[0]", ""));
            amount = 0;

            if (entity.ToPlayer() != null && !(entity is NPCPlayer))
            {
                var victim = entity.ToPlayer();
                if (player == victim) { return; }
                amount = config.Settings.Rewards[PluginRewards.Player];
                animal = "player";
                if (Friends && config.Settings.Rewards[PluginRewards.PlayerFriend] != 0)
                {
                    bool isFriend = Friends.Call<bool>("HasFriend", victim.userID, player.userID);
                    bool isFriendReverse = Friends.Call<bool>("HasFriend", player.userID, victim.userID);
                    if (isFriend && isFriendReverse)
                    {
                        amount = config.Settings.Rewards[PluginRewards.PlayerFriend];
                        animal = "friend";
                    }
                }
                if (Clans && config.Settings.Rewards[PluginRewards.ClanMember] != 0)
                {
                    string victimclan = Clans.Call<string>("GetClanOf", victim.userID);
                    string playerclan = Clans.Call<string>("GetClanOf", player.userID);
                    if (victimclan == playerclan)
                    {
                        amount = config.Settings.Rewards[PluginRewards.ClanMember];
                        animal = "clan member";
                    }
                }
            }
            else
            {
				if (entity is NPCMurderer) { animal = "Murderer"; config.Settings.Rewards.TryGetValue(animal, out amount); }
				else if (entity is NPCPlayerApex) { animal = "Scientist"; config.Settings.Rewards.TryGetValue(animal, out amount); }
                else if (entity.GetComponent("BaseNpc"))
				{
					animal = UppercaseFirst(entity.LookupPrefab().ToString().Replace("[0]", ""));
					config.Settings.Rewards.TryGetValue(animal, out amount);
				}
            }

            if (amount != 0)
            {
                GiveCredit(player, "kill", amount, animal);
            }
        }

        #endregion

        #region Commands

        private void cmdGatherRewards(BasePlayer player, string command, string[] args)
        {
            if (!(CheckPermission(player, config.Settings.EditPermission))) { SendReply(player, config.Settings.PluginPrefix + " " + Lang("NoPermission", player.UserIDString)); return; }
            if (args.Length < 2) { SendReply(player, config.Settings.PluginPrefix + " " + string.Format(Lang("Usage", player.UserIDString), config.Settings.ChatEditCommand)); return; }

            float value = 0;
            if (float.TryParse(args[1], out value) == false) { SendReply(player, config.Settings.PluginPrefix + " " + Lang("NotaNumber", player.UserIDString)); return; }

            switch (args[0].ToLower())
            {
                case "clan":
                {
                    config.Settings.Rewards[PluginRewards.ClanMember] = value;
                    Config.WriteObject(config);
                    SendReply(player, config.Settings.PluginPrefix + " " + string.Format(Lang("Success", player.UserIDString), "clan member", value));
                    break;
                }
                case "friend":
                {
                    config.Settings.Rewards[PluginRewards.PlayerFriend] = value;
                    Config.WriteObject(config);
                    SendReply(player, config.Settings.PluginPrefix + " " + string.Format(Lang("Success", player.UserIDString), "friend", value));
                    break;
                }
                default:
                {
                    bool found = false;
                    foreach (KeyValuePair<string, float> entry in config.Settings.Rewards)
                    {
                        if (found) { continue; }
                        if (!(entry.Key == UppercaseFirst(args[0].ToLower()))) { continue; }
                        found = true;
                    }
                    if (found)
                    {
                        config.Settings.Rewards[UppercaseFirst(args[0].ToLower())] = float.Parse(args[1]);
                        Config.WriteObject(config);
                        SendReply(player, config.Settings.PluginPrefix + " " + string.Format(Lang("Success", player.UserIDString), args[0].ToLower(), value));
                    }
                    else { SendReply(player, config.Settings.PluginPrefix + " " + string.Format(Lang("ValueDoesNotExist", player.UserIDString), args[0].ToLower())); }
                    break;
                }
                break;
            }
        }

        private void cmdConsoleGatherRewards(ConsoleSystem.Arg arg)
        {
            if (arg.IsAdmin != true) { return; }

            if (arg.Args == null) { Puts(string.Format(Lang("Usage"), config.Settings.ConsoleEditCommand)); return; }
            if (arg.Args.Length <= 1) { Puts(string.Format(Lang("Usage"), config.Settings.ConsoleEditCommand)); return; }

            float value = 0;
            if (float.TryParse(arg.Args[1], out value) == false) { Puts(Lang("NotaNumber")); return; }

            switch (arg.Args[0].ToLower())
            {
                case "clan":
                {
                    config.Settings.Rewards[PluginRewards.ClanMember] = value;
                    Config.WriteObject(config);
                    Puts(string.Format(Lang("Success"), "clan member", value));
                    break;
                }
                case "friend":
                {
                    config.Settings.Rewards[PluginRewards.PlayerFriend] = value;
                    Config.WriteObject(config);
                    Puts(string.Format(Lang("Success"), "friend", value));
                    break;
                }
                default:
                {
                    bool found = false;
                    foreach (KeyValuePair<string, float> entry in config.Settings.Rewards)
                    {
                        if (found) { continue; }
                        if (!(entry.Key == UppercaseFirst(arg.Args[0].ToLower()))) { continue; }
                        found = true;
                    }
                    if (found)
                    {
                        config.Settings.Rewards[UppercaseFirst(arg.Args[0].ToLower())] = float.Parse(arg.Args[1]);
                        Config.WriteObject(config);
                        Puts(string.Format(Lang("Success"), arg.Args[0].ToLower(), value));
                    }
                    else { Puts(string.Format(Lang("ValueDoesNotExist"), arg.Args[0].ToLower())); }
                    break;
                }
                break;
            }
        }
        #endregion
    }
}

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