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

FREE UEconomics : 0.1.2 0.1.2

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

namespace Oxide.Plugins
{
    [Info("Univeral Economics", "k1lly0u", "0.1.2", ResourceId = 2129)]
    class UEconomics : CovalencePlugin
    {
        #region Fields
        StoredData storedData;
        private DynamicConfigFile data;

        private Dictionary<string, double> moneyCache;
        #endregion

        #region Oxide Hooks
        void Loaded()
        {            
            data = Interface.Oxide.DataFileSystem.GetFile("ueconomics_data");
            lang.RegisterMessages(Messages, this);
            permission.RegisterPermission("ueconomics.admin", this);
            moneyCache = new Dictionary<string, double>();
        }
        void OnServerInitialized()
        {
            LoadVariables();
            LoadData();
            if (configData.ClearDefaults)
                ClearDefaultEntries();
        }
        void OnServerSave() => SaveData();
        void Unload() => SaveData();
        #endregion

        #region Functions
        private void ClearDefaultEntries()
        {
            PrintWarning("Clearing unused money data");
            for (int i = 0; i < moneyCache.Keys.ToArray().Length; i++)
            {
                var entry = moneyCache.Keys.ToArray()[i];
                if (moneyCache[entry] == configData.StartingMoney)
                    moneyCache.Remove(entry);
            } 
        }
        private void CheckUser(string ID)
        {
            if (!moneyCache.ContainsKey(ID))
                moneyCache.Add(ID, configData.StartingMoney);
        }
        private void Deposit(string ID, double amount)
        {
            CheckUser(ID);
            moneyCache[ID] += amount;
        }
        private bool Withdraw(string ID, double amount)
        {
            if (amount <= 0) return false;
            CheckUser(ID);
            double userMoney = GetUserMoney(ID);
            if (userMoney >= amount)
            {
                moneyCache[ID] -= amount;
                return true;
            }
            return false;
        }
        private double GetUserMoney(string ID)
        {
            double amount;
            CheckUser(ID);
            moneyCache.TryGetValue(ID, out amount);
            return amount;
        }
        private bool IsBanker(IPlayer player) => permission.UserHasPermission(player.Id, "ueconomics.admin") || player.IsAdmin;
        private object GetUser(string name)
        {
            var targets = players.FindPlayers(name);
            if (targets != null)
            {
                if (targets.ToArray().Length > 1)
                    return msg("Multiple players found with that name");
                if (targets.ToArray().Length < 1)
                    return msg("No players found with that name");
                if (targets.ToArray()[0] != null)
                    return targets.ToArray()[0];
            }
            return msg("No players found with that name");
        }
        #endregion

