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

FREE GameStoresRUST : 1.7.2 1.7.2

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System.Collections.Generic;
using System;
using System.Reflection;
using Facepunch;
using Newtonsoft.Json;
using Oxide.Core.Configuration;
using System.Linq;
using System.Text;
using Oxide.Game.Rust.Cui;
using UnityEngine;
using Network;
using Oxide.Core;
using System.Collections;
using Oxide.Plugins;
using Oxide.Core.Plugins;
namespace Oxide.Plugins {
    [Info("GameStores", "DeRzKiU", "1.7.2")]
    class GameStoresRUST : RustPlugin {
        private string Request => $"https://gamestores.ru/api/?shop_id={Config["SHOP.ID"]}&secret={Config["SECRET.KEY"]}&server={Config["SERVER.ID"]}";
        private List<Dictionary<string, object>> Stats = new List<Dictionary<string, object>>();
        private List<Dictionary<string, object>> Leaves = new List<Dictionary<string, object>>();
        private Dictionary<int, string> _OlditemIdShortnameConversions = new Dictionary<int, string>();
        private Dictionary<string, long> TakeAllBan = new Dictionary<string, long>();
        private Dictionary<string, long> Requests = new Dictionary<string, long>();
        private List<string> Log = new List<String>();
#region [Override] Load default configurations
        protected override void LoadDefaultConfig() {
            Config["SHOP.ID"] = "30593";
            Config["SERVER.ID"] = "22287";
            Config["SECRET.KEY"] = "a7413e308c631d1f29230005e47a6797";
            Config["BUCKET.IMG"] = "https://i.imgur.com/J8rnXtZ.png";
            Config["ITEMS.SPLIT"] = true;
            Config["COMMAND.TOP"] = true;
            Config["UI.ENABLED"] = true;
            Config["TOP.USERS"] = true;
            Config["BUCKET.BUTTON"] = true;
        }
#endregion
#region [HookMethod] [Unload]
        private void Unload() {
            if (System.Convert.ToBoolean(Config["UI.ENABLED"]) && BasePlayer.activePlayerList.Count > 0) foreach (BasePlayer player in BasePlayer.activePlayerList) {
                CuiHelper.DestroyUi(player, "ui.store.buttonimage");
                CuiHelper.DestroyUi(player, "ui.store.button");
                DestroyUI(player);
            }
        }
#endregion
#region[Variables]
        private Dictionary<BasePlayer, int> Items = new Dictionary<BasePlayer, int>();
        private Dictionary<BasePlayer, int> Index = new Dictionary<BasePlayer, int>();
        string shopLink = string.Empty;
#endregion
#region [HookMethod] On server intitialized
        private void OnServerInitialized() {
            for (int i = 5; i >= 1; i--) {
                string TempOldName = i == 1 ? "GameStores.Log" : "GameStores.Log." + (i - 1).ToString();
                if (Core.Interface.Oxide.DataFileSystem.ExistsDatafile(TempOldName)) {
                    Log = Core.Interface.Oxide.DataFileSystem.ReadObject<List<String>>(TempOldName);
                    Core.Interface.Oxide.DataFileSystem.WriteObject("GameStores.Log." + i.ToString(), Log);
                    Log = new List<String>();
                }
            }
            Core.Interface.Oxide.DataFileSystem.WriteObject("GameStores.Log", Log);
            if (Config["SECRET.KEY"].ToString().Contains("KEY")) {
                Debug.LogError("Plugin isn't configured");
            }
            else {
                if (System.Convert.ToBoolean(Config["UI.ENABLED"])) {
                    webrequest.EnqueueGet($"{this.Request}&info=true", (code, response) => {
                        switch (code) {
                            case 0 : Debug.LogError("Api does not responded to a request");
                            break;
                            case 200 : Dictionary<string, object> Response = JsonConvert.DeserializeObject<Dictionary<string, object>>(response, new KeyValuesConverter());
                            Dictionary<string, object> data = (Response["data"] as Dictionary<string, object>);
                            shopLink = $"{data["link"]}";
                            break;
                            case 404 : Debug.LogError("Response code: 404, please check your configurations");
                            break;
                        }
                    }
                    , this);
                }
            }
            webrequest.EnqueueGet($"https://gamestores.ru/OldRustItemsIDs.json", (code, response) => {
                switch (code) {
                    case 0 : Debug.LogError("Api does not responded to a request");
                    break;
                    case 200 : Debug.LogWarning("Old IDs of Items successfully loaded");
                    _OlditemIdShortnameConversions = JsonConvert.DeserializeObject<Dictionary<int, string>>(response, new KeyValuesConverter());
                    break;
                    case 404 : Debug.LogError("Response code: 404, please check your configurations");
                    break;
                }
            }
            , this);
        }
#endregion
#region[HookMethod] OnPlayerSleepEnded
        void OnPlayerSleepEnded(BasePlayer player) {
            if (System.Convert.ToBoolean(Config["UI.ENABLED"])) {
                if (System.Convert.ToBoolean(Config["BUCKET.BUTTON"])) {
                    string Image = Config["BUCKET.IMG"].ToString();
                    CuiElementContainer UI = new CuiElementContainer();
                    UI.Add(new CuiElement() {
                        Parent = "Hud", Name = "ui.store.buttonimage", Components = {
                            new CuiRawImageComponent {
                                Sprite = "assets/content/textures/generic/fulltransparent.tga", Url = Image
                            }
                            , new CuiRectTransformComponent() {
                                AnchorMin = "0.01 0.948", AnchorMax = "0.035 0.990"
                            }
                        }
                    }
                    );
                    UI.Add(new CuiButton() {
                        Button = {
                            Command = $"ui.store {player.userID}", Color = "0 0 0 0"
                        }
                        , RectTransform = {
                            AnchorMin = "0.01 0.95", AnchorMax = "0.042 0.99"
                        }
                        , Text = {
                            Text = ""
                        }
                    }
                    , "Hud", "ui.store.button");
                    CuiHelper.DestroyUi(player, "ui.store.buttonimage");
                    CuiHelper.DestroyUi(player, "ui.store.button");
                    CuiHelper.AddUi(player, UI);
                }
            }
        }
#endregion
#region[Method] Executing - WebRequest callback handler
        private void Executing(BasePlayer Player, string response, int code) {
            switch (code) {
                case 0 : Debug.LogError("Api does not responded to a request");
                Player.ChatMessage("Корзина недоступна.Попробуйте позже");
                break;
                case 200 : Dictionary<string, object> Response = JsonConvert.DeserializeObject<Dictionary<string, object>>(response, new KeyValuesConverter());
                if (Response != null && response != null && response != "null") {
                    CuiElementContainer UI = new CuiElementContainer();
                    switch (System.Convert.ToInt32(Response["code"])) {
                        case 100 : List<object> data = Response["data"] as List<object>;
                        DestroyUI(Player);
                        if (System.Convert.ToBoolean(Config["UI.ENABLED"])) {
#region[BackGround] Close
                            UI.Add(new CuiButton {
                                Button = {
                                    Command = $"ui.destroy {Player.userID}", Color = "1 0.1 0.1 0"
                                }
                                , RectTransform = {
                                    AnchorMin = "0.0 0.0", AnchorMax = "0.999 0.999"
                                }
                                , Text = {
                                    Color = "0.9 0.9 0.9 1", Text = "", FontSize = 25, Align = TextAnchor.MiddleCenter
                                }
                            }
                            , "Hud", "ui.close.background");
#endregion
#region[Panel] Parent
                            UI.Add(new CuiPanel() {
                                Image = {
                                    Color = "0 0 0 0.95"
                                }
                                , RectTransform = {
                                    AnchorMin = "0.20 0.18", AnchorMax = "0.80 0.95"
                                }
                                , CursorEnabled = true
                            }
                            , "Hud", "ui.store");
#endregion
#region[Panel] Items
                            int index = 0;
                            Items.Add(Player, data.Count);
                            Index.Add(Player, data.Count > 14 ? 14 : data.Count);
                            for (int r = 0; r < 4; r++) {
                                for (int i = 0; i < (r > 1 ? 2 : 5);
                                i++) {
#region[Panel] Backgroud
                                    UI.Add(new CuiPanel() {
                                        Image = {
                                            Color = "0.1 0.1 0.1 1"
                                        }
                                        , RectTransform = {
                                            AnchorMin = $"{0.04f + (0.19 * i)} {0.75f - (r * 0.23f)}", AnchorMax = $"{0.19f + ((0.19f * i) - (i == 4 ? 0f : 0f))} {0.95f - (r * 0.23f)}"
                                        }
                                    }
                                    , "ui.store", $"ui.background{index}");
#endregion
                                    if (index < data.Count) {
                                        Dictionary<string, object> itemdata = data[index] as Dictionary<string, object>;
                                        int ItemID = System.Convert.ToInt32(itemdata["item_id"]);
                                        int Amount = System.Convert.ToInt32(itemdata["amount"]);
                                        string Image = $"{itemdata["img"]}";
#region[Element] BpBlock
                                        if (itemdata["type"].ToString() == "bp") {
                                            UI.Add(new CuiElement() {
                                                Name = $"ui.bp{index}", Parent = $"ui.background{index}", Components = {
                                                    new CuiRawImageComponent {
                                                        Sprite = "assets/content/textures/generic/fulltransparent.tga", Url = "https://gamestores.ru/img/games/rust/blueprintbase.png"
                                                    }
                                                    , new CuiRectTransformComponent {
                                                        AnchorMin = $"0.10 0.10", AnchorMax = $"0.90 0.90"
                                                    }
                                                    , new CuiOutlineComponent {
                                                        Distance = "1.0 1.0", Color = "0.0 0.0 0.0 1.0"
                                                    }
                                                }
                                            }
                                            );
                                        }
#endregion
#region[Element] ImgBlock
                                        UI.Add(new CuiElement() {
                                            Name = $"ui.block{index}", Parent = $"ui.background{index}", Components = {
                                                new CuiRawImageComponent {
                                                    Sprite = "assets/content/textures/generic/fulltransparent.tga", Url = Image
                                                }
                                                , new CuiRectTransformComponent {
                                                    AnchorMin = $"0.10 0.10", AnchorMax = $"0.90 0.90"
                                                }
                                                , new CuiOutlineComponent {
                                                    Distance = "1.0 1.0", Color = "0.0 0.0 0.0 0.0"
                                                }
                                            }
                                        }
                                        );
#endregion
#region[Label] Amount
                                        UI.Add(new CuiLabel() {
                                            RectTransform = {
                                                AnchorMin = $"0.0 0.0", AnchorMax = $"1.0 0.90"
                                            }
                                            , Text = {
                                                Text = $"{Amount} шт.", FontSize = 14, Align = TextAnchor.LowerRight, Color = "1 1 1 1"
                                            }
                                        }
                                        , $"ui.background{index}", $"ui.amount{index}");
#endregion
#region[ItemName] Product
                                        UI.Add(new CuiLabel() {
                                            RectTransform = {
                                                AnchorMin = $"0.05 0.01", AnchorMax = $"0.99 0.99"
                                            }
                                            , Text = {
                                                Text = $"{itemdata["name"]}", FontSize = 14, Align = TextAnchor.UpperLeft, Color = "1 1 1 1"
                                            }
                                        }
                                        , $"ui.background{index}", $"ui.product{index}");
#endregion
#region[Button] Take
                                        UI.Add(new CuiButton {
                                            Button = {
                                                Command = $"ui.gives {Player.userID} {index} {itemdata["id"]}", Color = "0 0 0 0"
                                            }
                                            , RectTransform = {
                                                AnchorMin = $"0.0 0.0", AnchorMax = $"1.0 1.0"
                                            }
                                            , Text = {
                                                Text = ""
                                            }
                                        }
                                        , $"ui.background{index}", $"ui.command.take{index}");
#endregion
                                    }
                                    index++;
                                }
                            }
#endregion
#region[Button] Close
                            UI.Add(new CuiButton {
                                Button = {
                                    Command = $"ui.destroy {Player.userID}", Color = "0.1 0.1 0.1 0"
                                }
                                , RectTransform = {
                                    AnchorMin = "0.960 0.94", AnchorMax = "0.999 0.998"
                                }
                                , Text = {
                                    Color = "0.9 0.9 0.9 1", Text = "X", FontSize = 25, Align = TextAnchor.MiddleCenter
                                }
                            }
                            , "ui.store", "ui.close");
#endregion
#region[Button] Back
                            UI.Add(new CuiButton {
                                Button = {
                                    Command = $"ui.back {Player.UserIDString}", Color = "0.1 0.1 0.1 1"
                                }
                                , RectTransform = {
                                    AnchorMin = $"0.42 0.39", AnchorMax = $"0.65 0.49"
                                }
                                , Text = {
                                    Text = "Назад", Color = "1 1 1 1", Align = TextAnchor.MiddleCenter, FontSize = 20
                                }
                            }
                            , "ui.store", $"ui.back");
#endregion
#region[Button] Next
                            UI.Add(new CuiButton {
                                Button = {
                                    Command = $"ui.next {Player.UserIDString}", Color = "0.1 0.1 0.1 1"
                                }
                                , RectTransform = {
                                    AnchorMin = $"0.70 0.39", AnchorMax = $"0.95 0.49"
                                }
                                , Text = {
                                    Text = "Вперёд", Color = "1 1 1 1", Align = TextAnchor.MiddleCenter, FontSize = 20
                                }
                            }
                            , "ui.store", $"ui.next");
#endregion
#region[Button] TakeAll
                            UI.Add(new CuiButton {
                                Button = {
                                    Command = $"ui.takeall {Player.UserIDString}", Color = "0.1 0.1 0.1 1"
                                }
                                , RectTransform = {
                                    AnchorMin = $"0.42 0.25", AnchorMax = $"0.95 0.35"
                                }
                                , Text = {
                                    Text = "Забрать всё", Color = "1 1 1 1", Align = TextAnchor.MiddleCenter, FontSize = 20
                                }
                            }
                            , "ui.store", $"ui.command.takeall");
#endregion
#region[Label] shopLink
                            UI.Add(new CuiLabel() {
                                RectTransform = {
                                    AnchorMin = $"0.42 0.15", AnchorMax = $"0.95 0.25"
                                }
                                , Text = {
                                    Text = "Магазин", Align = TextAnchor.MiddleCenter, Color = "1 1 1 1", FontSize = 40
                                }
                            }
                            , "ui.store", "ui.link");
#endregion
#region[Label] shopLink
                            UI.Add(new CuiLabel() {
                                RectTransform = {
                                    AnchorMin = $"0.42 0.05", AnchorMax = $"0.95 0.15"
                                }
                                , Text = {
                                    Text = shopLink, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1", FontSize = 35
                                }
                            }
                            , "ui.store", "ui.link");
#endregion
                            CuiHelper.AddUi(Player, UI);
                            return;
                        }
#region [UI OFF] Give Items If UI Off
                        foreach (object pair in data) {
                            Dictionary<string, object> iteminfo = pair as Dictionary<string, object>;
                            if (iteminfo.ContainsKey("command")) {
                                string command = iteminfo["command"].ToString().ToLower().Replace('\n', '|').Replace("%steamid%", Player.UserIDString).Replace("%username%", Player.displayName);
                                String[] CommandArray = command.Split('|');
                                foreach (var substring in CommandArray) {
                                    ConsoleSystem.Run.Server.Normal(substring);
                                    //ConsoleSystem.Run(ConsoleSystem.Option.Server, substring);
                                }
                                Player.ChatMessage($"Получен товар из магазина: <color=lime>\"{iteminfo["name"]}\"</color>");
                                SendResult(new Dictionary<string, string>() {
                                    {
                                        "gived", "true"
                                    }
                                    , {
                                        "id", $"{iteminfo["id"]}"
                                    }
                                }
                                );
                                break;
                            }
                            if (iteminfo["type"].ToString() == "bp") {
                                Item item = CreateByItemID(-1887162396);
                                item.blueprintTarget = GetNewItemID(System.Convert.ToInt32(iteminfo["item_id"]));
                                if (!Player.inventory.containerMain.IsFull() || !Player.inventory.containerBelt.IsFull()) {
                                    SendGived(new Dictionary<string, string>() {
                                        {
                                            "gived", "true"
                                        }
                                        , {
                                            "id", $"{iteminfo["id"]}"
                                        }
                                    }
                                    , Player);
                                    Player.inventory.GiveItem(item, Player.inventory.containerMain);
                                    Player.ChatMessage($"Получен рецепт из магазина: <color=lime>\"{iteminfo["name"]}\"</color> в количестве <color=lime>{iteminfo["amount"]}</color> шт.");
                                }
                                else Player.ChatMessage($"В инвентаре недостаточно места для получения <color=lime>\"{iteminfo["name"]}\"</color>");
                                break;
                            }
                            int ItemID = System.Convert.ToInt32(iteminfo["item_id"]);
                            int Amount = System.Convert.ToInt32(iteminfo["amount"]);
                            Item Item = CreateByItemID(ItemID, Amount);
                            if (CanTake(Player, Item) >= Amount) {
                                if (System.Convert.ToBoolean(Config["ITEMS.SPLIT"])) {
                                    List<Item> Items = SplitItem(Item);
                                    foreach (Item item in Items) {
                                        Player.inventory.GiveItem(CreateByItemID(Item.info.itemid, item.amount), Player.inventory.containerMain);
                                    }
                                }
                                else {
                                    Player.inventory.GiveItem(Item, Player.inventory.containerMain);
                                }
                                Player.ChatMessage($"Получен товар из магазина: <color=lime>\"{iteminfo["name"]}\"</color> в количестве <color=lime>{Amount}</color> шт.");
                                SendGived(new Dictionary<string, string>() {
                                    {
                                        "gived", "true"
                                    }
                                    , {
                                        "id", $"{iteminfo["id"]}"
                                    }
                                }
                                , Player);
                            }
                            else Player.ChatMessage($"В инвентаре недостаточно места для получения <color=lime>\"{iteminfo["name"]}\"</color>");
                        }
#endregion
                        break;
                        case 104 : if (System.Convert.ToBoolean(Config["UI.ENABLED"])) {
#region[BackGround] Close
                            UI.Add(new CuiButton {
                                Button = {
                                    Command = $"ui.destroy {Player.userID}", Color = "1 0.1 0.1 0"
                                }
                                , RectTransform = {
                                    AnchorMin = "0.0 0.0", AnchorMax = "0.999 0.999"
                                }
                                , Text = {
                                    Color = "0.9 0.9 0.9 1", Text = "", FontSize = 25, Align = TextAnchor.MiddleCenter
                                }
                            }
                            , "Hud", "ui.close.background");
#endregion
#region[Panel] Parent
                            UI.Add(new CuiPanel() {
                                Image = {
                                    Color = "0 0 0 0.95"
                                }
                                , RectTransform = {
                                    AnchorMin = "0.20 0.20", AnchorMax = "0.80 0.85"
                                }
                                , CursorEnabled = true
                            }
                            , "Hud", "ui.store");
#endregion
                            UI.Add(new CuiLabel() {
                                RectTransform = {
                                    AnchorMin = "0.01 0.01", AnchorMax = "0.99 0.50"
                                }
                                , Text = {
                                    Text = "Ваша корзина пуста!", Align = TextAnchor.UpperCenter, Color = "1 1 1 1", FontSize = 25
                                }
                            }
                            , "ui.store", "ui.noitems");
                            UI.Add(new CuiLabel() {
                                RectTransform = {
                                    AnchorMin = "0.01 0.01", AnchorMax = "0.98 0.07"
                                }
                                , Text = {
                                    Text = shopLink, Align = TextAnchor.UpperRight, Color = "1 1 1 1", FontSize = 25
                                }
                            }
                            , "ui.store", "ui.link");
#region[Button] Close
                            UI.Add(new CuiButton {
                                Button = {
                                    Command = $"ui.destroy {Player.userID}", Color = "0.1 0.1 0.1 0"
                                }
                                , RectTransform = {
                                    AnchorMin = "0.960 0.94", AnchorMax = "0.999 0.998"
                                }
                                , Text = {
                                    Color = "0.9 0.9 0.9 1", Text = "X", FontSize = 25, Align = TextAnchor.MiddleCenter
                                }
                            }
                            , "ui.store", "ui.close");
#endregion
                            CuiHelper.AddUi(Player, UI);
                            return;
                        }
                        Player.ChatMessage($"Ваша корзина пуста!");
                        break;
                    }
                }
                else Debug.LogError("Api does not responded to a request");
                break;
                case 404 : Debug.LogError("Response code: 404, please check your configurations");
                break;
            }
        }
#endregion
#region [Method] SendResult - Send WebRequest result
        private void SendResult(Dictionary<string, string> Args) => SendRequest(Args);
#endregion
#region[Method] SendRequest - Send request to GameStore API
        private void SendRequest(Dictionary<string, string> Args, BasePlayer Player = null, bool exec = true) {
            string Request = $"{this.Request}&{string.Join("&", Args.Select(x => x.Key + "=" + x.Value).ToArray())}";
            webrequest.EnqueueGet(Request, (code, res) => {
                if (Player != null && exec) Executing(Player, res, code);
            }
            , this);
        }
#endregion
#region[Method] SendGived - Send request about givint item to GameStore API
        private void SendGived(Dictionary<string, string> Args, BasePlayer Player = null) {
            string Request = $"{this.Request}&{string.Join("&", Args.Select(x => x.Key + "=" + x.Value).ToArray())}";
            webrequest.EnqueueGet(Request, (code, res) => {
                if (Player != null) TestRequestSent(Player, res, code, Args);
            }
            , this);
        }
#endregion
#region[Method] TestRequestSent - Check send request
        private void TestRequestSent(BasePlayer Player, string response, int code, Dictionary<string, string> Args) {
            if (code == 200) {
                Dictionary<string, object> Resp = JsonConvert.DeserializeObject<Dictionary<string, object>>(response, new KeyValuesConverter());
                if (Resp["result"].ToString() != "success") {
                    Debug.LogError("Api do not responded to request.Trying again (Player received items but it was not recorded)");
                    SendGived(Args, Player);
                }
            }
            else {
                Debug.LogError("Api do not responded to request.Trying again (Player received items but it was not recorded)");
                SendGived(Args, Player);
            }
        }
#endregion
#region[Method] cmdTakeItem - Using by UI.TakeAll
        private void cmdTakeItem(List<string> Args) {
            BasePlayer player = BasePlayer.FindByID(System.Convert.ToUInt64(Args[0]));
            if (Requests.ContainsKey(player.UserIDString + Args[2].ToString())) {
                if (Requests[player.UserIDString + Args[2].ToString()] + 10 > GetTimestampNow()) {
                    player.ChatMessage($"Дождитесь завершения предыдущего запроса");
                    return;
                }
                else {
                    Requests.Remove(player.UserIDString + Args[2].ToString());
                }
            }
            Requests.Add(player.UserIDString + Args[2].ToString(), GetTimestampNow());
            webrequest.EnqueueGet($"{Request}&item=true&steam_id={player.UserIDString}&id={Args[2]}", (code, response) => {
                switch (code) {
                    case 0 : Debug.LogError("Api does not responded to a request");
                    break;
                    case 200 : Dictionary<string, object> Response = JsonConvert.DeserializeObject<Dictionary<string, object>>(response, new KeyValuesConverter());
                    if (!Response.ContainsKey("data")) {
                        if (Requests.ContainsKey(player.UserIDString + Args[2].ToString())) Requests.Remove(player.UserIDString + Args[2].ToString());
                        return;
                    }
                    Dictionary<string, object> data = Response["data"] as Dictionary<string, object>;
                    ;
                    if (data["type"].ToString() == "item") {
                        Item Item = CreateByItemID(System.Convert.ToInt32(data["item_id"]), System.Convert.ToInt32(data["amount"]));
                        if ((System.Convert.ToBoolean(Config["ITEMS.SPLIT"]) && CanTake(player, Item) >= Item.amount) || (!System.Convert.ToBoolean(Config["ITEMS.SPLIT"]) && (!player.inventory.containerMain.IsFull() || !player.inventory.containerBelt.IsFull()))) {
                            SendGived(new Dictionary<string, string>() {
                                {
                                    "gived", "true"
                                }
                                , {
                                    "id", $"{Args[2]}"
                                }
                            }
                            , player);
                            CuiHelper.DestroyUi(player, $"ui.block{Args[1]}");
                            CuiHelper.DestroyUi(player, $"ui.amount{Args[1]}");
                            CuiHelper.DestroyUi(player, $"ui.product{Args[1]}");
                            CuiHelper.DestroyUi(player, $"ui.command.take{Args[1]}");
                            if (System.Convert.ToBoolean(Config["ITEMS.SPLIT"])) {
                                List<Item> Items = SplitItem(Item);
                                foreach (Item item in Items) {
                                    player.inventory.GiveItem(CreateByItemID(Item.info.itemid, item.amount), player.inventory.containerMain);
                                    player.ChatMessage($"Получен предмет из магазина: <color=lime>\"{data["name"]}\"</color> в количестве <color=lime>{Item.amount}</color> шт.");
                                }
                            }
                            else {
                                player.inventory.GiveItem(Item, player.inventory.containerMain);
                                player.ChatMessage($"Получен предмет из магазина: <color=lime>\"{data["name"]}\"</color> в количестве <color=lime>{data["amount"]}</color> шт.");
                            }
                            Log.Add($"|{player.UserIDString}|{DateTime.Now.ToString()}|{data["name"]}({data["amount"]})|{data["item_id"]}|");
                            if (Index[player] < 14) Index[player] -= 1;
                            Items[player] -= 1;
                            if (Items[player] < 1) {
                                Items.Remove(player);
                                Index.Remove(player);
                            }
                        }
                        else {
                            player.ChatMessage($"В инвентаре недостаточно места для получения <color=lime>\"{Item.info.displayName.english}\"</color>");
                        }
                    }
                    else if (data["type"].ToString() == "command") {
                        string command = data["command"].ToString().Replace('\n', '|').ToLower().Trim('\"').Replace("%steamid%", player.UserIDString).Replace("%username%", player.displayName);
                        String[] CommandArray = command.Split('|');
                        foreach (var substring in CommandArray) {
                            ConsoleSystem.Run.Server.Normal(substring);
                            //   ConsoleSystem.Run(ConsoleSystem.Option.Server, substring);
                            Log.Add($"|{player.UserIDString}|{DateTime.Now.ToString()}|{data["name"]}({data["amount"]})|{substring}|");
                        }
                        player.ChatMessage($"Получен предмет из магазина: <color=lime>\"{data["name"]}\"</color>");
                        CuiHelper.DestroyUi(player, $"ui.block{Args[1]}");
                        CuiHelper.DestroyUi(player, $"ui.amount{Args[1]}");
                        CuiHelper.DestroyUi(player, $"ui.product{Args[1]}");
                        CuiHelper.DestroyUi(player, $"ui.command.take{Args[1]}");
                        SendGived(new Dictionary<string, string>() {
                            {
                                "gived", "true"
                            }
                            , {
                                "id", $"{Args[2]}"
                            }
                        }
                        , player);
                        if (Index[player] < 14) Index[player] -= 1;
                        Items[player] -= 1;
                        if (Items[player] < 1) {
                            Items.Remove(player);
                            Index.Remove(player);
                        }
                    }
                    SaveLog();
                    break;
                    case 404 : Debug.LogError("Response code: 404, please check your configurations");
                    break;
                    default : Debug.LogError("Api does not responded to a request");
                    break;
                }
                Requests.Remove(player.UserIDString + Args[2].ToString());
            }
            , this);
        }
#endregion
#region[Method] DestroyUI
        private void DestroyUI(BasePlayer Player) {
            for (int i = 0; i < 15; i++) {
                CuiHelper.DestroyUi(Player, $"ui.background{i}");
                CuiHelper.DestroyUi(Player, $"ui.amount{i}");
                CuiHelper.DestroyUi(Player, $"ui.product{i}");
                CuiHelper.DestroyUi(Player, $"ui.command.take{i}");
            }
            Items.Remove(Player);
            Index.Remove(Player);
            CuiHelper.DestroyUi(Player, "ui.close");
            CuiHelper.DestroyUi(Player, "ui.close.background");
            CuiHelper.DestroyUi(Player, "ui.command.takeall");
            CuiHelper.DestroyUi(Player, "ui.back");
            CuiHelper.DestroyUi(Player, "ui.next");
            CuiHelper.DestroyUi(Player, "ui.store");
        }
#endregion
#region[ChatCommand] /store
        [ChatCommand("store")]
        private void cmdStore(BasePlayer Player, string command, string[] args) {
            SendRequest(new Dictionary<string, string>() {
                {
                    "items", "true"
                }
                , {
                    "steam_id", $"{Player.UserIDString}"
                }
            }
            , Player);
        }
#endregion
#region[ConsoleCommand] /store
        [ConsoleCommand("ui.store")]
        private void cmdUiStore(ConsoleSystem.Arg Args) {
            BasePlayer Player = BasePlayer.FindByID(System.Convert.ToUInt64(Args.Args[0]));
            DestroyUI(Player);
            SendRequest(new Dictionary<string, string>() {
                {
                    "items", "true"
                }
                , {
                    "steam_id", $"{Player.UserIDString}"
                }
            }
            , Player);
        }
#endregion
#region[ConsoleCommand] ui.takeall
        [ConsoleCommand("ui.takeall")]
        private void cmdTakeAll(ConsoleSystem.Arg Args) {
            BasePlayer Player = BasePlayer.FindByID(System.Convert.ToUInt64(Args.Args[0]));
            if (TakeAllBan.ContainsKey(Player.UserIDString.ToString())) {
                if (TakeAllBan[Player.UserIDString.ToString()] + 5 > GetTimestampNow()) {
                    Player.ChatMessage($"Эту функцию можно использовать один раз в 5 сек.");
                    return;
                }
                else {
                    TakeAllBan.Remove(Player.UserIDString);
                }
            }
            TakeAllBan.Add(Player.UserIDString, GetTimestampNow());
            if (Player != null) {
                webrequest.EnqueueGet($"{Request}&items=true&steam_id={Player.UserIDString}", (code, response) => {
                    switch (code) {
                        case 0 : Debug.LogError("Api does not responded to a request");
                        break;
                        case 200 : Dictionary<string, object> Response = JsonConvert.DeserializeObject<Dictionary<string, object>>(response, new KeyValuesConverter());
                        if (!Response.ContainsKey("data")) return;
                        List<object> data = Response["data"] as List<object>;
                        if (data == null || Response == null) return;
                        if (data.Count() > 14) {
                            Player.ChatMessage($"Вы не можете забрать больше 14 предметов за раз.");
                            return;
                        }
                        if (data.Count() < 1) {
                            return;
                        }
                        int i = data.Count() - 1;
                        foreach (object pair in data) {
                            Dictionary<string, object> iteminfo = pair as Dictionary<string, object>;
                            List<string> Arguments = new List<string>() {
                                {
                                    $"{Args.Args[0]}"
                                }
                                , {
                                    $"{i}"
                                }
                                , {
                                    $"{iteminfo["id"]}"
                                }
                            }
                            ;
                            cmdTakeItem(Arguments);
                            i--;
                        }
                        if (Items[Player] < 1) {
                            Items.Remove(Player);
                            Index.Remove(Player);
                        }
                        break;
                        case 404 : Debug.LogError("Response code: 404, please check your configurations");
                        break;
                    }
                }
                , this);
            }
        }
#endregion
#region[ConsoleCommand] ui.gives
        [ConsoleCommand("ui.gives")]
        private void cmdDestroyItem(ConsoleSystem.Arg Args) {
            BasePlayer player = BasePlayer.FindByID(System.Convert.ToUInt64(Args.Args[0]));
            if (Requests.ContainsKey(player.UserIDString + Args.Args[2].ToString())) {
                if (Requests[player.UserIDString + Args.Args[2].ToString()] + 10 > GetTimestampNow()) {
                    player.ChatMessage($"Дождитесь завершения предыдущего запроса");
                    return;
                }
                else {
                    Requests.Remove(player.UserIDString + Args.Args[2].ToString());
                }
            }
            Requests.Add(player.UserIDString + Args.Args[2].ToString(), GetTimestampNow());
            webrequest.EnqueueGet($"{Request}&item=true&steam_id={player.UserIDString}&id={Args.Args[2]}", (code, response) => {
                switch (code) {
                    case 0 : Debug.LogError("Api does not responded to a request");
                    break;
                    case 200 : Dictionary<string, object> Response = JsonConvert.DeserializeObject<Dictionary<string, object>>(response, new KeyValuesConverter());
                    if (!Response.ContainsKey("data")) {
                        player.ChatMessage($"Предмет не найден");
                        CuiHelper.DestroyUi(player, $"ui.block{Args.Args[1]}");
                        CuiHelper.DestroyUi(player, $"ui.amount{Args.Args[1]}");
                        CuiHelper.DestroyUi(player, $"ui.product{Args.Args[1]}");
                        CuiHelper.DestroyUi(player, $"ui.command.take{Args.Args[1]}");
                        Requests.Remove(player.UserIDString + Args.Args[2].ToString());
                        return;
                    }
                    Dictionary<string, object> data = Response["data"] as Dictionary<string, object>;
                    if (data["type"].ToString() == "item") {
                        Item Item = CreateByItemID(System.Convert.ToInt32(data["item_id"]), System.Convert.ToInt32(data["amount"]));
                        if ((System.Convert.ToBoolean(Config["ITEMS.SPLIT"]) && CanTake(player, Item) >= Item.amount) || (!System.Convert.ToBoolean(Config["ITEMS.SPLIT"]) && (!player.inventory.containerMain.IsFull() || !player.inventory.containerBelt.IsFull()))) {
                            SendGived(new Dictionary<string, string>() {
                                {
                                    "gived", "true"
                                }
                                , {
                                    "id", $"{Args.Args[2]}"
                                }
                            }
                            , player);
                            CuiHelper.DestroyUi(player, $"ui.block{Args.Args[1]}");
                            CuiHelper.DestroyUi(player, $"ui.amount{Args.Args[1]}");
                            CuiHelper.DestroyUi(player, $"ui.product{Args.Args[1]}");
                            CuiHelper.DestroyUi(player, $"ui.command.take{Args.Args[1]}");
                            if (System.Convert.ToBoolean(Config["ITEMS.SPLIT"])) {
                                List<Item> Items = SplitItem(Item);
                                foreach (Item item in Items) {
                                    player.inventory.GiveItem(CreateByItemID(Item.info.itemid, item.amount), player.inventory.containerMain);
                                    player.ChatMessage($"Получен предмет из магазина: <color=lime>\"{data["name"]}\"</color> в количестве <color=lime>{Item.amount}</color> шт.");
                                }
                            }
                            else {
                                player.inventory.GiveItem(Item, player.inventory.containerMain);
                                player.ChatMessage($"Получен предмет из магазина: <color=lime>\"{data["name"]}\"</color> в количестве <color=lime>{data["amount"]}</color> шт.");
                            }
                            Log.Add($"|{player.UserIDString}|{DateTime.Now.ToString()}|{data["name"]}({data["amount"]})|{data["item_id"]}|");
                            if (Index[player] < 14) Index[player] -= 1;
                            Items[player] -= 1;
                            if (Items[player] < 1) {
                                Items.Remove(player);
                                Index.Remove(player);
                            }
                        }
                        else player.ChatMessage($"В инвентаре недостаточно места для получения <color=lime>\"{Item.info.displayName.english}\"</color>");
                    }
                    else if (data["type"].ToString() == "command") {
                        string command = data["command"].ToString().Replace('\n', '|').ToLower().Replace("%steamid%", player.UserIDString).Replace("%username%", player.displayName);
                        String[] CommandArray = command.Split('|');
                        foreach (var substring in CommandArray) {
                            ConsoleSystem.Run.Server.Normal(substring);
                            //   ConsoleSystem.Run(ConsoleSystem.Option.Server, substring);
                            Log.Add($"|{player.UserIDString}|{DateTime.Now.ToString()}|{data["name"]}({data["amount"]})|{substring}|");
                        }
                        player.ChatMessage($"Получен предмет из магазина: <color=lime>\"{data["name"]}\"</color>");
                        CuiHelper.DestroyUi(player, $"ui.block{Args.Args[1]}");
                        CuiHelper.DestroyUi(player, $"ui.amount{Args.Args[1]}");
                        CuiHelper.DestroyUi(player, $"ui.product{Args.Args[1]}");
                        CuiHelper.DestroyUi(player, $"ui.command.take{Args.Args[1]}");
                        SendGived(new Dictionary<string, string>() {
                            {
                                "gived", "true"
                            }
                            , {
                                "id", $"{Args.Args[2]}"
                            }
                        }
                        , player);
                        if (Index[player] < 14) Index[player] -= 1;
                        Items[player] -= 1;
                        if (Items[player] < 1) {
                            Items.Remove(player);
                            Index.Remove(player);
                        }
                    }
                    else
// ... [Code preview truncated due to length. Full source in attached file] ...

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