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

FREE GameStoresRUST : 1.6.1 1.6.1

Нет прав для скачивания
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", "Sstine", "1.6.1", 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" ] = "0";
            Config["SERVER.ID" ] = "0";
            Config["SECRET.KEY" ] = "KEY";
            Config["BUCKET.IMG" ] = "http://gamestores.ru/img/plugin_new.png";
            Config["ITEMS.SPLIT" ] = false;
            Config["COMMAND.TOP" ] = false;
            Config["UI.ENABLED" ] = false;
            Config["TOP.USERS" ] = false;
            Config["BUCKET.BUTTON" ] = false;
        }
#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 CuiImageComponent {
                                Sprite = "assets/icons/loot.png", Color = "1 1 1 1"
                            }
                            , new CuiRectTransformComponent() {
                                AnchorMin = "0.01 0.955", AnchorMax = "0.035 0.99"
                            }
                        }
                    }
                    );
                    UI.Add(new CuiButton() {
                        Button = {
                            Command = $"ui.store {player.userID}", 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("Корзина недоступна.Попробуйте позже" );
                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[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
                            }
                            , "Overlay", "ui.store" );
#endregion
                            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] 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 1.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++;
                                }
                            }
#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 = 15, 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;
                            }
                            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($"Получен товар из магазина: <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[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
                            }
                            , "Overlay", "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 = 15, Align = TextAnchor.MiddleCenter
                                }
                            }
                            , "ui.store", "ui.close" );
#endregion
                            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($"Дождитесь завершения предведущего запроса" );
                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($"Получен предмет из магазина: <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> шт." );
                            }
                            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 );
                        }
                        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 );
                        }
                    }
                    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($"Дождитесь завершения предведущего запроса" );
                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($"Получен предмет из магазина: <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> шт." );
                            }
                            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 );
                        }
                        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 );
                        }
                    }
                    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($"Дождитесь завершения всех запросов" );
                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" );
        }
#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" ] );
                            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", 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} шт.", 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[Player ] += 1;
                        }
                        CuiHelper.AddUi(Player, UI );
                    }
                    break;
                    case 404 : Debug.LogError("Response code: 404, please check your configurations" );
                    break;
                }
            }
            , this );
        }
#endregion
#region[ConsoleCommand] ui.next
        [ConsoleCommand("ui.next" )]
        private void cmdUiNext(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 
// ... [Code preview truncated due to length. Full source in attached file] ...

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