        #region Commands
        [Command("eco")]
        void cmdEco(IPlayer player, string command, string[] args)
        {
            if (args == null || args.Length == 0)
            {
                player.Reply($"{Title}  v {Version}");
                player.Reply(msg("/eco balance - Check your account balance", player.Id));
                player.Reply(msg("/eco transfer <partialname> <amount> - Transfer funds to another player", player.Id));
                if (IsBanker(player))
                {
                    player.Reply(msg("/eco balance <partialname> - Check a players account balance", player.Id));
                    player.Reply(msg("/eco deposit <partialname> <amount> - Deposit funds to a players account", player.Id));
                    player.Reply(msg("/eco withdraw <partialname> <amount> - Withdraw funds from a players account", player.Id));
                    player.Reply(msg("/eco set <partialname> <amount> - Set the funds in a players account", player.Id));
                }
                return;
            }
            switch (args[0].ToLower())
            {
                case "balance":
                    if (args.Length >= 2 && IsBanker(player))
                    {
                        var target = GetUser(args[1]);
                        if (target is IPlayer)
                        {
                            double amount = Math.Round(GetUserMoney((target as IPlayer).Id), 2);
                            player.Reply(string.Format(msg("{0}'s Account Balance: {1} {2}(s)", player.Id), (target as IPlayer).Name, amount, configData.CurrencyName));
                        }
                        else player.Reply((string)target);
                    }
                    else
                    {
                        double amount = Math.Round(GetUserMoney((player as IPlayer).Id), 2);
                        player.Reply(string.Format(msg("Account Balance: {0} {1}(s)", player.Id), amount, configData.CurrencyName));
                    }
                    return;
                case "transfer":
                    if (args.Length >= 3)
                    {
                        var target = GetUser(args[1]);
                        if (target is IPlayer)
                        {
                            double sending;
                            if (!double.TryParse(args[2], out sending))
                            {
                                player.Reply(msg("You must enter an amount", player.Id));
                                return;
                            }
                            if (Withdraw(player.Id, sending))
                            {
                                Deposit((target as IPlayer).Id, sending);
                                if ((target as IPlayer).IsConnected)
                                    (target as IPlayer).Reply(string.Format(msg("{0} has deposited {1} {2}(s) into your account", (target as IPlayer).Id), player.Name, sending, configData.CurrencyName));
                                player.Reply(string.Format(msg("You have deposited {0} {1}(s) into {2}'s account", player.Id), sending, configData.CurrencyName, (target as IPlayer).Name));
                            }
                            else player.Reply(msg("You do not have enough funds to transfer", player.Id));
                        }
                        else player.Reply((string)target);
                    }
                    else player.Reply("/eco transfer <partialname> <amount>");
                    return;
                case "deposit":
                    if (IsBanker(player))
                    {
                        if (args.Length >= 3)
                        {
                            var target = GetUser(args[1]);
                            if (target is IPlayer)
                            {
                                double sending = 0;
                                if (!double.TryParse(args[2], out sending))
                                {
                                    player.Reply(msg("You must enter an amount", player.Id));
                                    return;
                                }
                                Deposit((target as IPlayer).Id, sending);
                                if ((target as IPlayer).IsConnected)
                                    (target as IPlayer).Reply(string.Format(msg("{0} has deposited {1} {2}(s) into your account", (target as IPlayer).Id), player.Name, sending, configData.CurrencyName));
                                player.Reply(string.Format(msg("You have deposited {0} {1}(s) into {2}'s account", player.Id), sending, configData.CurrencyName, (target as IPlayer).Name));
                            }
                            else player.Reply((string)target);
                        }
                        else player.Reply("/eco deposit <partialname> <amount>");
                    }
                    return;
                case "withdraw":
                    if (IsBanker(player))
                    {
                        if (args.Length >= 3)
                        {
                            var target = GetUser(args[1]);
                            if (target is IPlayer)
                            {
                                double amount = 0;
                                if (!double.TryParse(args[2], out amount))
                                {
                                    player.Reply(msg("You must enter an amount", player.Id));
                                    return;
                                }
                                if (Withdraw((target as IPlayer).Id, amount))
                                {
                                    if ((target as IPlayer).IsConnected)
                                        (target as IPlayer).Reply(string.Format(msg("{0} has withdrawn {1} {2}(s) from your account", (target as IPlayer).Id), player.Name, amount, configData.CurrencyName));
                                    player.Reply(string.Format(msg("You have withdrawn {0} {1}(s) from {2}'s account", player.Id), amount, configData.CurrencyName, (target as IPlayer).Name));
                                }
                                else player.Reply(string.Format(msg("{0} does not have enough funds to withdraw that amount", player.Id), (target as IPlayer).Name));
                            }
                            else player.Reply((string)target);
                        }
                        else player.Reply("/eco withdraw <partialname> <amount>");
                    }
                    return;
                case "set":
                    if (IsBanker(player))
                    {
                        if (args.Length >= 3)
                        {
                            var target = GetUser(args[1]);
                            if (target is IPlayer)
                            {
                                double amount = 0;
                                if (!double.TryParse(args[2], out amount))
                                {
                                    player.Reply(msg("You must enter an amount", player.Id));
                                    return;
                                }
                                CheckUser((target as IPlayer).Id);
                                moneyCache[(target as IPlayer).Id] = amount;
                                if ((target as IPlayer).IsConnected)
                                    (target as IPlayer).Reply(string.Format(msg("{0} has set your account funds to {1}", (target as IPlayer).Id), player.Name, amount));
                                player.Reply(string.Format(msg("You have set {0}'s account funds to {1}", player.Id), (target as IPlayer).Name, amount));
                                return;
                            }
                            else player.Reply((string)target);
                        }
                        else player.Reply("/eco set <partialname> <amount>");
                    }
                    return;
                default:
                    break;
            }
        }
        #endregion

