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

FREE IQEconomic : 1.11.17 1.11.17

Нет прав для скачивания
C#:
using Newtonsoft.Json;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core;
using System.Linq;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using ConVar;
using Object = System.Object;
using System.Collections.Generic;
using System;
using System.Text;
using UnityEngine;
using System.Text.RegularExpressions;
using Network;
namespace Oxide.Plugins {
    [Info("IQEconomic", "15FPS", "1.11.17")]
    [Description("Экономика на ваш сервер")]
    class IQEconomic : RustPlugin {
        private Double TimeUnblockExchange(Int32 TimeExchange) => (SaveRestore.SaveCreatedTime.ToUniversalTime().Subtract(epoch).TotalSeconds + TimeExchange) - CurrentTime;
        void API_TRANSFERS(ulong userID, string trasferUserID, int Balance) => TransferPlayer(userID, ulong.Parse(trasferUserID), Balance);
        private const Boolean LanguageEn = false;
        bool API_IS_USER(ulong userID) => IsData(userID);
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                config = Config.ReadObject<Configuration>();
                if (config == null) LoadDefaultConfig();
                if (config.TransferSettings.ExchangeRates == null || config.TransferSettings.ExchangeRates.Count == 0) {
                    config.TransferSettings.ExchangeRates = new Dictionary<Int32, Configuration.TransferSetting.ExchangeRate>() {
                        [0]
                        = new Configuration.TransferSetting.ExchangeRate() {
                            MoneyCount = 3, StoresMoneyCount = 1
                        }
                        , [86400] = new Configuration.TransferSetting.ExchangeRate() {
                            MoneyCount = 4, StoresMoneyCount = 1
                        }
                        , [172800] = new Configuration.TransferSetting.ExchangeRate() {
                            MoneyCount = 5, StoresMoneyCount = 1
                        }
                        , [259200] = new Configuration.TransferSetting.ExchangeRate() {
                            MoneyCount = 6, StoresMoneyCount = 1
                        }
                        , [345600] = new Configuration.TransferSetting.ExchangeRate() {
                            MoneyCount = 8, StoresMoneyCount = 2
                        }
                        ,
                    }
                    ;
                }
                if (config.GeneralSetting.SettingDropMoneyPreset == null) config.GeneralSetting.SettingDropMoneyPreset = new Configuration.GeneralSettings.SettingDropMoney() {
                    UseDropMoney = false, Presets = new Dictionary<String, Configuration.GeneralSettings.SettingDropMoney.Preset>() {
                        ["crate_elite"]
                        = new Configuration.GeneralSettings.SettingDropMoney.Preset() {
                            Rare = 100, MoneyMin = 3, MoneyMax = 5
                        }
                        , ["crate_normal"] = new Configuration.GeneralSettings.SettingDropMoney.Preset() {
                            Rare = 10, MoneyMin = 30, MoneyMax = 50
                        }
                        ,
                    }
                }
                ;
                if (config.GeneralSetting.SettingDropMoneyPreset.Presets == null || config.GeneralSetting.SettingDropMoneyPreset.Presets.Count == 0) {
                    config.GeneralSetting.SettingDropMoneyPreset.Presets = new Dictionary<String, Configuration.GeneralSettings.SettingDropMoney.Preset>() {
                        ["crate_elite"]
                        = new Configuration.GeneralSettings.SettingDropMoney.Preset() {
                            Rare = 100, MoneyMin = 3, MoneyMax = 5
                        }
                        , ["crate_normal"] = new Configuration.GeneralSettings.SettingDropMoney.Preset() {
                            Rare = 10, MoneyMin = 30, MoneyMax = 50
                        }
                        ,
                    }
                    ;
                }
            }
            catch {
                PrintWarning(LanguageEn ? "Error #49" + $"reading the configuration 'oxide/config/{Name}', creating a new configuration! #33" : "Ошибка #49" + $"чтения конфигурации 'oxide/config/{Name}', создаём новую конфигурацию! #33");
                LoadDefaultConfig();
            }
            NextTick(SaveConfig);
        }
        object CanCombineDroppedItem(DroppedItem item, DroppedItem targetItem) {
            if (item.GetItem().skin != targetItem.GetItem().skin) return false;
            return null;
        }
        private Dictionary<uint, Dictionary<ulong, int>> HeliAttackers = new Dictionary<uint, Dictionary<ulong, int>>();
        public int TakeMoneyContainerItem(ItemContainer container, int itemid, int iAmount) {
            int num = 0;
            if (iAmount == 0) return num;
            List<Item> list = Facepunch.Pool.GetList<Item>();
            foreach (Item item in container.itemList) {
                if (item.info.itemid == itemid && item.skin == config.CustomMoneySetting.SkinID) {
                    int num2 = iAmount - num;
                    if (num2 > 0) {
                        if (item.amount > num2) {
                            item.MarkDirty();
                            item.amount -= num2;
                            num += num2;
                            break;
                        }
                        else {
                            if (item.amount <= num2) {
                                num += item.amount;
                                list.Add(item);
                            }
                            if (num == iAmount) break;
                        }
                    }
                }
            }
            foreach (Item item3 in list) item3.RemoveFromContainer();
            Facepunch.Pool.FreeList<Item>(ref list);
            return num;
        }
        public Boolean IsDuel(UInt64 userID) {
            Object obj = Interface.Oxide.RootPluginManager.GetPlugin("AimTraining")?.CallHook("IsArenaPlayer", userID);
            if (obj is Boolean) return (Boolean)obj;
            else if (Battles) return (Boolean)Battles?.Call("IsPlayerOnBattle", userID);
            else if (Duel) return (Boolean)Duel?.Call("IsPlayerOnActiveDuel", BasePlayer.FindByID(userID));
            else if (Duelist) return (Boolean)Duelist?.Call("inEvent", BasePlayer.FindByID(userID));
            else if (ArenaTournament) return ArenaTournament.Call<Boolean>("IsOnTournament", userID);
            else if (XFarmRoom) return XFarmRoom.Call<Boolean>("API_PlayerInRoom", userID);
            else return false;
        }
        void API_SET_BALANCE(ulong userID, int Balance, ItemContainer itemContainer = null) => SetBalance(userID, Balance, itemContainer);
        private void TrackerTime() {
            Configuration.GeneralSettings.TimeSettingsReward TimeSetting = config.GeneralSetting.TimeReward;
            IEnumerable<BasePlayer> FiltredList = !String.IsNullOrWhiteSpace(TimeSetting.PermissionReward) ? BasePlayer.activePlayerList.Where(x => permission.UserHasPermission(x.UserIDString, TimeSetting.PermissionReward)) : BasePlayer.activePlayerList;
            foreach (BasePlayer player in FiltredList) if (DataEconomics[player.userID].Time <= CurrentTime) {
                Int32 SetTime = Convert.ToInt32(config.GeneralSetting.TimeReward.OnlineTime + CurrentTime);
                SetBalance(player.userID, config.GeneralSetting.TimeReward.OnlineTimeReward);
                DataEconomics[player.userID].Time = SetTime;
            }
        }
        private static string HexToRustFormat(string hex) {
            Color color;
            ColorUtility.TryParseHtmlString(hex, out color);
            return string.Format("{0:F2} {1:F2} {2:F2} {3:F2}", color.r, color.g, color.b, color.a);
        }
        void API_TRANSFERS(string userID, BasePlayer trasferPlayer, int Balance) => TransferPlayer(ulong.Parse(userID), trasferPlayer.userID, Balance);
        private static StringBuilder sb = new StringBuilder();
        public void Interface_Changer(BasePlayer player) {
            CuiElementContainer container = new CuiElementContainer();
            CuiHelper.DestroyUi(player, UI_CHANGER_PARENT);
            Configuration.TransferSetting.ExchangeRate Transfer = GetExcahngeRate();
            container.Add(new CuiPanel {
                CursorEnabled = false, Image = {
                    Color = "0.1607843 0.1647059 0.1294118 0.6117647", Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat"
                }
                , RectTransform = {
                    AnchorMin = "0.5 0", AnchorMax = "0.5 0", OffsetMin = "-199.937 81.1", OffsetMax = "180.454 133.498"
                }
            }
            , "Overlay", UI_CHANGER_PARENT);
            container.Add(new CuiPanel {
                CursorEnabled = false, Image = {
                    Color = "0.1607843 0.1647059 0.1294118 1"
                }
                , RectTransform = {
                    AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "13.656 -26.2", OffsetMax = "66.238 26.199"
                }
            }
            , UI_CHANGER_PARENT, "PanelBackgroundMoney");
            container.Add(new CuiElement {
                Name = "MoneyItem", Parent = "PanelBackgroundMoney", Components = {
                    new CuiRawImageComponent {
                        Color = "1 1 1 1", Png = GetImage("URLStores")
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0.5 1", AnchorMax = "0.5 1", OffsetMin = "-15.747 -40.3", OffsetMax = "16.253 -8.3"
                    }
                }
            }
            );
            container.Add(new CuiPanel {
                CursorEnabled = false, Image = {
                    Color = "0.1607843 0.1647059 0.1294118 1"
                }
                , RectTransform = {
                    AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-130.174 -26.2", OffsetMax = "-77.592 26.199"
                }
            }
            , UI_CHANGER_PARENT, "PanelBackgroundCoin");
            container.Add(new CuiElement {
                Name = "CoinsItem", Parent = "PanelBackgroundCoin", Components = {
                    new CuiRawImageComponent {
                        Color = "1 1 1 1", Png = GetImage("URLMoney")
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0.5 1", AnchorMax = "0.5 1", OffsetMin = "-15.217 -40.3", OffsetMax = "16.783 -8.3"
                    }
                }
            }
            );
            container.Add(new CuiButton {
                Button = {
                    Color = HexToRustFormat("#B03825"), Close = UI_CHANGER_PARENT
                }
                , Text = {
                    Text = "<b>✖</b>", Font = "robotocondensed-regular.ttf", FontSize = 30, Align = TextAnchor.MiddleCenter, Color = "0.7843137 0.627451 0.5921569 1"
                }
                , RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "0 0", OffsetMin = "0 0", OffsetMax = "60.019 52.398"
                }
            }
            , UI_CHANGER_PARENT, "CloseBut");
            container.Add(new CuiButton {
                Button = {
                    Color = HexToRustFormat("#89B63B"), Command = "transfer"
                }
                , Text = {
                    Text = GetLang("UI_CHANGER_TRANSFER", player.UserIDString), Font = "robotocondensed-regular.ttf", FontSize = 14, Align = TextAnchor.MiddleCenter, Color = "0.8431373 0.9215686 0.6588235 1"
                }
                , RectTransform = {
                    AnchorMin = "1 0", AnchorMax = "1 0", OffsetMin = "-123.951 0", OffsetMax = "-0.001 24.934"
                }
            }
            , UI_CHANGER_PARENT, "TransferBut");
            container.Add(new CuiButton {
                Button = {
                    Color = HexToRustFormat("#89B63B"), Command = "transfer.all"
                }
                , Text = {
                    Text = GetLang("UI_CHANGER_TRANSFER_ALL", player.UserIDString), Font = "robotocondensed-regular.ttf", FontSize = 14, Align = TextAnchor.MiddleCenter, Color = "0.8431373 0.9215686 0.6588235 1"
                }
                , RectTransform = {
                    AnchorMin = "1 1", AnchorMax = "1 1", OffsetMin = "-123.957 -24.934", OffsetMax = "0.003 0"
                }
            }
            , UI_CHANGER_PARENT, "TransferButAll");
            container.Add(new CuiElement {
                Name = "BalanceCount", Parent = UI_CHANGER_PARENT, Components = {
                    new CuiTextComponent {
                        Text = GetLang("UI_MY_BALANCE_TRANSFER", player.UserIDString, GetBalance(player.userID)), Font = "robotocondensed-regular.ttf", FontSize = 9, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"
                    }
                    , new CuiOutlineComponent {
                        Color = "0 0 0 0.5", Distance = "1 -1"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0.5 0", AnchorMax = "0.5 0", OffsetMin = "-130.179 0", OffsetMax = "66.241 13.579"
                    }
                }
            }
            );
            container.Add(new CuiPanel {
                CursorEnabled = false, Image = {
                    Color = "1 1 1 1", Sprite = "assets/icons/chevron_right.png"
                }
                , RectTransform = {
                    AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-47.969 -13.801", OffsetMax = "-15.9690172 18.1990172"
                }
            }
            , UI_CHANGER_PARENT, "PanelNextVisual");
            container.Add(new CuiElement {
                Name = "LabelAmountCoin", Parent = UI_CHANGER_PARENT, Components = {
                    new CuiTextComponent {
                        Text = $"X{Transfer.MoneyCount}", Font = "robotocondensed-regular.ttf", FontSize = 15, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"
                    }
                    , new CuiOutlineComponent {
                        Color = "0 0 0 0.5", Distance = "1 -1"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-75.169 -10.817", OffsetMax = "-47.969 15.215"
                    }
                }
            }
            );
            container.Add(new CuiElement {
                Name = "LabelAmountBalance", Parent = UI_CHANGER_PARENT, Components = {
                    new CuiTextComponent {
                        Text = $"X{Transfer.StoresMoneyCount}", Font = "robotocondensed-regular.ttf", FontSize = 15, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"
                    }
                    , new CuiOutlineComponent {
                        Color = "0 0 0 0.5", Distance = "1 -1"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-15.969 -10.817", OffsetMax = "11.23 15.215"
                    }
                }
            }
            );
            container.Add(new CuiElement {
                Name = "IQEconomicLabel", Parent = UI_CHANGER_PARENT, Components = {
                    new CuiTextComponent {
                        Text = GetLang("UI_CHANGER_TRANSFER_TITLE", player.UserIDString), Font = "robotocondensed-regular.ttf", FontSize = 20, Align = TextAnchor.UpperCenter, Color = "1 1 1 1"
                    }
                    , new CuiOutlineComponent {
                        Color = "0 0 0 0.5", Distance = "1 -1"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-190.196 41.482", OffsetMax = "190.194 68.72"
                    }
                }
            }
            );
            if (config.TransferSettings.UseLimits) container.Add(new CuiElement {
                Name = "IQEconomicLabelAccesLimit", Parent = UI_CHANGER_PARENT, Components = {
                    new CuiTextComponent {
                        Text = GetLang("UI_LIMITED_PLAYER", player.UserIDString, GetLimit(player.userID)), Font = "robotocondensed-regular.ttf", FontSize = 13, Align = TextAnchor.UpperCenter, Color = "1 1 1 1"
                    }
                    , new CuiOutlineComponent {
                        Color = "0 0 0 0.5", Distance = "1 -1"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-190.197 26.199", OffsetMax = "190.193 46.643"
                    }
                }
            }
            );
            CuiHelper.AddUi(player, container);
        }
        private Item OnItemSplit(Item item, int amount) {
            if (plugins.Find("Stacks") || plugins.Find("CustomSkinsStacksFix") || plugins.Find("SkinBox") || plugins.Find("StackModifier")) return null;
            var CustomMoney = config.CustomMoneySetting;
            if (CustomMoney.SkinID == 0) return null;
            if (item.skin == CustomMoney.SkinID) {
                Item x = ItemManager.CreateByPartialName(CustomMoney.Shortname, amount);
                x.name = CustomMoney.DisplayName;
                x.skin = CustomMoney.SkinID;
                x.amount = amount;
                item.amount -= amount;
                return x;
            }
            return null;
        }
        void OnNewSave(string filename) => ClearDataFile();
        void OnEntitySpawned(BaseNetworkable entity) {
            if (entity == null) return;
            if (!config.GeneralSetting.SettingDropMoneyPreset.Presets.ContainsKey(entity.ShortPrefabName)) return;
            LootContainer Container = entity.GetComponent<LootContainer>();
            if (Container == null) return;
            if (Container.inventory.IsFull()) return;
            Configuration.GeneralSettings.SettingDropMoney.Preset Preset = config.GeneralSetting.SettingDropMoneyPreset.Presets[entity.ShortPrefabName];
            if (!IsRare(Preset.Rare)) return;
            Int32 RandomMoney = UnityEngine.Random.Range(Preset.MoneyMin, Preset.MoneyMax);
            Item ItemMoney = CreateCustomMoney(RandomMoney);
            if (ItemMoney == null) return;
            ItemMoney.MoveToContainer(Container.inventory);
        }
        void API_TRANSFERS(string userID, ulong trasferUserID, int Balance) => TransferPlayer(ulong.Parse(userID), trasferUserID, Balance);
        Item CreateCustomMoney(int Amount) {
            var CustomMoney = config.CustomMoneySetting;
            Item Money = ItemManager.CreateByName(CustomMoney.Shortname, Amount, CustomMoney.SkinID);
            Money.name = CustomMoney.DisplayName;
            return Money;
        }
        void OnPlayerConnected(BasePlayer player) => ConnectedPlayer(player);
        void API_TRANSFERS(BasePlayer player, BasePlayer trasferPlayer, int Balance) => TransferPlayer(player.userID, trasferPlayer.userID, Balance);
        public class InformationData {
            [JsonProperty(LanguageEn ? "Player Balance" : "Баланс игрока")]
            public Int32 Balance;
            [JsonProperty(LanguageEn ? "Player's balance withdrawal limit" : "Лимит вывода баланса игрока")]
            public Int32 LimitBalance;
            [JsonProperty(LanguageEn ? "Time counter" : "Счетчик времени")]
            public Int32 Time;
            [JsonProperty(LanguageEn ? "The player's last login to the server" : "Последний вход игрока на сервер")]
            public Double DateTime;
        }
        [ConsoleCommand("transfer.all")]
        void TransferAll(ConsoleSystem.Arg args) {
            BasePlayer player = args.Player();
            if (player == null) return;
            Int32 Balance = config.TransferSettings.UseLimits ? GetBalance(player.userID) > GetLimit(player.userID) ? GetLimit(player.userID) : GetBalance(player.userID) : GetBalance(player.userID);
            Configuration.TransferSetting.ExchangeRate Transfer = GetExcahngeRate();
            if (Transfer == null) {
                SendChat(GetLang("UI_NO_EXCANCHGE", player.UserIDString), player);
                return;
            }
            if (!IsTransfer(Balance, Transfer.MoneyCount)) return;
            var Reference = config.ReferenceSettings;
            if (Reference.GameStoreshUse) GameStoresBalanceSet(player.userID, Convert.ToInt32((Balance / Transfer.MoneyCount) * Transfer.StoresMoneyCount), Balance);
            if (Reference.MoscovOvhUse) MoscovOVHBalanceSet(player.userID, Convert.ToInt32((Balance / Transfer.MoneyCount) * Transfer.StoresMoneyCount), Balance);
            if (config.TransferSettings.UseLimits) LimitedUpdate(player.userID, Balance);
        }
        public bool IsData(ulong userID) {
            if (DataEconomics.ContainsKey(userID)) return true;
            else return false;
        }
        private void ResetLimit() {
            if (!config.TransferSettings.UseLimits) return;
            timer.Once(300f, ResetLimit);
            if (ActualityLimitTime > CurrentTime) return;
            ActualityLimitTime = Convert.ToInt32(CurrentTime + config.TransferSettings.LimitTime);
            foreach (var Value in DataEconomics.Values) NextTick(() => {
                Value.LimitBalance = config.TransferSettings.LimitBalance;
            }
            );
            Puts(LanguageEn ? "The balance limit has been reset for the time elapsed" : "Лимит баланса был сброшен за пройденное время");
        }
        [ConsoleCommand("iq.eco")]
        //iq.eco give.store 76561198807822175 300
        void IQEconomicCommandsAdmin(ConsoleSystem.Arg arg) {
            if (arg.Player() != null && !arg.Player().IsAdmin) return;
            if (!arg.HasArgs(3)) return;
            string NamaOrID = arg.GetString(1);
            if(string.IsNullOrWhiteSpace(NamaOrID)) {
                PrintWarning(LanguageEn ? "Enter nickname or SteamID" : "Введите ник или SteamID");
                return;
            }
            IPlayer iPlayer = covalence.Players.FindPlayer(NamaOrID);
            if(iPlayer == null) {
                PrintWarning(LanguageEn ? "There is no such player" : $"Такого игрока не существует");
                return;
            }
            int amount = arg.GetInt(2, -1);
            if (amount == -1) {
                PrintWarning(LanguageEn ? "The second argument is not a number!" : "Второй аргумент не является числом!");
                return;
            }
            ulong userID = UInt64.Parse(iPlayer.Id);
            switch(arg.GetString(0)) {
                case "give" : {
                    SetBalance(userID, amount);
                    Puts(LanguageEn ? $"Player {userID} successfully credited {amount} of coins" : $"Игроку {userID} успешно зачислено {amount} монет");
                    break;
                }
                case "remove" : {
                    RemoveBalance(userID, amount);
                    Puts(LanguageEn ? $"Player {userID} has successfully remove {amount} of coins" : $"Игроку {userID} успешно снято {amount} монет");
                    break;
                }
                case "give.store" : {
                    Configuration.ReferenceSetting Reference = config.ReferenceSettings;
                    if (Reference.GameStoreshUse) GameStoresBalanceSet(userID, amount);
                    if (Reference.MoscovOvhUse) MoscovOVHBalanceSet(userID, amount);
                    Puts(LanguageEn ? $"Player {userID} successfully credited {amount} to the server store" : $"Игроку {userID} успешно зачислено {amount} на магазин сервера");
                    break;
                }
            }
        }
        void OnEntityTakeDamage(BaseCombatEntity victim, HitInfo info) {
            if (victim.GetComponent<BaseHelicopter>() != null && info?.Initiator?.ToPlayer() != null) {
                var heli = victim.GetComponent<BaseHelicopter>();
                var player = info.Initiator.ToPlayer();
                NextTick(() => {
                    if (heli == null) return;
                    if (!HeliAttackers.ContainsKey(heli.prefabID)) HeliAttackers.Add(heli.prefabID, new Dictionary<ulong, int>());
                    if (!HeliAttackers[heli.prefabID].ContainsKey(player.userID)) HeliAttackers[heli.prefabID].Add(player.userID, 0);
                    object value = HeliAttackers[heli.prefabID][player.userID]++;
                }
                );
            }
        }
        public bool IsFriends(ulong userID, ulong targetID) {
            if (Friends) return (bool)Friends?.Call("HasFriend", userID, targetID);
            else return false;
        }
        void API_REMOVE_BALANCE(BasePlayer player, int Balance) => RemoveBalance(player, Balance);
        public static string UI_CHANGER_PARENT = "CHANGER_PLAYER_PARENT";
        void OnCollectiblePickup(CollectibleEntity collectible, BasePlayer player) {
            if (collectible == null) return;
            if (player == null) return;
            foreach (ItemAmount item in collectible.itemList) {
                if (item == null || player == null) return;
                Configuration.GeneralSettings.GatherSettingReward General = config.GeneralSetting.CollectableReward;
                if (!General.UseReward) return;
                Dictionary<String, Configuration.GeneralSettings.AdvancedSetting> PickupGeneral = General.GatherSetting;
                if (!String.IsNullOrWhiteSpace(General.PermissionReward) && !permission.UserHasPermission(player.UserIDString, General.PermissionReward)) return;
                if (!PickupGeneral.ContainsKey(item.itemDef.shortname)) return;
                Configuration.GeneralSettings.AdvancedSetting Gather = PickupGeneral[item.itemDef.shortname];
                if (!IsRare(Gather.Rare)) return;
                SetBalance(player.userID, Gather.Money);
            }
        }
        void API_TRANSFERS(BasePlayer player, string trasferUserID, int Balance) => TransferPlayer(player.userID, ulong.Parse(trasferUserID), Balance);
        bool API_IS_REMOVED_BALANCE(ulong userID, int Amount) => IsRemoveBalance(userID, Amount);
        public int GetBalance(BasePlayer player) {
            if (player == null) {
                PrintWarning(GetLang("BALANCE_CUSTOM_MONEY_NOT_PLAYER"));
                return 0;
            }
            return (config.UseUI) ? (IsData(player.userID) ? DataEconomics[player.userID].Balance : 0) : GetItemBalance(player);
        }
        int API_GET_BALANCE(BasePlayer player) => GetBalance(player);
        public Int32 GetLimit(UInt64 userID) => DataEconomics[userID].LimitBalance;
        private void OnServerShutdown() => Unload();
        [ConsoleCommand("transfer")]
        void ConsoleCommandTransfer(ConsoleSystem.Arg args) {
            BasePlayer player = args.Player();
            if (player == null) return;
            Int32 Balance = GetBalance(player.userID);
            var Reference = config.ReferenceSettings;
            if (IsLimited(player.userID, Balance)) {
                SendChat(GetLang("CHAT_LIMITED_PLAYER", player.UserIDString), player);
                return;
            }
            Configuration.TransferSetting.ExchangeRate Transfer = GetExcahngeRate();
            if (Transfer == null) {
                SendChat(GetLang("UI_NO_EXCANCHGE", player.UserIDString), player);
                return;
            }
            if (!IsTransfer(Balance, Transfer.MoneyCount)) return;
            if (Reference.GameStoreshUse) GameStoresBalanceSet(player.userID, Transfer.StoresMoneyCount, Transfer.MoneyCount);
            if(Reference.MoscovOvhUse) MoscovOVHBalanceSet(player.userID, Transfer.StoresMoneyCount, Transfer.MoneyCount);
            if (config.TransferSettings.UseLimits) LimitedUpdate(player.userID, Balance);
        }
        void ReadData() {
            DataEconomics = Oxide.Core.Interface.Oxide.DataFileSystem.ReadObject<Dictionary<UInt64, InformationData>>("IQEconomic/DataEconomics");
            ActualityLimitTime = Oxide.Core.Interface.Oxide.DataFileSystem.ReadObject<Int32>("IQEconomic/ActualityLimitTime");
        }
        public static string UI_BALANCE_PARENT = "BALANCE_PLAYER_PARENT";
        public void SendChat(string Message, BasePlayer player, Chat.ChatChannel channel = Chat.ChatChannel.Global) {
            var Chat = config.ReferenceSettings.ChatSettings;
            if (IQChat) if (Chat.UIAlertUse) IQChat?.Call("API_ALERT_PLAYER_UI", player, Message);
            else IQChat?.Call("API_ALERT_PLAYER", player, Message, Chat.CustomPrefix, Chat.CustomAvatar);
            else player.SendConsoleCommand("chat.add", channel, 0, Message);
        }
        public bool IsRemoveBalance(BasePlayer player, int Amount) => (GetBalance(player) >= Amount);
        protected override void SaveConfig() => Config.WriteObject(config);
        int API_GET_BALANCE(ulong userID) => GetBalance(userID);
        public void TakeMoneyPlayer(BasePlayer player, int iAmount) {
            ItemDefinition itemDefinition = ItemManager.FindItemDefinition(config.CustomMoneySetting.Shortname);
            if (itemDefinition == null) return;
            int itemID = itemDefinition.itemid;
            if (player.inventory.containerMain != null) iAmount -= TakeMoneyContainerItem(player.inventory.containerMain, itemID, iAmount);
            if (iAmount <= 0) return;
            if (player.inventory.containerBelt != null) TakeMoneyContainerItem(player.inventory.containerBelt, itemID, iAmount);
        }
        static Double CurrentTime => Facepunch.Math.Epoch.Current;
        [JsonProperty(LanguageEn ? "The economic system" : "Система экономики")]
        public Dictionary<UInt64, InformationData> DataEconomics = new Dictionary<UInt64, InformationData>();
        private class Configuration {
            [JsonProperty(LanguageEn ? "The coins will be in the form of an item - false / Otherwise there will be a chat or interface - true" : "Монетки будут и гроков на руках - false / Иначе будет чат или интерфейсе - true")]
            public Boolean UseUI;
            [JsonProperty(LanguageEn ? "Use the UI interface to display the balance (true - yes (If you did not put the coins in item))/false - the information will be in the chat on command and at the entrance)" : "Использовать UI интерфейс для отображения баланса(true - да(Если вы не поставили , чтобы монетки были на руках))/false - информация будет в чате по команде и при входе)")]
            public Boolean UseUIMoney;
            [JsonProperty(LanguageEn ? "Displaying the interface with a balance (true - displays/false - hides)" : "Отображение интерфейса с балансом(true - отображает/false - скрывает)")]
            public Boolean ShowUI;
            [JsonProperty(LanguageEn ? "Enable notifications to the player about receiving currency for mining (true - yes/false - no)" : "Включить уведомления игроку о получении валюты за добычу (true - да/false - нет)")]
            public Boolean UseAlert = true;
            [JsonProperty(LanguageEn ? "Starting balance for all players" : "Стартовый баланс для всех игроков")]
            public Int32 StartedBalance = 0;
            [JsonProperty(LanguageEn ? "Interface settings in the plugin (Do not touch if you do not understand how to work with it)" : "Настройки интерфейса в плагине (Не трогайте, если не понимаете как с этим работать)")]
            public Interface InterfaceSetting = new Interface();
            [JsonProperty(LanguageEn ? "Currency exchange settings for the balance in the store" : "Настройки обмена валют на баланс в магазине")]
            public TransferSetting TransferSettings = new TransferSetting();
            [JsonProperty(LanguageEn ? "Basic Settings" : "Основные настройки")]
            public GeneralSettings GeneralSetting = new GeneralSettings();
            [JsonProperty(LanguageEn ? "Currency settings (If the type of coins in item)" : "Настройки валюты(Если вид экономики - false)")]
            public CustomMoney CustomMoneySetting = new CustomMoney();
            [JsonProperty(LanguageEn ? "Settings for collaboration with other plugins" : "Настройки совместной работы с другими плагинами")]
            public ReferenceSetting ReferenceSettings = new ReferenceSetting();
            internal class CustomMoney {
                [JsonProperty(LanguageEn ? "Currency name" : "Название валюты")]
                public String DisplayName;
                [JsonProperty(LanguageEn ? "Coin Shortname" : "Shortname монетки")]
                public String Shortname;
                [JsonProperty(LanguageEn ? "Coin SkinID" : "SkinID монетки")]
                public UInt64 SkinID;
            }
            internal class Interface {
                [JsonProperty(LanguageEn ? "Color of the main panel" : "Цвет основной панели")]
                public String ColorBackground = "#FFFFFF05";
                [JsonProperty(LanguageEn ? "Additional Panel Color #1" : "Цвет дополнительной панели #1")]
                public String ColorMoreOne = "#b1b1b1";
                [JsonProperty(LanguageEn ? "Additional Panel Color #2" : "Цвет дополнительной панели #2")]
                public String ColorMoreTwo = "#CCD045FF";
                [JsonProperty(LanguageEn ? "Text color" : "Цвет текста")]
                public String ColorLabel = "#FEFFDDFF";
                [JsonProperty("AnchorMin")]
                public String AnchorMin = "1 0";
                [JsonProperty("AnchorMax")]
                public String AnchorMax = "1 0";
                [JsonProperty("OffsetMin")]
                public String OffsetMin = "-390 15";
                [JsonProperty("OffsetMax")]
                public String OffsetMax = "-212 42";
            }
            internal class GeneralSettings {
                [JsonProperty(LanguageEn ? "Setting up a data file" : "Настройка дата-файла")]
                public DataFileSettings DataFileSetting = new DataFileSettings();
                internal class DataFileSettings {
                    [JsonProperty(LanguageEn ? "Save interval file date (Set to 0 if you do not want to save the file by timer)" : "Интервал сохранения дата файла (Установите 0, если не требуется сохранять файл по таймеру)")]
                    public Int32 SaveTime = 360;
                    [JsonProperty(LanguageEn ? "Setting up Data file cleanup" : "Настройка очистки дата-файла")]
                    public DetalisWipeData DetalisWipe = new DetalisWipeData();
                    internal class DetalisWipeData {
                        [JsonProperty(LanguageEn ? "Type of data file cleaning : 0 - Do not clean at all, 1 - Clean the entire date when the server is wiped, 2 - Clean the date file of players with a balance of <N (configurable in this category) when the server is wiped, 3 - Clean players who have not logged in >N (configurable in this category) days, 4 - Clear players who have not logged in >N (configurable in this category) days and their balance <N (configurable in this category)" : "Тип очистки дата-файла : 0 - Не очищать совсем, 1 - Очищать всю дату при вайпе сервера, 2 - Очищать дата файл игроков с балансом <N(настраивается в этой категории) при вайпе сервера, 3 - Очищать игроков, которые не заходили >N(настраивается в этой категории) дней, 4 - Очищать игроков, которые не заходили >N(настраивается в этой категории) дней и их баланс <N(настраивается в этой категории)")]
                        public TypeData TypeClear;
                        [JsonProperty(LanguageEn ? "<N is the amount of balance to clear the date. For types : 2 and 4" : "<N-количество баланса для очистки даты. Для типов : 2 и 4")]
                        public Int32 AmountBalance = 0;
                        [JsonProperty(LanguageEn ? ">N-days offline to clear the date. For types : 3 and 4" : ">N-дней оффлайн для очистки даты. Для типов : 3 и 4")]
                        public Int32 DayPlayer = 0;
                    }
                }
                [JsonProperty(LanguageEn ? "Setting up the currency dropout from the boxes (ONLY IF THE CURRENCY TYPE IS SELECTED: COINS IS ITEM)" : "Настройка выпдаения валюты из ящиков (ТОЛЬКО ЕСЛИ ВЫБРАН ТИП ВАЛЮТЫ : МОНЕТКИ НА РУКАХ)")]
                public SettingDropMoney SettingDropMoneyPreset = new SettingDropMoney();
                internal class SettingDropMoney {
                    internal class Preset {
                        public Int32 Rare;
                        public Int32 MoneyMin;
                        public Int32 MoneyMax;
                    }
                    [JsonProperty(LanguageEn ? "Enable the possibility of currency falling out of the mailbox? (ONLY IF THE CURRENCY TYPE IS SELECTED: COINS IS ITEM)" : "Включить возможность выпадения валюты из ящика? (ТОЛЬКО ЕСЛИ ВЫБРАН ТИП ВАЛЮТЫ : МОНЕТКИ НА РУКАХ)")]
                    public Boolean UseDropMoney;
                    [JsonProperty(LanguageEn ? "Setting up presets with currency falling out of boxes [box(ShortPrefabName)] = setup" : "Настройка пресетов с выпадением валюты из ящиков [ящик(ShortPrefabName]] = настройка")]
                    public Dictionary<String, Preset> Presets = new Dictionary<string, Preset>();
                }
                [JsonProperty(LanguageEn ? "Setting up getting currency for killing players" : "Настройка получение валюты за убийство игроков")]
                public GeneralSettingReward KilledReward;
                [JsonProperty(LanguageEn ? "Setting up getting currency for killing animals" : "Настройка получение валюты за убийство животных")]
                public GeneralSettingReward AnimalReward;
                [JsonProperty(LanguageEn ? "Setting up getting currency for killing an NPC" : "Настройка получение валюты за убийство NPC")]
                public GeneralSettingReward NPCReward;
                [JsonProperty(LanguageEn ? "Setting up getting currency for destroying a bradley" : "Настройка получение валюты за уничтожение танка")]
                public GeneralSettingReward BradleyReward;
                [JsonProperty(LanguageEn ? "Setting up receiving currency for destroying a helicopter" : "Настройка получение валюты за уничтожение вертолета")]
                public GeneralSettingReward HelicopterReward;
                [JsonProperty(LanguageEn ? "Setting up receiving currency for destroying barrels" : "Настройка получение валюты за уничтожение бочек")]
                public GeneralSettingReward BarrelReward;
                [JsonProperty(LanguageEn ? "Setting up receiving currency for resource extraction" : "Настройка получение валюты за добычу ресурсов")]
                public GatherSettingReward GatherReward;
                [JsonProperty(LanguageEn ? "Setting up receiving currency for raising resources from the ground (mushrooms, berries, tree, etc.)" : "Настройка получение валюты за поднятие ресурсов с земли (грибы, ягоды, дерево и т.д)")]
                public GatherSettingReward CollectableReward;
                [JsonProperty(LanguageEn ? "Setting up receiving currency for the time spent on the server" : "Настройка получение валюты за проведенное время на сервере")]
                public TimeSettingsReward TimeReward;
                [JsonProperty(LanguageEn ? "IQSphereEvent: Setting up getting currency for killing NPCs (Under - under the sphere, Around - around the sphere, Tier1 - 1st floor of the sphere, Tier2-2nd floor of the sphere, Tier3-3rd floor of the sphere)" : "IQSphereEvent : Настройка получение валюты за убийство NPC (Under - под сферой, Around - вокруг сферы, Tier1 - 1 этаж сферы, Tier2 - 2 этаж сферы, Tier3 - 3 этаж сферы)")]
                public Dictionary<TierIQSphereEvent, GeneralSettingReward> IQSphereNpcReward;
                internal class TimeSettingsReward {
                    [JsonProperty(LanguageEn ? "Permissions to use this feature (If you need to make it available to everyone according to the standard, leave the field empty)" : "Права для использования данной возможности (Если вам требуется сделать ее доступной всем по стандарту - оставьте поле пустым)")]
                    public String PermissionReward = "";
                    [JsonProperty(LanguageEn ? "Use this opportunity to receive currency" : "Использовать эту возможность получения валюты")]
                    public Boolean UseReward = true;
                    [JsonProperty(LanguageEn ? "How much time do you need to spend to get a reward" : "Сколько нужно провести времени,чтобы выдали награду")]
                    public Int32 OnlineTime;
                    [JsonProperty(LanguageEn ? "How much to charge currency for the time spent on the server" : "Сколько начислять валюты за проведенное время на сервере")]
                    public Int32 OnlineTimeReward;
                }
                internal class GatherSettingReward {
                    [JsonProperty(LanguageEn ? "Permissions to use this feature (If you need to make it available to everyone according to the standard, leave the field empty)" : "Права для использования данной возможности (Если вам требуется сделать ее доступной всем по стандарту - оставьте поле пустым)")]
                    public String PermissionReward = "";
                    [JsonProperty(LanguageEn ? "Use this opportunity to receive currency" : "Использовать эту возможность получения валюты")]
                    public Boolean UseReward = true;
                    [JsonProperty(LanguageEn ? "How much currency to charge for resources ( [for which resource to give(shortname)] = { other settings }" : "Сколько начислять валюты за ресурсы ( [за какой ресурс давать] = { остальная настройка }")]
                    public Dictionary<String, AdvancedSetting> GatherSetting = new Dictionary<String, AdvancedSetting>();
                }
                internal class GeneralSettingReward {
                    [JsonProperty(LanguageEn ? "Permissions to use this feature (If you need to make it available to everyone according to the standard, leave the field empty)" : "Права для использования данной возможности (Если вам требуется сделать ее доступной всем по стандарту - оставьте поле пустым)")]
                    public String PermissionReward = "";
                    [JsonProperty(LanguageEn ? "Use this opportunity to receive currency" : "Использовать эту возможность получения валюты")]
                    public Boolean UseReward = true;
                    [JsonProperty(LanguageEn ? "Setting up currency receipt" : "Настройка получения валюты")]
                    public AdvancedSetting AdvancedReward = new AdvancedSetting();
                }
                internal class AdvancedSetting {
                    [JsonProperty(LanguageEn ? "Chance to get currency" : "Шанс получить валюту")]
                    public Int32 Rare;
                    [JsonProperty(LanguageEn ? "How much currency to issue" : "Сколько выдавать валюты")]
                    public Int32 Money;
                }
            }
            internal class TransferSetting {
                [JsonProperty(LanguageEn ? "Enable currency exchange to the balance in the store (GameStores/MoscovOVH)" : "Включить обмен валюты на баланс в магазине(GameStores/MoscovOVH)")]
                public Boolean TransferStoreUse;
                [JsonProperty(LanguageEn ? "The URL of your coin" : "URL вашей монеты")]
                public String URLMoney;
                [JsonProperty(LanguageEn ? "Currency URL for the store" : "URL валюты для магазина")]
                public String URLStores;
                [JsonProperty(LanguageEn ? "Notify players of course changes?" : "Уведомлять игроков об изменении курса?")]
                public Boolean UseAlertExchangeNew;
                [JsonProperty(LanguageEn ? "Setting the currency exchange rate by time - [seconds (the time after which this rate will be set after the wipe)] - the rate" : "Настройка курса обмена валюты по времени - [cекунды(врея через которое установится данный курс после вайпа)] - курс")]
                public Dictionary<Int32, ExchangeRate> ExchangeRates = new Dictionary<Int32, ExchangeRate>();
                internal class ExchangeRate {
                    [JsonProperty(LanguageEn ? "How many coins are required to exchange" : "Сколько монет требуется для обмена")]
                    public Int32 MoneyCount;
                    [JsonProperty(LanguageEn ? "How much balance will the player receive after the exchange" : "Сколько баланса получит игрок после обмена")]
                    public Int32 StoresMoneyCount;
                }
                [JsonProperty(LanguageEn ? "Enable the limit of funds exchange" : "Включить лимит обмена средств")]
                public Boolean UseLimits = false;
                [JsonProperty(LanguageEn ? "Limit of funds (balance per store)" : "Лимит средств(баланса на магазин)")]
                public Int32 LimitBalance = 100;
                [JsonProperty(LanguageEn ? "Time limit (in seconds) (Example : A limit of 100 balance is set, once every 3600 seconds)" : "Время лимита(в секундах) (Пример : Установлен лимит 100 баланса, раз в 3600 секунд)")]
                public Int32 LimitTime = 3600;
            }
            internal class ReferenceSetting {
                [JsonProperty(LanguageEn ? "Friends : Prohibit receiving coins for killing friends" : "Friends : Запретить получение монет за убийство друзей")]
                public Boolean FriendsBlockUse;
                [JsonProperty(LanguageEn ? "Clans : Prohibit receiving coins for killing fellow clans" : "Clans : Запретить получение монет за убийство сокланов")]
                public Boolean ClansBlockUse;
                [JsonProperty(LanguageEn ? "Duel/Battles : Prohibit receiving coins for killing in duels" : "Duel/Battles : Запретить получение монет за убийство на дуэлях")]
                public Boolean DuelBlockUse;
                [JsonProperty(LanguageEn ? "MoscovOVH : Enable the use of the store (Currency exchange must be enabled)" : "MoscovOVH : Включить использование магазина(Должен быть включен обмен валют)")]
                public Boolean MoscovOvhUse;
                [JsonProperty(LanguageEn ? "GameStores : Enable the use of the store (Currency exchange must be enabled)" : "GameStores : Включить использование магазина(Должен быть включен обмен валют)")]
                public Boolean GameStoreshUse;
                [JsonProperty(LanguageEn ? "GameStores : GameStores Store Settings" : "GameStores : Настройки магазина GameStores")]
                public GameStores GameStoresSettings = new GameStores();
                [JsonProperty(LanguageEn ? "IQChat : Chat Settings" : "IQChat : Настройки чата")]
                public ChatSetting ChatSettings = new ChatSetting();
                internal class ChatSetting {
                    [JsonProperty(LanguageEn ? "IQChat : Custom prefix in the chat" : "IQChat : Кастомный префикс в чате")]
                    public String CustomPrefix;
                    [JsonProperty(LanguageEn ? "IQChat : Custom avatar in the chat (If required)" : "IQChat : Кастомный аватар в чате(
// ... [Code preview truncated due to length. Full source in attached file] ...

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