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

FREE GameStoresRUST : 1.6.0 1.6.0

Нет прав для скачивания
C#:
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;
using System.Globalization;

namespace Oxide.Plugins
{
    [Info("GameStoresRUST", "", "1.6.0", ResourceId = 715)]
    class GameStoresRUST : RustPlugin
    {
        public string Request => $"http://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<string> Requests = new List<string>();

        #region [Override] Load default configurations
        protected override void LoadDefaultConfig()
        {
            Config["SHOP.ID"] = "22188";
            Config["SERVER.ID"] = "16198";
            Config["SECRET.KEY"] = "5bc8635630d1870246924a6e1040931e";
            Config["BUCKET.IMG"] = "";
            Config["ITEMS.SPLIT"] = true;
            Config["COMMAND.TOP"] = false;
            Config["UI.ENABLED"] = true;
            Config["TOP.USERS"] = false;
            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()
        {
            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);
                }
            }

        }
        #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",
                            FadeIn = 0.25f,
                            Url = Image
                        },
                        new CuiRectTransformComponent()
                        {
                            AnchorMin = "0.01 0.955",
                            AnchorMax = "0.035 0.99"
                        }
                    }
                    });
                    UI.Add(new CuiButton()
                    {
                        Button =
                    {
                        Command = $"ui.store {player.userID}",
                        FadeIn = 0.25f,
                        Color = "0 0 0 0"
                    },
                        RectTransform =
                    {
                        AnchorMin = "0.01 0.95",
                        AnchorMax = "0.04 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("<size=18>КОРЗИНА ПРЕДМЕТОВ</size>\n<size=15>Корзина недоступна.Попробуйте позже</size>");
                    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"]))
                                {
									UI.Add(new CuiPanel
                                    {
										Image = { Color = "0 0 0 0.75", Sprite = "assets/content/textures/generic/fulltransparent.tga", Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat", FadeIn = 0.25f, },
                                        RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1" },
                                        CursorEnabled = true,
                                    }, "Overlay", "ui.store");
									
									UI.Add(new CuiButton
                                    {
                                        Button =
                                    {
                                        Command = $"ui.destroy {Player.userID}",
                                        FadeIn = 0.25f,
                                        Color = "0 0 0 0"
                                    },
                                        RectTransform =
                                    {
	                                    AnchorMin = "0 0",
	                                    AnchorMax = "1 0.965"
                                    },
                                        Text =
                                    {
                                        Text = "КОРЗИНА ПРЕДМЕТОВ",
                                        FadeIn = 0.25f,
                                        FontSize = 45,
                                        Align = TextAnchor.UpperCenter
                                    }
                                    }, "ui.store", "ui.close");
									
									UI.Add(new CuiElement
                                    {
										Parent = "ui.store",
				                        Name = "ui.stores",
                                        Components =
                                        {
											new CuiImageComponent { Color = "0 0 0 0", FadeIn = 0.25f, },
											new CuiRectTransformComponent { AnchorMin = "0.15 0.01", AnchorMax = "0.85 0.90" }
                                        }
                                    });

                                    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 = HexToRustFormat("#FFFFFF19"),
                                                FadeIn = 0.25f
                                            },
                                                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.stores", $"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] ImgBlock                                                                                      
                                                UI.Add(new CuiElement()
                                                {
                                                    Name = $"ui.block{index}",
                                                    Parent = $"ui.background{index}",
                                                    Components =
                                                {
                                                    new CuiRawImageComponent
                                                    {
                                                        Sprite = "assets/content/textures/generic/fulltransparent.tga",
                                                        FadeIn = 0.25f,
                                                        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 1.0"
                                                    }
                                                }
                                                });
                                                #endregion

                                                #region[Label] Amount
                                                UI.Add(new CuiLabel()
                                                {
                                                    RectTransform =
                                                {
                                                    AnchorMin = $"0.0 0.0",
                                                    AnchorMax = $"1.0 0.90"
                                                },
                                                    Text =
                                                {
                                                    Text = $"{Amount} шт.",
                                                    FadeIn = 0.25f,
                                                    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,
                                                    FadeIn = 0.25f,
                                                    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"]}",
                                                    FadeIn = 0.25f,
                                                    Color = "0 0 0 0"
                                                },
                                                    RectTransform =
                                                {
                                                    AnchorMin = $"0.0 0.0",
                                                    AnchorMax = $"1.0 1.0"
                                                },
                                                    Text =
                                                {
                                                    Text = " ",
                                                    FadeIn = 0.25f
                                                }
                                                }, $"ui.background{index}", $"ui.command.take{index}");
                                                #endregion

                                            }
                                            index++;
                                        }
                                    }

                                    #region[Button] Back
                                    UI.Add(new CuiButton
                                    {
                                        Button =
                                    {
                                        Command = $"ui.back {Player.UserIDString}",
                                        FadeIn = 0.25f,
                                        Color = HexToRustFormat("#702679FF")
                                    },
                                        RectTransform =
                                    {
                                        AnchorMin = $"0.42 0.39",
                                        AnchorMax = $"0.65 0.49"
                                    },
                                        Text =
                                    {
                                        Text = "НАЗАД",
                                        Color = "1 1 1 1",
                                        FadeIn = 0.25f,
                                        Align = TextAnchor.MiddleCenter,
                                        FontSize = 25
                                    }
                                    }, "ui.stores", $"ui.back");
                                    #endregion

                                    #region[Button] Next
                                    UI.Add(new CuiButton
                                    {
                                        Button =
                                    {
                                        Command = $"ui.next {Player.UserIDString}",
                                        FadeIn = 0.25f,
                                        Color = HexToRustFormat("#702679FF")
                                    },
                                        RectTransform =
                                    {
                                        AnchorMin = $"0.70 0.39",
                                        AnchorMax = $"0.95 0.49"
                                    },
                                        Text =
                                    {
                                        Text = "ВПЕРЁД",
                                        Color = "1 1 1 1",
                                        FadeIn = 0.25f,
                                        Align = TextAnchor.MiddleCenter,
                                        FontSize = 25
                                    }
                                    }, "ui.stores", $"ui.next");
                                    #endregion

                                    #region[Button] TakeAll
                                    UI.Add(new CuiButton
                                    {
                                        Button =
                                    {
                                        Command = $"ui.takeall {Player.UserIDString}",
                                        FadeIn = 0.25f,
                                        Color = HexToRustFormat("#702679FF")
                                    },
                                        RectTransform =
                                    {
                                        AnchorMin = $"0.42 0.25",
                                        AnchorMax = $"0.95 0.35"
                                    },
                                        Text =
                                    {
                                        Text = "ЗАБРАТЬ ВСЁ",
                                        FadeIn = 0.25f,
                                        Color = "1 1 1 1",
                                        Align = TextAnchor.MiddleCenter,
                                        FontSize = 25
                                    }
                                    }, "ui.stores", $"ui.command.takeall");
                                    #endregion

                                    #region[Label] shopLink
                                    UI.Add(new CuiLabel()
                                    {
                                        RectTransform =
                                    {
                                        AnchorMin = $"0.42 0.05",
                                        AnchorMax = $"0.95 0.28"
                                    },
                                        Text =
                                    {
                                        Text = " ",
                                        FadeIn = 0.25f,
                                        Align = TextAnchor.MiddleCenter,
                                        Color = "1 1 1 1",
                                        FontSize = 45
                                    }
                                    }, "ui.stores", " ");
                                    #endregion

                                    CuiHelper.DestroyUi(Player, "ui.stores");
                                    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);
                                        }
                                        Player.ChatMessage($"<size=18>КОРЗИНА ПРЕДМЕТОВ</size>\n<size=15>Товар: <color=#4B0082>\"{iteminfo["name"]}\"</color> успешно получен!</size>");
                                        SendResult(new Dictionary<string, string>() { { "gived", "true" }, { "id", $"{iteminfo["id"]}" } });
                                        break;
                                    }

                                    int ItemID = System.Convert.ToInt32(iteminfo["item_id"]);
                                    int Amount = System.Convert.ToInt32(iteminfo["amount"]);
                                    Item Item = ItemManager.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(ItemManager.CreateByItemID(Item.info.itemid, item.amount), Player.inventory.containerMain);
                                            }
                                        }
                                        else
                                        {
                                            Player.inventory.GiveItem(Item, Player.inventory.containerMain);
                                        }

                                        Player.ChatMessage($"<size=18>КОРЗИНА ПРЕДМЕТОВ</size>\n<size=15>Товар: <color=#4B0082>\"{iteminfo["name"]}\"</color> в количестве <color=#99CC33>{Amount}</color> шт.успешно получен!</size>");
                                        SendGived(new Dictionary<string, string>() { { "gived", "true" }, { "id", $"{iteminfo["id"]}" } }, Player);
                                    }
                                    else
                                        Player.ChatMessage($"<size=18>КОРЗИНА ПРЕДМЕТОВ</size>\n<size=15>В инвентаре недостаточно места для получения <color=#4B0082>\"{iteminfo["name"]}\"</color></size>");

                                }
                                #endregion
                                break;
                            case 104:
                                if (System.Convert.ToBoolean(Config["UI.ENABLED"]))
                                {
                                    #region[Panel] Parent
									UI.Add(new CuiPanel
                                    {
										Image = { Color = "0 0 0 0.75", Sprite = "assets/content/textures/generic/fulltransparent.tga", Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat", FadeIn = 0.25f },
                                        RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1" },
                                        CursorEnabled = true,
                                    }, "Overlay", "ui.store");
									
									UI.Add(new CuiButton
                                    {
                                        Button =
                                    {
                                        Command = $"ui.destroy {Player.userID}",
                                        FadeIn = 0.25f,
                                        Color = "0 0 0 0"
                                    },
                                        RectTransform =
                                    {
	                                    AnchorMin = "0 0",
	                                    AnchorMax = "1 0.95"
                                    },
                                        Text =
                                    {
                                        Text = "КОРЗИНА ПРЕДМЕТОВ",
                                        FadeIn = 0.25f,
                                        FontSize = 40,
                                        Align = TextAnchor.UpperCenter
                                    }
                                    }, "ui.store", "ui.close");
									
									UI.Add(new CuiElement
                                    {
										Parent = "ui.store",
				                        Name = "ui.stores",
                                        Components =
                                        {
											new CuiImageComponent { Color = "0 0 0 0", FadeIn = 0.25f, },
											new CuiRectTransformComponent { AnchorMin = "0.20 0.20", AnchorMax = "0.80 0.85" }
                                        }
                                    });
                                    #endregion

                                    UI.Add(new CuiLabel()
                                    {
                                        RectTransform =
                                    {
                                        AnchorMin = "0.01 0.01",
                                        AnchorMax = "0.99 0.50"
                                    },
                                        Text =
                                    {
                                        Text = "КОРЗИНА ПРЕДМЕТОВ ПУСТА!",
                                        FadeIn = 0.25f,
                                        Align = TextAnchor.UpperCenter,
                                        Color = "1 1 1 1",
                                        FontSize = 35
                                    }
                                    }, "ui.stores", "ui.noitems");

                                    CuiHelper.DestroyUi(Player, "ui.stores");
                                    CuiHelper.AddUi(Player, UI);
                                    return;
                                }
                                Player.ChatMessage($"У Вас нет предметов в магазине!");
                                break;
                        }
                    }
                    else
                        Debug.LogWarning(response);
                    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[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[ChatCommand] /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 (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[Method] cmdTakeItem
        private void cmdTakeItem(List<string> Args)
        {
			BasePlayer player = BasePlayer.FindByID(System.Convert.ToUInt64(Args[0]));
            if (Requests.Contains(player.UserIDString + Args[1].ToString()))
			{
				player.ChatMessage($"<size=18>КОРЗИНА ПРЕДМЕТОВ</size>\n<size=15>Дождитесь завершения предведущего запроса</size>");
				return;
			}
			Requests.Add(player.UserIDString + Args[1].ToString());
			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.Contains(player.UserIDString + Args[1].ToString()))
							    Requests.Remove(player.UserIDString + Args[1].ToString());
							return;
						}
						Dictionary<string, object> data = Response["data"] as Dictionary<string, object>; ;
						if (data["type"].ToString() == "item")
						{
							Item Item = ItemManager.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(ItemManager.CreateByItemID(Item.info.itemid, item.amount), player.inventory.containerMain);
                                        player.ChatMessage($"<size=18>КОРЗИНА ПРЕДМЕТОВ</size>\n<size=15>Товар: <color=#4B0082>\"{data["name"]}\"</color> в количестве <color=#4B0082>{Item.amount}</color> шт.успешно получен!</size>");
									}
								}
								else
								{
									player.inventory.GiveItem(Item, player.inventory.containerMain);
									player.ChatMessage($"<size=18>КОРЗИНА ПРЕДМЕТОВ</size>\n<size=15>Товар: <color=#4B0082>\"{data["name"]}\"</color> в количестве <color=##4B0082>{data["amount"]}</color> шт.успешно получен!</size>");
								}

								if (Index[player] < 14)
									Index[player] -= 1;
								Items[player] -= 1;

								if (Items[player] < 1)
								{
									Items.Remove(player);
									Index.Remove(player);
								}                       
							}
							else
							{
								player.ChatMessage($"<size=18>КОРЗИНА ПРЕДМЕТОВ</size>\n<size=15>В инвентаре недостаточно места для получения <color=#4B0082>\"{Item.info.displayName.english}\"</color></size>");
							}                  
						}
						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);
							}

							player.ChatMessage($"<size=18>КОРЗИНА ПРЕДМЕТОВ</size>\n<size=15>Товар: <color=#4B0082>\"{data["name"]}\"</color> успешно получен!</size>");
							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);
							}

						}
						Requests.Remove(player.UserIDString + Args[1].ToString());
						break;
					case 404:
                        Requests.Remove(player.UserIDString + Args[1].ToString());
                        Debug.LogError("Response code: 404, please check your configurations");
						break;
                    default:
                        Debug.LogError("Api does not responded to a request");
                        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.Contains(player.UserIDString + Args.Args[1].ToString()))
            {
                player.ChatMessage($"<size=18>КОРЗИНА ПРЕДМЕТОВ</size>\n<size=15>Дождитесь завершения предведущего запроса</size>");
                return;               
            }
            Requests.Add(player.UserIDString + Args.Args[1].ToString());
            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[1].ToString());
							return;
						}
						Dictionary<string, object> data = Response["data"] as Dictionary<string, object>;
						if (data["type"].ToString() == "item")
						{
							Item Item = ItemManager.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(ItemManager.CreateByItemID(Item.info.itemid, item.amount), player.inventory.containerMain);
										player.ChatMessage($"<size=18>КОРЗИНА ПРЕДМЕТОВ</size>\n<size=15>Товар: <color=#4B0082>\"{data["name"]}\"</color> в количестве <color=#4B0082>{Item.amount}</color> шт.успешно получен!</size>");
									}
								}
								else
								{
									player.inventory.GiveItem(Item, player.inventory.containerMain);
									player.ChatMessage($"<size=18>КОРЗИНА ПРЕДМЕТОВ</size>\n<size=15>Товар: <color=#4B0082>\"{data["name"]}\"</color> в количестве <color=#4B0082>{data["amount"]}</color> шт.успешно получен!</size>");
								}

								if (Index[player] < 14)
									Index[player] -= 1;
								Items[player] -= 1;

								if (Items[player] < 1)
								{
									Items.Remove(player);
									Index.Remove(player);
								}
							}
							else
								player.ChatMessage($"<size=18>КОРЗИНА ПРЕДМЕТОВ</size>\n<size=15>В инвентаре недостаточно места для получения <color=#4B0082>\"{Item.info.displayName.english}\"</color></size>");
						}
						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);
							}

							player.ChatMessage($"<size=18>КОРЗИНА ПРЕДМЕТОВ</size>\n<size=15>Товар: <color=#4B0082>\"{data["name"]}\"</color> успешно получен!</size>");
							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);
							}                   
						}
						Requests.Remove(player.UserIDString + Args.Args[1].ToString());
						break;
					case 404:
						Debug.LogError("Response code: 404, please check your configurations");
						break;
				}
                Requests.Remove(player.UserIDString + Args.Args[1].ToString());
            }, this);
        }
        #endregion

        #region[ChatCommand] ui.destroy
        [ConsoleCommand("ui.destroy")]
        private void cmdUi(ConsoleSystem.Arg Args)
        {
            BasePlayer Player = BasePlayer.FindByID(System.Convert.ToUInt64(Args.Args[0]));
            if (Requests.Contains(Player.UserIDString + "0"))
            {
                Player.ChatMessage($"<size=18>КОРЗИНА ПРЕДМЕТОВ</size>\n<size=15>Дождитесь завершения всех запросов</size>");
                return;
            }
            else
            {
                DestroyUI(Player);
            }        
        }
        #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.command.takeall");
            CuiHelper.DestroyUi(Player, "ui.back");
            CuiHelper.DestroyUi(Player, "ui.next");
            CuiHelper.DestroyUi(Player, "ui.store");
			CuiHelper.DestroyUi(Player, "ui.stores");
        }
        #endregion

        #region[ConsoleCommand] ui.back
        [ConsoleCommand("ui.back")]
        private void cmdUiBack(ConsoleSystem.Arg Args)
        {
            BasePlayer Player = BasePlayer.FindByID(System.Convert.ToUInt64(Args.Args[0]));
            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>;
					List<object> items = new List<object>();
					if (data == null || Response == null)
						return;
					if (Index[Player] <= 14)
					{
						return;
					}
					else
					{

						int Page = System.Convert.ToInt32(System.Math.Ceiling((System.Convert.ToSingle(Index[Player]) / 14f)));
						Index[Player] = (Page - 1) * 14;

						for (int i = 0; i != 14; i++)
						{
							CuiHelper.DestroyUi(Player, $"ui.block{i}");
							CuiHelper.DestroyUi(Player, $"ui.amount{i}");
							CuiHelper.DestroyUi(Player, $"ui.product{i}");
							CuiHelper.DestroyUi(Player, $"ui.command.take{i}");
							Index[Player] -= 1;
						}

						for (int i = 0; i != 14 && i < data.Count; i++)
						{
							items.Add(data[Index[Player] + i]);
						}

						if (Index[Player] < 1)
							Index[Player] = 0;

						CuiElementContainer UI = new CuiElementContainer();
						for (int index = 0; index != 14 && index < items.Count; index++)
						{
							Dictionary<string, object> itemdata = items[index] as Dictionary<string, object>;

							int ItemID = System.Convert.ToInt32(itemdata["item_id"]);
			
// ... [Code preview truncated due to length. Full source in attached file] ...

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