        #region Config        
        private ConfigData configData;
        class ConfigData
        {
            public bool ClearDefaults { get; set; }
            public int StartingMoney { get; set; }
            public string CurrencyName { get; set; }
        }
        private void LoadVariables()
        {
            LoadConfigVariables();
            SaveConfig();
        }
        protected override void LoadDefaultConfig()
        {
            var config = new ConfigData
            {
                ClearDefaults = true,
                CurrencyName = "dollar",
                StartingMoney = 1000
            };
            SaveConfig(config);
        }
        private void LoadConfigVariables() => configData = Config.ReadObject<ConfigData>();
        void SaveConfig(ConfigData config) => Config.WriteObject(config, true);
        #endregion

        #region Data Management
        void SaveData()
        {
            storedData.money = moneyCache;
            data.WriteObject(storedData);
        }
        void LoadData()
        {
            try
            {
                storedData = data.ReadObject<StoredData>();
                moneyCache = storedData.money;
            }
            catch
            {
                storedData = new StoredData();
            }
        }
        class StoredData
        {
            public Dictionary<string, double> money = new Dictionary<string, double>();
        }
        #endregion

        #region Localization
        string msg(string key, string id = null) => lang.GetMessage(key, this, id);

        Dictionary<string, string> Messages = new Dictionary<string, string>
        {
            {"{0} has set your account funds to {1}","{0} has set your account funds to {1}" },
            {"You have set {0}'s account funds to {1}","You have set {0}'s account funds to {1}" },
            {"You must enter an amount", "You must enter an amount"},
            {"{0} does not have enough funds to withdraw that amount", "{0} does not have enough funds to withdraw that amount"},
            {"You have withdrawn {0} {1}(s) from {2}'s account", "You have withdrawn {0} {1}(s) from {2}'s account"},
            {"{0} has withdrawn {1} {2}(s) from your account", "{0} has withdrawn {1} {2}(s) from your account"},
            {"You have deposited {0} {1}(s) into {2}'s account", "You have deposited {0} {1}(s) into {2}'s account"},
            {"{0} has deposited {1} {2}(s) into your account", "{0} has deposited {1} {2}(s) into your account"},
            {"You do not have enough funds to transfer", "You do not have enough funds to transfer"},
            {"Account Balance: {0} {1}(s)", "Account Balance: {0} {1}(s)"},
            {"{0}'s Account Balance: {1} {2}(s)", "{0}'s Account Balance: {1} {2}(s)"},
            {"No players found with that name", "No players found with that name"},
            {"Multiple players found with that name", "Multiple players found with that name"},
            {"/eco balance - Check your account balance", "/eco balance - Check your account balance"},
            {"/eco transfer <partialname> <amount> - Transfer funds to another player", "/eco transfer <partialname> <amount> - Transfer funds to another player"},
            {"/eco balance <partialname> - Check a players account balance", "/eco balance <partialname> - Check a players account balance"},
            {"/eco deposit <partialname> <amount> - Deposit funds to a players account", "/eco deposit <partialname> <amount> - Deposit funds to a players account"},
            {"/eco withdraw <partialname> <amount> - Withdraw funds from a players account", "/eco withdraw <partialname> <amount> - Withdraw funds from a players account"},
            {"/eco set <partialname> <amount> - Set the funds in a players account", "/eco set <partialname> <amount> - Set the funds in a players account"}
        };
        #endregion
    }
}

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