C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System.Collections.Generic;
using System;
using System.Linq;
using UnityEngine;
using Oxide.Core.Plugins;
using Oxide.Core.Configuration;
using Oxide.Game.Rust.Cui;
using Oxide.Core;
using System.Collections;
using System.IO;
namespace Oxide.Plugins {
[Info("AbsolutMarket", "Absolut", "1.3.0", ResourceId = 2118)]
class AbsolutMarket : RustPlugin {
[PluginReference]
Plugin ServerRewards;
static GameObject webObject;
static UnityImages uImage;
static UnityBackgrounds uBackground;
MarketData mData;
private DynamicConfigFile MData;
AMImages imgData;
private DynamicConfigFile IMGData;
Backgrounds bkData;
private DynamicConfigFile BKData;
class Backgrounds {
public Dictionary<string, string> PendingBackgrounds = new Dictionary<string, string>();
}
string TitleColor = "<color=orange>";
string MsgColor = "<color=#A9A9A9>";
private List<ulong> MenuState = new List<ulong>();
private List<ulong> SettingBox = new List<ulong>();
private Dictionary<string, Timer> timers = new Dictionary<string, Timer>();
private Dictionary<ulong, List<AMItem>> PlayerBoxContents = new Dictionary<ulong, List<AMItem>>();
private Dictionary<ulong, AMItem> SalesItemPrep = new Dictionary<ulong, AMItem>();
private Dictionary<ulong, List<Item>> PlayerInventory = new Dictionary<ulong, List<Item>>();
private Dictionary<ulong, List<Item>> TransferableItems = new Dictionary<ulong, List<Item>>();
private Dictionary<ulong, List<Item>> ItemsToTransfer = new Dictionary<ulong, List<Item>>();
private Dictionary<ulong, bool> PlayerPurchaseApproval = new Dictionary<ulong, bool>();
private Dictionary<ulong, AMItem> SaleProcessing = new Dictionary<ulong, AMItem>();
#region Server Hooks
void Loaded() {
MData = Interface.Oxide.DataFileSystem.GetFile("AbsolutMarket_Data");
IMGData = Interface.Oxide.DataFileSystem.GetFile("AbsolutMarket_Images");
BKData = Interface.Oxide.DataFileSystem.GetFile("AbsolutMarket_AddBackgrounds");
lang.RegisterMessages(messages, this);
}
void Unload() {
foreach (var entry in timers) entry.Value.Destroy();
MenuState.Clear();
timers.Clear();
PlayerBoxContents.Clear();
SalesItemPrep.Clear();
foreach (BasePlayer p in BasePlayer.activePlayerList) {
DestroyMarketPanel(p);
DestroyPurchaseScreen(p);
}
SaveData();
}
private void OnPlayerDisconnected(BasePlayer player) {
if (MenuState.Contains(player.userID)) MenuState.Remove(player.userID);
}
private void OnPlayerInit(BasePlayer player) {
if (player != null) {
player.Command($"bind {configData.MarketMenuKeyBinding} \"UI_ToggleMarketScreen\"");
GetSendMSG(player, "AMInfo", configData.MarketMenuKeyBinding);
if (!mData.names.ContainsKey(player.userID)) mData.names.Add(player.userID, player.displayName);
else {
var length = player.displayName.Count();
if (length > 30) {
mData.names[player.userID] = player.displayName.Substring(0, 30);
}
else mData.names[player.userID] = player.displayName;
}
SendMessages(player);
}
}
void OnServerInitialized() {
webObject = new GameObject("WebObject");
uImage = webObject.AddComponent<UnityImages>();
uImage.SetDataDir(this);
uBackground = webObject.AddComponent<UnityBackgrounds>();
uBackground.SetDataDir(this);
LoadVariables();
LoadData();
timers.Add("info", timer.Once(configData.InfoInterval, () => InfoLoop()));
timers.Add("save", timer.Once(600, () => SaveLoop()));
SaveData();
if (imgData.SavedImages == null || imgData.SavedImages.Count == 0) Getimages();
else Refreshimages();
//if (imgData.SavedBackgrounds == null || imgData.SavedBackgrounds.Count == 0)
//GetBackgrounds();
// else
RefreshBackgrounds();
foreach (BasePlayer p in BasePlayer.activePlayerList) OnPlayerInit(p);
}
#endregion
#region Player Hooks
void OnEntityBuilt(Planner planner, GameObject gameobject) {
if (planner == null) return;
if (gameobject.GetComponent<BaseEntity>() != null) {
BaseEntity element = gameobject.GetComponent<BaseEntity>();
var entityowner = element.OwnerID;
var ID = element.net.ID;
if (!SettingBox.Contains(entityowner)) return;
if (element.PrefabName == "assets/prefabs/deployable/large wood storage/box.wooden.large.prefab" || element.PrefabName == "assets/prefabs/deployable/woodenbox/woodbox_deployed.prefab") {
BasePlayer player = BasePlayer.FindByID(entityowner);
TradeBoxConfirmation(player, ID);
}
}
}
private void OnEntityDeath(BaseEntity entity, HitInfo hitInfo) {
if (entity is StorageContainer) {
uint ID = entity.net.ID;
if (mData.TradeBox.ContainsKey(entity.OwnerID)) {
if (ID == mData.TradeBox[entity.OwnerID]) {
Dictionary<uint, string> listings = new Dictionary<uint, string>();
foreach (var entry in mData.MarketListings.Where(kvp => kvp.Value.seller == entity.OwnerID)) listings.Add(entry.Key, entry.Value.shortname);
foreach (var entry in listings) RemoveListing(entity.OwnerID, entry.Value, entry.Key, "TradeBoxDestroyed");
listings.Clear();
mData.TradeBox.Remove(entity.OwnerID);
BasePlayer owner = BasePlayer.FindByID(entity.OwnerID);
if (BasePlayer.activePlayerList.Contains(owner)) GetSendMSG(owner, "TradeBoxDestroyed");
}
SaveData();
}
return;
}
}
private object OnPlayerChat(ConsoleSystem.Arg arg) {
var player = arg.connection.player as BasePlayer;
if (player == null) return null;
bool isPreping = false;
AMItem item;
var args = string.Join(" ", arg.Args);
if (SalesItemPrep.ContainsKey(player.userID)) {
isPreping = true;
}
if (SettingBox.Contains(player.userID)) {
if (args.Contains("quit")) {
SettingBox.Remove(player.userID);
GetSendMSG(player, "ExitedBoxMode");
return true;
}
}
if (isPreping) {
item = SalesItemPrep[player.userID];
if (args.Contains("quit")) {
CancelListing(player);
return true;
}
switch (item.stepNum) {
case 0 : var name = string.Join(" ", arg.Args);
item.name = name;
item.stepNum = 99;
SellItems(player, 1);
return true;
}
}
return null;
}
#endregion
#region Functions
private StorageContainer GetTradeBox(ulong Buyer) {
List<StorageContainer> Containers = new List<StorageContainer>();
if (mData.TradeBox.ContainsKey(Buyer)) {
uint ID = mData.TradeBox[Buyer];
foreach (StorageContainer Cont in StorageContainer.FindObjectsOfType<StorageContainer>()) {
if (Cont.net.ID == ID) return Cont;
}
}
return null;
}
private bool GetTradeBoxContents(BasePlayer player) {
if (player == null) return false;
ulong seller = player.userID;
if (GetTradeBox(seller) != null) {
StorageContainer box = GetTradeBox(seller);
if (GetItems(box.inventory).Count() == 0) {
if (!ServerRewards || !configData.ServerRewards || mData.Blacklist.Contains("SR")) {
GetSendMSG(player, "TradeBoxEmpty");
return false;
}
else if (CheckPoints(player.userID) is int) if ((int)CheckPoints(player.userID) < 1) {
GetSendMSG(player, "TradeBoxEmptyNoSR");
return false;
}
}
if (PlayerBoxContents.ContainsKey(seller)) PlayerBoxContents.Remove(seller);
PlayerBoxContents.Add(seller, new List<AMItem>());
PlayerBoxContents[seller].AddRange(GetItems(box.inventory));
var bl = 0;
var c = 0;
var listed = 0;
foreach (var entry in PlayerBoxContents[seller]) {
c++;
if (mData.Blacklist.Contains(entry.shortname)) bl++;
if (mData.MarketListings.ContainsKey(entry.ID)) listed++;
foreach (var cat in imgData.SavedImages) foreach (var item in cat.Value) {
if (item.Key == entry.shortname) {
entry.cat = cat.Key;
break;
}
}
}
if (bl == c) {
if (!ServerRewards || !configData.ServerRewards || mData.Blacklist.Contains("SR")) {
GetSendMSG(player, "AllItemsAreBL");
return false;
}
else if (CheckPoints(player.userID) is int) if ((int)CheckPoints(player.userID) < 1) {
GetSendMSG(player, "AllItemsAreBLNoSR");
return false;
}
}
if (c == listed) {
if (!ServerRewards || !configData.ServerRewards || mData.Blacklist.Contains("SR")) {
GetSendMSG(player, "AllItemsAreListed");
return false;
}
else if (CheckPoints(player.userID) is int) if ((int)CheckPoints(player.userID) < 1) {
GetSendMSG(player, "AllItemsAreListedNoSR");
return false;
}
}
return true;
}
else GetSendMSG(player, "NoTradeBox");
return false;
}
private bool BoxCheck(BasePlayer player, uint item) {
if (player == null) return false;
ulong seller = player.userID;
if (GetTradeBox(seller) != null) {
StorageContainer box = GetTradeBox(seller);
if (GetItems(box.inventory).Count() == 0) {
GetSendMSG(player, "TradeBoxEmpty");
return false;
}
foreach (var entry in box.inventory.itemList) {
if (entry.uid == item) return true;
}
return false;
}
else GetSendMSG(player, "NoTradeBox");
return false;
}
private void AddMessages(ulong player, string message, string arg1 = "", string arg2 = "", string arg3 = "", string arg4 = "") {
try {
BasePlayer Online = BasePlayer.FindByID(player);
if (BasePlayer.activePlayerList.Contains(Online)) GetSendMSG(Online, message, GetLang(arg1), GetLang(arg2), GetLang(arg3), GetLang(arg4));
}
catch {
if (!mData.OutstandingMessages.ContainsKey(player)) mData.OutstandingMessages.Add(player, new List<Unsent>());
mData.OutstandingMessages[player].Add(new Unsent {
message = message, arg1 = arg1, arg2 = arg2, arg3 = arg3, arg4 = arg4
}
);
SaveData();
}
}
private void SendMessages(BasePlayer player) {
if (mData.OutstandingMessages.ContainsKey(player.userID)) {
foreach (var entry in mData.OutstandingMessages[player.userID]) {
GetSendMSG(player, entry.message, GetLang(entry.arg1), GetLang(entry.arg2), GetLang(entry.arg3), GetLang(entry.arg4));
}
mData.OutstandingMessages.Remove(player.userID);
}
}
private IEnumerable<AMItem> GetItems(ItemContainer container) {
return container.itemList.Select(item => new AMItem {
amount = item.amount, skin = item.skin, cat = Category.None, pricecat = Category.None, shortname = item.info.shortname, condition = item.condition, ID = item.uid,
}
);
}
private IEnumerable<Item> GetItemsOnly(ItemContainer container) {
return container.itemList;
}
private void XferPurchase(ulong buyer, uint ID, ItemContainer from, ItemContainer to) {
foreach (Item item in from.itemList.Where(kvp => kvp.uid == ID)) ItemsToTransfer[buyer].Add(item);
//item.MoveToContainer(to);
}
private void XferCost(Item item, BasePlayer player, uint Listing) {
//Puts("Starting");
ItemContainer from = player.inventory.containerMain;
if (player.inventory.containerBelt.itemList.Contains(item)) {
from = player.inventory.containerBelt;
//Puts($"{from} belt");
}
else if (player.inventory.containerWear.itemList.Contains(item)) {
from = player.inventory.containerWear;
//Puts($"{from} wear");
}
else //Puts($"{from} main");
if (mData.MarketListings[Listing].priceAmount > 0) {
//Puts("TRying");
foreach (Item item1 in from.itemList.Where(kvp => kvp == item)) {
//Puts("Item found)");
if (mData.MarketListings[Listing].priceAmount >= item1.amount) {
//Puts("1");
ItemsToTransfer[player.userID].Add(item1);
mData.MarketListings[Listing].priceAmount -= item1.amount;
//Puts($"{item1} moved...price amount: {mData.MarketListings[Listing].priceAmount} item amount:{item1.amount}");
}
else {
Item item2 = item1.SplitItem(mData.MarketListings[Listing].priceAmount);
ItemsToTransfer[player.userID].Add(item2);
mData.MarketListings[Listing].priceAmount = 0;
//Puts($"SPLITTING: {item2} moved...price amount: {mData.MarketListings[Listing].priceAmount} item amount:{item2.amount}");
}
break;
}
}
}
private Item BuildCostItems(string shortname, int amount) {
var definition = ItemManager.FindItemDefinition(shortname);
if (definition != null) {
var item1 = ItemManager.Create(definition, amount, 0);
if (item1 != null) return item1;
}
Puts("Error making purchase cost item(s)");
return null;
}
void OnItemRemovedFromContainer(ItemContainer cont, Item item) {
if (cont.entityOwner != null) if (mData.TradeBox.ContainsValue(cont.entityOwner.net.ID)) if (mData.TradeBox.ContainsKey(cont.entityOwner.OwnerID)) if (mData.TradeBox[cont.entityOwner.OwnerID] == cont.entityOwner.net.ID) if (mData.MarketListings.ContainsKey(item.uid)) {
var name = "";
if (configData.UseUniqueNames && item.name != "") name = mData.MarketListings[item.uid].name;
else name = mData.MarketListings[item.uid].shortname;
RemoveListing(cont.entityOwner.OwnerID, name, item.uid, "FromBox");
mData.MarketListings.Remove(item.uid);
}
}
private void RemoveListing(ulong seller, string name, uint ID, string reason = "") {
AddMessages(seller, "ItemRemoved", name.ToUpper(), reason);
mData.MarketListings.Remove(ID);
}
private void CancelListing(BasePlayer player) {
DestroyMarketPanel(player);
if (SalesItemPrep.ContainsKey(player.userID)) SalesItemPrep.Remove(player.userID);
if (PlayerBoxContents.ContainsKey(player.userID)) PlayerBoxContents.Remove(player.userID);
GetSendMSG(player, "ItemListingCanceled");
}
private void SRAction(ulong ID, int amount, string action) {
if (action == "ADD") ServerRewards?.Call("AddPoints", new object[] {
ID, amount
}
);
if (action == "REMOVE") ServerRewards?.Call("TakePoints", new object[] {
ID, amount
}
);
}
private object CheckPoints(ulong ID) => ServerRewards?.Call("CheckPoints", ID);
private void NumberPad(BasePlayer player, string cmd) {
CuiHelper.DestroyUi(player, PanelMarket);
var element = UI.CreateElementContainer(PanelMarket, UIColors["dark"], "0.35 0.3", "0.65 0.7", true);
UI.CreatePanel(ref element, PanelMarket, UIColors["light"], "0.01 0.02", "0.99 0.98");
UI.CreateLabel(ref element, PanelMarket, UIColors["limegreen"], GetLang("Select Amount"), 20, "0.1 0.85", "0.9.98", TextAnchor.UpperCenter);
var n = 1;
var i = 0;
while (n < 10) {
CreateNumberPadButton(ref element, PanelMarket, i, n, cmd);
i++;
n++;
}
while (n >= 10 && n < 25) {
CreateNumberPadButton(ref element, PanelMarket, i, n, cmd);
i++;
n += 5;
}
while (n >= 25 && n < 200) {
CreateNumberPadButton(ref element, PanelMarket, i, n, cmd);
i++;
n += 25;
}
while (n >= 200 && n <= 950) {
CreateNumberPadButton(ref element, PanelMarket, i, n, cmd);
i++;
n += 50;
}
while (n >= 1000 && n <= 10000) {
CreateNumberPadButton(ref element, PanelMarket, i, n, cmd);
i++;
n += 500;
}
UI.CreateButton(ref element, PanelMarket, UIColors["buttonred"], GetLang("Quit"), 10, "0.03 0.02", "0.13 0.075", $"UI_MarketMainScreen {0} {Enum.GetName(typeof(Category), Category.All)}");
CuiHelper.AddUi(player, element);
}
private void CreateNumberPadButton(ref CuiElementContainer container, string panelName, int i, int number, string command) {
var pos = CalcNumButtonPos(i);
UI.CreateButton(ref container, panelName, UIColors["buttonbg"], number.ToString(), 12, $"{pos[0]} {pos[1]}", $"{pos[2]} {pos[3]}", $"{command} {number}");
}
private string GetLang(string msg) {
if (messages.ContainsKey(msg)) return lang.GetMessage(msg, this);
else return msg;
}
private void GetSendMSG(BasePlayer player, string message, string arg1 = "", string arg2 = "", string arg3 = "", string arg4 = "") {
string msg = string.Format(lang.GetMessage(message, this), arg1, arg2, arg3, arg4);
SendReply(player, TitleColor + lang.GetMessage("title", this, player.UserIDString) + "</color>" + MsgColor + msg + "</color>");
}
private string GetMSG(string message, string arg1 = "", string arg2 = "", string arg3 = "", string arg4 = "") {
string msg = string.Format(lang.GetMessage(message, this), arg1, arg2, arg3, arg4);
return msg;
}
public void DestroyMarketPanel(BasePlayer player) {
if (MenuState.Contains(player.userID)) MenuState.Remove(player.userID);
CuiHelper.DestroyUi(player, PanelMarket);
}
public void DestroyPurchaseScreen(BasePlayer player) {
CuiHelper.DestroyUi(player, PanelPurchase);
}
private void ToggleMarketScreen(BasePlayer player) {
if (MenuState.Contains(player.userID)) {
MenuState.Remove(player.userID);
DestroyMarketPanel(player);
DestroyPurchaseScreen(player);
return;
}
MenuState.Add(player.userID);
MarketMainScreen(player, 0, Category.All);
}
bool isAuth(BasePlayer player) {
if (player.net.connection != null) if (player.net.connection.authLevel < 1) return false;
return true;
}
#endregion
#region UI Creation
private string PanelMarket = "PanelMarket";
private string PanelPurchase = "PanelPurchase";
public class UI {
static public CuiElementContainer CreateElementContainer(string panel, string color, string aMin, string aMax, bool cursor = false) {
var NewElement = new CuiElementContainer() {
{
new CuiPanel {
Image = {
Color = color
}
, RectTransform = {
AnchorMin = aMin, AnchorMax = aMax
}
, CursorEnabled = cursor
}
, new CuiElement().Parent, panel
}
}
;
return NewElement;
}
static public void CreatePanel(ref CuiElementContainer element, string panel, string color, string aMin, string aMax, bool cursor = false) {
element.Add(new CuiPanel {
Image = {
Color = color
}
, RectTransform = {
AnchorMin = aMin, AnchorMax = aMax
}
, CursorEnabled = cursor
}
, panel);
}
static public void CreateLabel(ref CuiElementContainer element, string panel, string color, string text, int size, string aMin, string aMax, TextAnchor align = TextAnchor.MiddleCenter) {
element.Add(new CuiLabel {
Text = {
Color = color, FontSize = size, Align = align, FadeIn = 1.0f, Text = text
}
, RectTransform = {
AnchorMin = aMin, AnchorMax = aMax
}
}
, panel);
}
static public void CreateButton(ref CuiElementContainer element, string panel, string color, string text, int size, string aMin, string aMax, string command, TextAnchor align = TextAnchor.MiddleCenter) {
element.Add(new CuiButton {
Button = {
Color = color, Command = command, FadeIn = 1.0f
}
, RectTransform = {
AnchorMin = aMin, AnchorMax = aMax
}
, Text = {
Text = text, FontSize = size, Align = align
}
}
, panel);
}
static public void LoadImage(ref CuiElementContainer element, string panel, string png, string aMin, string aMax) {
element.Add(new CuiElement {
Parent = panel, Components = {
new CuiRawImageComponent {
Png = png
}
, new CuiRectTransformComponent {
AnchorMin = aMin, AnchorMax = aMax
}
}
}
);
}
static public void CreateTextOverlay(ref CuiElementContainer element, string panel, string text, string color, int size, string aMin, string aMax, TextAnchor align = TextAnchor.MiddleCenter, float fadein = 1.0f) {
//if (configdata.DisableUI_FadeIn)
// fadein = 0;
element.Add(new CuiLabel {
Text = {
Color = color, FontSize = size, Align = align, FadeIn = fadein, Text = text
}
, RectTransform = {
AnchorMin = aMin, AnchorMax = aMax
}
}
, panel);
}
}
private Dictionary<string, string> UIColors = new Dictionary<string, string> {
{
"black", "0 0 0 1.0"
}
, {
"dark", "0.1 0.1 0.1 0.98"
}
, {
"header", "1 1 1 0.3"
}
, {
"light", ".564.564.564 1.0"
}
, {
"grey1", "0.6 0.6 0.6 1.0"
}
, {
"brown", "0.3 0.16 0.0 1.0"
}
, {
"yellow", "0.9 0.9 0.0 1.0"
}
, {
"orange", "1.0 0.65 0.0 1.0"
}
, {
"limegreen", "0.42 1.0 0 1.0"
}
, {
"blue", "0.2 0.6 1.0 1.0"
}
, {
"red", "1.0 0.1 0.1 1.0"
}
, {
"white", "1 1 1 1"
}
, {
"green", "0.28 0.82 0.28 1.0"
}
, {
"grey", "0.85 0.85 0.85 1.0"
}
, {
"lightblue", "0.6 0.86 1.0 1.0"
}
, {
"buttonbg", "0.2 0.2 0.2 0.7"
}
, {
"buttongreen", "0.133 0.965 0.133 0.9"
}
, {
"buttonred", "0.964 0.133 0.133 0.9"
}
, {
"buttongrey", "0.8 0.8 0.8 0.9"
}
, {
"CSorange", "1.0 0.64 0.10 1.0"
}
}
;
private Dictionary<string, string> TextColors = new Dictionary<string, string> {
{
"limegreen", "<color=#6fff00>"
}
}
;
#endregion
#region UI Panels
void MarketMainScreen(BasePlayer player, int page = 0, Category cat = Category.All) {
CuiHelper.DestroyUi(player, PanelMarket);
string purchaseimage = imgData.SavedImages[Category.None]["MISSINGIMG"][0].ToString();
string priceitemimage = imgData.SavedImages[Category.None]["MISSINGIMG"][0].ToString();
string Background = imgData.SavedBackgrounds["NEVERDELETE"].ToString();
if (!mData.mode.ContainsKey(player.userID)) mData.mode.Add(player.userID, false);
var i = 0;
var c = 0;
bool seller = false;
double count = 0;
if (cat == Category.All) count = mData.MarketListings.Count();
else count = mData.MarketListings.Where(kvp => kvp.Value.cat == cat).Count();
var element = UI.CreateElementContainer(PanelMarket, "0 0 0 0", "0.2 0.15", "0.8 0.85", true);
UI.CreatePanel(ref element, PanelMarket, "0 0 0 0", "0 0", "1 1");
int entriesallowed = 9;
double remainingentries = count - (page * (entriesallowed - 1));
double totalpages = (Math.Floor(count / (entriesallowed - 1)));
if (mData.mode[player.userID] == false) {
if (mData.background.ContainsKey(player.userID)) if (imgData.SavedBackgrounds.ContainsKey(mData.background[player.userID])) if (imgData.SavedBackgrounds[mData.background[player.userID]].ToString() != mData.background[player.userID]) Background = imgData.SavedBackgrounds[mData.background[player.userID]].ToString();
UI.LoadImage(ref element, PanelMarket, Background, "0 0", "1 1");
if (page <= totalpages - 1) {
UI.LoadImage(ref element, PanelMarket, imgData.SavedImages[Category.None]["LAST"][0].ToString(), "0.8 0.02", "0.85 0.075");
UI.CreateButton(ref element, PanelMarket, "0 0 0 0", "", 18, "0.8 0.02", "0.85 0.075", $"UI_MarketMainScreen {totalpages} {Enum.GetName(typeof(Category), cat)}");
}
if (remainingentries > entriesallowed) {
UI.LoadImage(ref element, PanelMarket, imgData.SavedImages[Category.None]["NEXT"][0].ToString(), "0.74 0.02", "0.79 0.075");
UI.CreateButton(ref element, PanelMarket, "0 0 0 0", "", 18, "0.74 0.02", "0.79 0.075", $"UI_MarketMainScreen {page + 1} {Enum.GetName(typeof(Category), cat)}");
}
if (page > 0) {
UI.LoadImage(ref element, PanelMarket, imgData.SavedImages[Category.None]["BACK"][0].ToString(), "0.68 0.02", "0.73 0.075");
UI.CreateButton(ref element, PanelMarket, "0 0 0 0", "", 18, "0.68 0.02", "0.73 0.075", $"UI_MarketMainScreen {page - 1} {Enum.GetName(typeof(Category), cat)}");
}
if (page > 1) {
UI.LoadImage(ref element, PanelMarket, imgData.SavedImages[Category.None]["FIRST"][0].ToString(), "0.62 0.02", "0.67 0.075");
UI.CreateButton(ref element, PanelMarket, "0 0 0 0", "", 18, "0.62 0.02", "0.67 0.075", $"UI_MarketMainScreen {0} {Enum.GetName(typeof(Category), cat)}");
}
//UI.CreateLabel(ref element, PanelMarket, UIColors["dark"], GetLang("Filters"), 22, "0.14 0.08", "0.24 0.14");
foreach (Category ct in Enum.GetValues(typeof(Category))) {
var loc = FilterButton(c);
if (ct != Category.Extra && ct != Category.None) {
if (cat == ct) {
UI.LoadImage(ref element, PanelMarket, imgData.SavedImages[Category.None]["UFILTER"][0].ToString(), $"{loc[0]} {loc[1]}", $"{loc[2]} {loc[3]}");
UI.CreateLabel(ref element, PanelMarket, UIColors["dark"], Enum.GetName(typeof(Category), ct), 12, $"{loc[0]} {loc[1]}", $"{loc[2]} {loc[3]}", TextAnchor.MiddleCenter);
UI.CreateButton(ref element, PanelMarket, "0 0 0 0", "", 12, $"{loc[0]} {loc[1]}", $"{loc[2]} {loc[3]}", $"UI_MarketMainScreen {0} {Enum.GetName(typeof(Category), ct)}");
c++;
}
else {
UI.LoadImage(ref element, PanelMarket, imgData.SavedImages[Category.None]["OFILTER"][0].ToString(), $"{loc[0]} {loc[1]}", $"{loc[2]} {loc[3]}");
UI.CreateLabel(ref element, PanelMarket, UIColors["dark"], Enum.GetName(typeof(Category), ct), 12, $"{loc[0]} {loc[1]}", $"{loc[2]} {loc[3]}", TextAnchor.MiddleCenter);
UI.CreateButton(ref element, PanelMarket, "0 0 0 0", "", 12, $"{loc[0]} {loc[1]}", $"{loc[2]} {loc[3]}", $"UI_MarketMainScreen {0} {Enum.GetName(typeof(Category), ct)}");
c++;
}
}
}
UI.LoadImage(ref element, PanelMarket, imgData.SavedImages[Category.Building]["box.wooden.large"][0].ToString(), $"0.05 0.9", "0.15 1");
UI.CreateLabel(ref element, PanelMarket, UIColors["dark"], "", 12, $"0.05 0.9", "0.15 1", TextAnchor.MiddleCenter);
if (!SettingBox.Contains(player.userID)) UI.CreateButton(ref element, PanelMarket, "0 0 0 0", GetLang("TradeBoxAssignment"), 12, $"0.05 0.9", "0.15 1", $"UI_SetBoxMode");
else UI.CreateButton(ref element, PanelMarket, "0 0 0 0", GetLang("TradeBoxAssignment"), 12, $"0.05 0.9", "0.15 1", $"UI_CancelTradeBox");
UI.LoadImage(ref element, PanelMarket, imgData.SavedImages[Category.None]["SELL"][0].ToString(), $"0.35 0.9", "0.65 1.0");
UI.CreateLabel(ref element, PanelMarket, UIColors["dark"], GetLang("ListItem"), 12, $"0.35 0.9", "0.65 1.0", TextAnchor.MiddleCenter);
UI.CreateButton(ref element, PanelMarket, "0 0 0 0", "", 12, $"0.35 0.9", "0.65 1.0", $"UI_MarketSellScreen {0}");
if (mData.mode[player.userID] == false) {
UI.LoadImage(ref element, PanelMarket, imgData.SavedImages[Category.None]["OFILTER"][0].ToString(), "0.66 0.9", "0.75 1");
UI.CreateLabel(ref element, PanelMarket, UIColors["dark"], GetLang("ChangeMode"), 12, "0.66 0.9", "0.75 1", TextAnchor.MiddleCenter);
UI.CreateButton(ref element, PanelMarket, "0 0 0 0", "", 12, "0.66 0.9", "0.75 1", $"UI_Mode {1}");
}
else {
UI.LoadImage(ref element, PanelMarket, imgData.SavedImages[Category.None]["UFILTER"][0].ToString(), "0.66 0.9", "0.75 1");
UI.CreateLabel(ref element, PanelMarket, UIColors["dark"], GetLang("ChangeMode"), 12, "0.66 0.9", "0.75 1", TextAnchor.MiddleCenter);
UI.CreateButton(ref element, PanelMarket, "0 0 0 0", "", 12, "0.66 0.9", "0.75 1", $"UI_Mode {0}");
}
UI.LoadImage(ref element, PanelMarket, imgData.SavedImages[Category.None]["OFILTER"][0].ToString(), "0.76 0.9", "0.86 1");
UI.CreateLabel(ref element, PanelMarket, UIColors["dark"], GetLang("ChangeTheme"), 12, "0.76 0.9", "0.86 1", TextAnchor.MiddleCenter);
UI.CreateButton(ref element, PanelMarket, "0 0 0 0", "", 12, "0.76 0.9", "0.86 1", $"UI_MarketBackgroundMenu {0}");
if (isAuth(player)) {
UI.LoadImage(ref element, PanelMarket, imgData.SavedImages[Category.None]["UFILTER"][0].ToString(), "0.87 0.9", "0.97 1");
UI.CreateLabel(ref element, PanelMarket, UIColors["dark"], GetLang("AdminPanel"), 12, "0.87 0.9", "0.97 1", TextAnchor.MiddleCenter);
UI.CreateButton(ref element, PanelMarket, "0 0 0 0", "", 12, "0.87 0.9", "0.97 1", $"UI_AdminPanel");
}
int shownentries = page * entriesallowed;
int n = 0;
if (cat == Category.All) {
foreach (var item in mData.MarketListings) {
seller = false;
i++;
if (i < shownentries + 1) continue;
else if (i <= shownentries + entriesallowed) {
if (item.Value.cat != Category.None && item.Value.cat != Category.Extra) {
if (imgData.SavedImages[item.Value.cat].ContainsKey(item.Value.shortname)) {
if (imgData.SavedImages[item.Value.cat][item.Value.shortname].ContainsKey(item.Value.skin)) purchaseimage = imgData.SavedImages[item.Value.cat][item.Value.shortname][item.Value.skin].ToString();
else purchaseimage = imgData.SavedImages[item.Value.cat][item.Value.shortname][0].ToString();
}
}
if (item.Value.pricecat != Category.None && item.Value.pricecat != Category.Extra) {
if (imgData.SavedImages[item.Value.pricecat].ContainsKey(item.Value.priceItemshortname)) {
if (imgData.SavedImages[item.Value.pricecat][item.Value.priceItemshortname].ContainsKey(0)) priceitemimage = imgData.SavedImages[item.Value.pricecat][item.Value.priceItemshortname][0].ToString();
else priceitemimage = imgData.SavedImages[item.Value.pricecat][item.Value.priceItemshortname][0].ToString();
}
}
if (item.Value.seller == player.userID) {
seller = true;
}
CreateMarketListingButton(ref element, PanelMarket, item.Value, purchaseimage, priceitemimage, seller, n);
n++;
}
}
}
else foreach (var item in mData.MarketListings.Where(kvp => kvp.Value.cat == cat)) {
seller = false;
i++;
if (i < shownentries + 1) continue;
else if (i <= shownentries + entriesallowed) {
if (item.Value.cat != Category.None && item.Value.cat != Category.Extra) {
if (imgData.SavedImages[item.Value.cat].ContainsKey(item.Value.shortname)) {
if (imgData.SavedImages[item.Value.cat][item.Value.shortname].ContainsKey(item.Value.skin)) purchaseimage = imgData.SavedImages[item.Value.cat][item.Value.shortname][item.Value.skin].ToString();
else purchaseimage = imgData.SavedImages[item.Value.cat][item.Value.shortname][0].ToString();
}
}
if (item.Value.pricecat != Category.None && item.Value.pricecat != Category.Extra) {
if (imgData.SavedImages[item.Value.pricecat].ContainsKey(item.Value.priceItemshortname)) {
if (imgData.SavedImages[item.Value.pricecat][item.Value.priceItemshortname].ContainsKey(0)) priceitemimage = imgData.SavedImages[item.Value.pricecat][item.Value.priceItemshortname][0].ToString();
else priceitemimage = imgData.SavedImages[item.Value.pricecat][item.Value.priceItemshortname][0].ToString();
}
}
if (item.Value.seller == player.userID) {
seller = true;
}
CreateMarketListingButton(ref element, PanelMarket, item.Value, purchaseimage, priceitemimage, seller, n);
n++;
}
}
}
else if (mData.mode[player.userID] == true) {
UI.CreatePanel(ref element, PanelMarket, UIColors["dark"], "0.0", "1 1");
if (page <= totalpages - 1) {
UI.CreateButton(ref element, PanelMarket, UIColors["header"], GetLang("Last"), 18, "0.8 0.02", "0.85 0.075", $"UI_MarketMainScreen {totalpages} {Enum.GetName(typeof(Category), cat)}");
}
if (remainingentries > entriesallowed) {
UI.CreateButton(ref element, PanelMarket, UIColors["header"], GetLang("Next"), 18, "0.74 0.02", "0.79 0.075", $"UI_MarketMainScreen {page + 1} {Enum.GetName(typeof(Category), cat)}");
}
if (page > 0) {
UI.CreateButton(ref element, PanelMarket, UIColors["header"], GetLang("Back"), 18, "0.68 0.02", "0.73 0.075", $"UI_MarketMainScreen {page - 1} {Enum.GetName(typeof(Category), cat)}");
}
if (page > 1) {
UI.CreateButton(ref element, PanelMarket, UIColors["header"], GetLang("First"), 18, "0.62 0.02", "0.67 0.075", $"UI_MarketMainScreen {0} {Enum.GetName(typeof(Category), cat)}");
}
foreach (Category ct in Enum.GetValues(typeof(Category))) {
var loc = FilterButton(c);
if (ct != Category.Extra && ct != Category.None) {
if (cat == ct) {
UI.CreateButton(ref element, PanelMarket, UIColors["red"], Enum.GetName(typeof(Category), ct), 12, $"{loc[0]} {loc[1] +.02f}", $"{loc[2]} {loc[3] +.02f}", $"UI_MarketMainScreen {0} {Enum.GetName(typeof(Category), ct)}");
c++;
}
else {
UI.CreateButton(ref element, PanelMarket, UIColors["header"], Enum.GetName(typeof(Category), ct), 12, $"{loc[0]} {loc[1] +.02f}", $"{loc[2]} {loc[3] +.02f}", $"UI_MarketMainScreen {0} {Enum.GetName(typeof(Category), ct)}");
c++;
}
}
}
if (!SettingBox.Contains(player.userID)) UI.CreateButton(ref element, PanelMarket, UIColors["header"], GetLang("TradeBoxAssignment"), 12, $"0.05 0.92", "0.15.98", $"UI_SetBoxMode");
else UI.CreateButton(ref element, PanelMarket, UIColors["red"], GetLang("TradeBoxAssignment"), 12, $"0.05 0.92", "0.15.98", $"UI_CancelTradeBox");
UI.CreateButton(ref element, PanelMarket, UIColors["header"], GetLang("ListItem"), 12, $"0.35 0.92", "0.65.98", $"UI_MarketSellScreen {0}");
if (mData.mode[player.userID] == false) {
UI.CreateButton(ref element, PanelMarket, UIColors["header"], GetLang("ChangeMode"), 12, "0.66 0.92", "0.75.98", $"UI_Mode {1}");
}
else {
UI.CreateButton(ref element, PanelMarket, UIColors["header"], GetLang("ChangeMode"), 12, "0.66 0.92", "0.75.98", $"UI_Mode {0}");
}
UI.CreateButton(ref element, PanelMarket, UIColors["header"], GetLang("ChangeTheme"), 12, "0.76 0.92", "0.86.98", $"UI_MarketBackgroundMenu {0}");
if (isAuth(player)) {
UI.CreateButton(ref element, PanelMarket, UIColors["header"], GetLang("AdminPanel"), 12, "0.87 0.92", "0.97.98", $"UI_AdminPanel");
}
int shownentries = page * entriesallowed;
int n = 0;
if (cat == Category.All) {
foreach (var item in mData.MarketListings) {
seller = false;
i++;
if (i < shownentries + 1) continue;
else if (i <= shownentries + entriesallowed) {
if (item.Value.cat != Category.None && item.Value.cat != Category.Extra) {
if (imgData.SavedImages[item.Value.cat].ContainsKey(item.Value.shortname)) {
if (imgData.SavedImages[item.Value.cat][item.Value.shortname].ContainsKey(item.Value.skin)) purchaseimage = imgData.SavedImages[item.Value.cat][item.Value.shortname][item.Value.skin].ToString();
else purchaseimage = imgData.SavedImages[item.Value.cat][item.Value.shortname][0].ToString();
}
}
if (item.Value.pricecat != Category.None && item.Value.pricecat != Category.Extra) {
if (imgData.SavedImages[item.Value.pricecat].ContainsKey(item.Value.priceItemshortname)) {
if (imgData.SavedImages[item.Value.pricecat][item.Value.priceItemshortname].ContainsKey(0)) priceitemimage = imgData.SavedImages[item.Value.pricecat][item.Value.priceItemshortname][0].ToString();
else priceitemimage = imgData.SavedImages[item.Value.pricecat][item.Value.priceItemshortname][0].ToString();
}
}
if (item.Value.seller == player.userID) {
seller = true;
}
CreateMarketListingButtonSimple(ref element, PanelMarket, item.Value, purchaseimage, priceitemimage, seller, n);
n++;
}
}
}
else foreach (var item in mData.MarketListings.Where(kvp => kvp.Value.cat == cat)) {
seller = false;
i++;
if (i < shownentries + 1) continue;
else if (i <= shownentries + entriesallowed) {
if (item.Value.cat != Category.None && item.Value.cat != Category.Extra) {
if (imgData.SavedImages[item.Value.cat].ContainsKey(item.Value.shortname)) {
if (imgData.SavedImages[item.Value.cat][item.Value.shortname].ContainsKey(item.Value.skin)) purchaseimage = imgData.SavedImages[item.Value.cat][item.Value.shortname][item.Value.skin].ToString();
else purchaseimage = imgData.SavedImages[item.Value.cat][item.Value.shortname][0].ToString();
}
}
if (item.Value.pricecat != Category.None && item.Value.pricecat != Category.Extra) {
if (imgData.SavedImages[item.Value.pricecat].ContainsKey(item.Value.priceItemshortname)) {
if (imgData.SavedImages[item.Value.pricecat][item.Value.priceItemshortname].ContainsKey(0)) priceitemimage = imgData.SavedImages[item.Value.pricecat][item.Value.priceItemshortname][0].ToString();
else priceitemimage = imgData.SavedImages[item.Value.pricecat][item.Value.priceItemshortname][0].ToString();
}
}
if (item.Value.seller == player.userID) {
seller = true;
}
CreateMarketListingButtonSimple(ref element, PanelMarket, item.Value, purchaseimage, priceitemimage, seller, n);
n++;
}
}
}
UI.CreateButton(ref element, PanelMarket, UIColors["buttonred"], GetLang("Close"), 16, "0.87 0.02", "0.97 0.075", $"UI_DestroyMarketPanel");
CuiHelper.AddUi(player, element);
}
private void CreateMarketListingButton(ref CuiElementContainer container, string panelName, AMItem item, string listingimg, string costimg, bool seller, int num) {
var pos = MarketEntryPos(num);
var name = item.shortname;
if (configData.UseUniqueNames && item.name != "") name = item.name;
else if (item.shortname == "SR") name = "SR Points";
UI.CreatePanel(ref container, panelName, UIColors["header"], $"{pos[0]} {pos[1]}", $"{pos[2]} {pos[3]}");
//SALE ITEM
UI.LoadImage(ref container, panelName, listingimg, $"{pos[0] + 0.001f} {pos[3] - 0.125f}", $"{pos[0] + 0.1f} {pos[3] - 0.005f}");
UI.CreateLabel(
// ... [Code preview truncated due to length. Full source in attached file] ...