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] ...