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

FREE ServerCoins : 1.1.3 1.1.3

Нет прав для скачивания
C#:
using Oxide.Core;
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using System.Linq;
using Oxide.Core.Plugins;
namespace Oxide.Plugins {
    [Info("ServerCoins", "https://topplugin.ru/", "1.1.3")]
    public class ServerCoins : RustPlugin {
        [PluginReference]
        private Plugin ServerRewards;
        public Dictionary<ulong, int> Coins = new Dictionary<ulong, int>();
#region Classes
        public class DataConfig {
            [JsonProperty("Использовать GameStores?")]
            public bool usegamestores;
            [JsonProperty("Использовать Ovh?")]
            public bool useovh;
            [JsonProperty("Соотношение к выдаче баланса на магазины (например 10 монеток = 5 руб на баланс)")]
            public int ratio;
            [JsonProperty("Использовать баланс ServerRewards?")]
            public bool useserverrewards;
            [JsonProperty("Секретный ключ магазина (если используете Ovh или ServerRewards указать рандомное число, например 1")]
            public string secret;
            [JsonProperty("ID магазина в сервисе (если используете Ovh или ServerRewards указать рандомное число, например 1)")]
            public string shopId;
            [JsonProperty("Логировать выдачу баланса игрокам?")]
            public bool LogsPlayer;
            [JsonProperty("Использовать рандом на выдачу баланса? (максимальное число будет использоваться как кол-во монеток в инвентаре игрока, а минимальное как минимальное количество предмета для обмена), если отключено то баланс будет выдаваться в соответствии с кол-вом монеток в инвентаре игрока")]
            public bool userandom;
            [JsonProperty("Умножать кол-во монеток на n количество баланса ServerRewards?")]
            public bool serverrewardsad;
            [JsonProperty("На сколько умножать баланс ServerRewards? (например 5 монет - 500 баланса)")]
            public int serverrewardsint;
            [JsonProperty("Скин предмета")]
            public ulong skinId;
            [JsonProperty("Имя предмета")]
            public string itemName;
            [JsonProperty("Описание предмета")]
            public string description;
            [JsonProperty("Минимальное количество предмета для обмена")]
            public int MinItemCount;
            [JsonProperty("Шанс выпадения предмета в ящиках")]
            public int Chance;
            [JsonProperty("Включить рандом на количество спавна предмета в ящиках? (если не используете, будет выпадать по 1 шт.)")]
            public bool enablerandom;
            [JsonProperty("Минимальное кол-во предмета, которое будет выпадать в ящиках (если используете рандом)")]
            public int minamount;
            [JsonProperty("Максимальное кол-во предмета, которое будет выпадать в ящиках (если используете рандом)")]
            public int maxamount;
            [JsonProperty("Список ящиков в которых его спавнить")]
            public List<string> ListContainers;
        }
#endregion
#region Config
        public DataConfig cfg;
        protected override void LoadConfig() {
            base.LoadConfig();
            cfg = Config.ReadObject<DataConfig>();
        }
        protected override void SaveConfig() {
            Config.WriteObject(cfg);
        }
        protected override void LoadDefaultConfig() {
            cfg = new DataConfig() {
                usegamestores = true, useovh = false, ratio = 2, useserverrewards = false, secret = "Ни в коем случае не давайте эти данные не доверенным лицам!", shopId = "Ни в коем случае не давайте эти данные не доверенным лицам!", LogsPlayer = true, userandom = true, serverrewardsad = true, serverrewardsint = 100, MinItemCount = 1, skinId = 1865679307, itemName = "<color=#ffb700>MysteryCoin</color>", description = "<size=10>Используется для обмена на реальные деньги</size>", Chance = 100, enablerandom = true, minamount = 1, maxamount = 10, ListContainers = new List<string>() {
                    {
                        "crate_basic"
                    }
                    , {
                        "crate_normal"
                    }
                    , {
                        "crate_normal_2"
                    }
                }
                ,
            }
            ;
        }
#endregion
        void OnNewSave(string filename) {
            Coins.Clear();
            SaveData();
            Interface.Oxide.ReloadPlugin("ServerCoins");
        }
        private void SaveData() {
            Interface.Oxide.DataFileSystem.WriteObject("ServerCoins/Coins", Coins);
        }
        private void LoadData() {
            if (Interface.Oxide.DataFileSystem.ExistsDatafile("ServerCoins/Coins")) {
                Coins = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<ulong, int>>("ServerCoins/Coins");
            }
            else SaveData();
        }
#region OxideHooks
        void OnServerInitialized() {
            if (cfg.usegamestores && !plugins.Exists("GameStoresRUST")) {
                PrintError("Плагин магазина не загружен, дальнейшая работа плагина невозможна!");
                return;
            }
            if (cfg.useovh && !plugins.Exists("RustStore")) {
                PrintError("Плагин магазина не загружен, дальнейшая работа плагина невозможна!");
                return;
            }
            if (cfg.useserverrewards && !plugins.Exists("ServerRewards")) {
                PrintError("Плагин 'ServerRewards' не загружен, дальнейшая работа плагина невозможна!");
                return;
            }
            LoadData();
        }
        void OnLootSpawn(LootContainer container) {
            if (container == null || container.inventory == null) return;
            NextTick(() => {
                if (container.ShortPrefabName == "stocking_large_deployed" || container.ShortPrefabName == "stocking_small_deployed") return;
                if (cfg.ListContainers.Contains(container.ShortPrefabName)) {
                    if (UnityEngine.Random.Range(0f, 100f) < cfg.Chance) {
                        if (container.inventory.itemList.Count == container.inventory.capacity) {
                            container.inventory.capacity++;
                        }
                        if (cfg.enablerandom) {
                            var amount = UnityEngine.Random.Range(cfg.minamount, cfg.maxamount);
                            Item x = ItemManager.CreateByName("glue", amount, cfg.skinId);
                            x.name = cfg.itemName + " " + cfg.description;
                            x.MoveToContainer(container.inventory);
                            return;
                        }
                        Item i = ItemManager.CreateByName("glue", 1, cfg.skinId);
                        i.name = cfg.itemName + " " + cfg.description;
                        i.MoveToContainer(container.inventory);
                    }
                }
            }
            );
        }
        private Item OnItemSplit(Item item, int amount) {
            if (item != null && item.skin == cfg.skinId) {
                Item x = ItemManager.CreateByPartialName("glue", amount);
                x.name = cfg.itemName + " " + cfg.description;
                x.skin = cfg.skinId;
                x.amount = amount;
                var amounts = 687;
                item.amount -= amount;
                item.MarkDirty();
                return x;
            }
            return null;
        }
        private bool? CanStackItem(Item item, Item targetItem) {
            if (item.skin != targetItem.skin) return false;
            return null;
        }
        private bool? CanCombineDroppedItem(DroppedItem item, DroppedItem targetItem) {
            if (item.GetItem() == null || targetItem.GetItem() == null) return null;
            if (item.GetItem().skin != targetItem.GetItem().skin) return false;
            return null;
        }
        private Item AddItem(BasePlayer p, string name, ulong skin, string shortname, int count) {
            Item winitem = ItemManager.CreateByName(shortname, count, skin);
            winitem.name = name;
            return winitem;
        }
#endregion
        [ChatCommand("cgive")]
        private void GiveHandler(BasePlayer player) {
            if (player == null) return;
            if (!player.IsAdmin) {
                player.ChatMessage("У вас нет доступа к данной команде");
                return;
            }
            Item i = ItemManager.CreateByName("glue", 100, cfg.skinId);
            i.name = cfg.itemName + " " + cfg.description;
            player.GiveItem(i);
            player.ChatMessage($"Вы выдали себе {i.amount} монет в инвентарь!");
        }
        [ChatCommand("exchange")]
        private void ExchangeHandler(BasePlayer player) {
            var itemcount = player.inventory.GetAmount(ItemManager.FindItemDefinition("glue").itemid);
            if (itemcount < cfg.MinItemCount) {
                SendReply(player, $"У вас должно быть минимальное количество монеток для обмена!\nМинимальное количество монеток для обмена: {cfg.MinItemCount}");
                return;
            }
            if (cfg.usegamestores) {
                if (cfg.userandom) {
                    int amount = UnityEngine.Random.Range(cfg.MinItemCount, itemcount);
                    MoneyPlus(player.userID, amount);
                    player.inventory.Take(null, ItemManager.FindItemDefinition("glue").itemid, itemcount);
                    SendReply(player, $"Вы успешно обменяли монетки!\nНа ваш баланс магазина зачислено {amount} руб.\nПриходите ещё!");
                    return;
                }
                var amounts = itemcount / cfg.ratio;
                MoneyPlus(player.userID, amounts);
                player.inventory.Take(null, ItemManager.FindItemDefinition("glue").itemid, itemcount);
                SendReply(player, $"Вы успешно обменяли монетки!\nНа ваш баланс магазина зачислено {amounts} руб.\nПриходите ещё!");
                return;
            }
            if (cfg.useovh) {
                var plugin = plugins.Find("RustStore");
                if (cfg.userandom) {
                    int amount = UnityEngine.Random.Range(cfg.MinItemCount, itemcount);
                    plugin?.Call("APIChangeUserBalance", player.userID, amount, new Action<string>((result) => {
                        if (result == "SUCCESS") {
                            if (cfg.LogsPlayer) {
                                Interface.Oxide.LogDebug($"Игрок [{player.displayName}/{player.UserIDString}] получил {itemcount} руб на баланс в магазине");
                                return;
                            }
                        }
                        if (cfg.LogsPlayer) {
                            Interface.Oxide.LogDebug($"Баланс не был изменен, ошибка: {result}");
                        }
                    }
                    ));
                    player.inventory.Take(null, ItemManager.FindItemDefinition("glue").itemid, itemcount);
                    SendReply(player, $"Вы успешно обменяли монетки!\nНа ваш баланс магазина зачислено {amount} руб.\nПриходите ещё!");
                    return;
                }
                var amounts = itemcount / cfg.ratio;
                plugin?.Call("APIChangeUserBalance", player.userID, amounts, new Action<string>((result) => {
                    if (result == "SUCCESS") {
                        if (cfg.LogsPlayer) {
                            Interface.Oxide.LogDebug($"Игрок [{player.displayName}/{player.UserIDString}] получил {amounts} руб на баланс в магазине");
                            return;
                        }
                    }
                    if (cfg.LogsPlayer) {
                        Interface.Oxide.LogDebug($"Баланс не был изменен, ошибка: {result}");
                    }
                }
                ));
                player.inventory.Take(null, ItemManager.FindItemDefinition("glue").itemid, itemcount);
                SendReply(player, $"Вы успешно обменяли монетки!\nНа ваш баланс магазина зачислено {amounts} руб.\nПриходите ещё!");
                return;
            }
            if (cfg.useserverrewards) {
                if (cfg.userandom) {
                    if (cfg.serverrewardsad) {
                        int amounts = UnityEngine.Random.Range(cfg.MinItemCount, itemcount);
                        var calculate = amounts * cfg.serverrewardsint;
                        AddPoints(player.userID, calculate);
                        player.inventory.Take(null, ItemManager.FindItemDefinition("glue").itemid, itemcount);
                        SendReply(player, $"Вы успешно обменяли монетки!\nНа ваш баланс зачислено {calculate} баллов\nПриходите ещё!");
                        if (cfg.LogsPlayer) {
                            Interface.Oxide.LogDebug($"Игрок [{player.displayName}/{player.UserIDString}] получил {calculate} баллов на баланс ServerRewards");
                            return;
                        }
                        return;
                    }
                    int amount = UnityEngine.Random.Range(cfg.MinItemCount, itemcount);
                    AddPoints(player.userID, amount);
                    player.inventory.Take(null, ItemManager.FindItemDefinition("glue").itemid, itemcount);
                    SendReply(player, $"Вы успешно обменяли монетки!\nНа ваш баланс зачислено {amount} баллов\nПриходите ещё!");
                    if (cfg.LogsPlayer) {
                        Interface.Oxide.LogDebug($"Игрок [{player.displayName}/{player.UserIDString}] получил {amount} баллов на баланс ServerRewards");
                    }
                    return;
                }
                if (cfg.serverrewardsad) {
                    var calculate = itemcount * cfg.serverrewardsint;
                    AddPoints(player.userID, calculate);
                    player.inventory.Take(null, ItemManager.FindItemDefinition("glue").itemid, itemcount);
                    SendReply(player, $"Вы успешно обменяли монетки!\nНа ваш баланс зачислено {calculate} баллов\nПриходите ещё!");
                    if (cfg.LogsPlayer) {
                        Interface.Oxide.LogDebug($"Игрок [{player.displayName}/{player.UserIDString}] получил {calculate} баллов на баланс ServerRewards");
                        return;
                    }
                    return;
                    ;
                }
                AddPoints(player.userID, itemcount);
                player.inventory.Take(null, ItemManager.FindItemDefinition("glue").itemid, itemcount);
                SendReply(player, $"Вы успешно обменяли монетки!\nНа ваш баланс зачислено {itemcount} баллов\nПриходите ещё!");
                if (cfg.LogsPlayer) {
                    Interface.Oxide.LogDebug($"Игрок [{player.displayName}/{player.UserIDString}] получил {itemcount} баллов на баланс ServerRewards");
                    return;
                }
                return;
            }
        }
#region Helpers
        void AddPoints(ulong playerID, int amount) {
            ServerRewards?.Call("AddPoints", playerID, amount);
        }
        void MoneyPlus(ulong userId, int amount) {
            ApiRequestBalance(new Dictionary<string, string>() {
                {
                    "action", "moneys"
                }
                , {
                    "type", "plus"
                }
                , {
                    "steam_id", userId.ToString()
                }
                , {
                    "amount", amount.ToString()
                }
            }
            );
        }
        void ApiRequestBalance(Dictionary<string, string> args) {
            string url = $"http://gamestores.ru/api?shop_id={cfg.shopId}&secret={cfg.secret}{string.Join("", args.Select(arg => $"& {
                arg.Key
            }
            = {
                arg.Value
            }
            ").ToArray())}";
            webrequest.EnqueueGet(url, (i, s) => {
                if (i != 200 && i != 201) {
                    PrintError($"{url}\nCODE {i}: {s}");
                    if (cfg.LogsPlayer) {
                        LogToFile("logError", $"({DateTime.Now.ToShortTimeString()}): {url}\nCODE {i}: {s}", this);
                    }
                }
                else {
                    if (cfg.LogsPlayer) {
                        LogToFile("logWEB", $"({DateTime.Now.ToShortTimeString()}): " + "Пополнение счета:" + $"{string.Join(" ", args.Select(arg => $" {
                            arg.Value
                        }
                        ").ToArray()).Replace("moneys", "").Replace("plus", "")}", this);
                    }
                }
                if (i == 201) {
                    PrintWarning("Плагин не работает!");
                    Interface.Oxide.UnloadPlugin(Title);
                }
            }
            , this);
        }
#endregion
    }
}

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