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

FREE AbsolutMarket : 1.3.0 1.3.0

Нет прав для скачивания
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] ...

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