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

FREE SimpleScrapShop : 1.2.5 1.2.5

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;

namespace Oxide.Plugins
{
    [Info("SimpleScrapShop", "djimbou", "1.2.5")]
    [Description("GUI-based scrap shop with categories and buttons.")]
    public class SimpleScrapShop : RustPlugin
    {
        [PluginReference] private Plugin ImageLibrary;

        private const int ScrapItemId = -932201673;
        private const string MainUI = "ShopUI.Main";
        private const string CategoryUI = "ShopUI.Category";

        private Dictionary<string, List<ShopItem>> shopCategories = new Dictionary<string, List<ShopItem>>
        {
            ["Weapons"] = new List<ShopItem>
            {
                new ShopItem("Assault Rifle", "rifle.ak", 5000),
                new ShopItem("Custom SMG", "smg.2", 3000),
                new ShopItem("Python Revolver", "pistol.python", 2000),
                new ShopItem("Bolt Action Rifle", "rifle.bolt", 4500)
            },
            ["Ammo"] = new List<ShopItem>
            {
                new ShopItem("5.56 Rifle Ammo", "ammo.rifle", 100, 20),
                new ShopItem("Pistol Bullet", "ammo.pistol", 80, 20),
                new ShopItem("12 Gauge Buckshot", "ammo.shotgun", 120, 10)
            },
            ["Food"] = new List<ShopItem>
            {
                new ShopItem("Can of Beans", "can.beans", 150),
                new ShopItem("Cooked Chicken", "chicken.cooked", 70),
                new ShopItem("Pumpkin", "pumpkin", 50)
            },
            ["Building"] = new List<ShopItem>
            {
                new ShopItem("Wood", "wood", 10, 100),
                new ShopItem("Stone", "stones", 20, 100),
                new ShopItem("Metal Fragments", "metal.fragments", 50, 50),
                new ShopItem("Sheet Metal Door", "door.hinged.metal", 1000)
            }
        };

        [ChatCommand("shop")]
        private void CmdShop(BasePlayer player, string command, string[] args)
        {
            OpenMainMenu(player);
        }

        private void OpenMainMenu(BasePlayer player)
        {
            DestroyUI(player);

            CuiElementContainer container = new CuiElementContainer();
            string panel = container.Add(new CuiPanel
            {
                Image = { Color = "0.1 0.1 0.1 0.95" },
                RectTransform = { AnchorMin = "0.3 0.2", AnchorMax = "0.7 0.8" },
                CursorEnabled = true
            }, "Overlay", MainUI);

            // Title
            container.Add(new CuiLabel
            {
                Text = { Text = "SCRAP SHOP", FontSize = 20, Align = TextAnchor.MiddleCenter },
                RectTransform = { AnchorMin = "0 0.85", AnchorMax = "1 0.95" }
            }, panel);

            // Categories
            float buttonHeight = 0.75f;
            foreach (var category in shopCategories.Keys)
            {
                container.Add(new CuiButton
                {
                    Button = { Color = "0.3 0.5 0.8 1", Command = $"cmd.showcategory {category}" },
                    RectTransform = { AnchorMin = $"0.1 {buttonHeight - 0.1}", AnchorMax = $"0.9 {buttonHeight}" },
                    Text = { Text = category, FontSize = 16, Align = TextAnchor.MiddleCenter }
                }, panel);
                buttonHeight -= 0.12f;
            }

            // Close button
            container.Add(new CuiButton
            {
                Button = { Color = "0.8 0.2 0.2 1", Command = "cmd.closeui", Close = MainUI },
                RectTransform = { AnchorMin = "0.3 0.05", AnchorMax = "0.7 0.1" },
                Text = { Text = "CLOSE", FontSize = 14, Align = TextAnchor.MiddleCenter }
            }, panel);

            CuiHelper.AddUi(player, container);
        }

        [ConsoleCommand("cmd.showcategory")]
        private void CmdShowCategory(ConsoleSystem.Arg arg)
        {
            var player = arg.Player();
            if (player == null || arg.Args == null || arg.Args.Length == 0) return;
            
            ShowCategoryUI(player, arg.Args[0]);
        }

        private void ShowCategoryUI(BasePlayer player, string category)
        {
            if (!shopCategories.ContainsKey(category)) return;

            DestroyUI(player);

            CuiElementContainer container = new CuiElementContainer();
            string panel = container.Add(new CuiPanel
            {
                Image = { Color = "0.1 0.1 0.1 0.95" },
                RectTransform = { AnchorMin = "0.2 0.1", AnchorMax = "0.8 0.9" },
                CursorEnabled = true
            }, "Overlay", CategoryUI);

            // Title
            container.Add(new CuiLabel
            {
                Text = { Text = category.ToUpper(), FontSize = 20, Align = TextAnchor.MiddleCenter },
                RectTransform = { AnchorMin = "0 0.9", AnchorMax = "1 0.95" }
            }, panel);

            // Items
            float itemPos = 0.8f;
            var items = shopCategories[category];
            
            for (int i = 0; i < items.Count; i++)
            {
                var item = items[i];
                string buttonText = $"{item.Name} - {item.Price} scrap";
                if (item.Amount > 1) buttonText += $" (x{item.Amount})";

                container.Add(new CuiButton
                {
                    Button = { Color = "0.2 0.6 0.2 1", Command = $"cmd.buy {category} {i}" },
                    RectTransform = { AnchorMin = $"0.1 {itemPos - 0.1}", AnchorMax = $"0.9 {itemPos}" },
                    Text = { Text = buttonText, FontSize = 14, Align = TextAnchor.MiddleLeft }
                }, panel);
                
                itemPos -= 0.12f;
            }

            // Back button
            container.Add(new CuiButton
            {
                Button = { Color = "0.3 0.5 0.8 1", Command = "cmd.shop" },
                RectTransform = { AnchorMin = "0.1 0.05", AnchorMax = "0.4 0.1" },
                Text = { Text = "BACK", FontSize = 14, Align = TextAnchor.MiddleCenter }
            }, panel);

            // Close button
            container.Add(new CuiButton
            {
                Button = { Color = "0.8 0.2 0.2 1", Command = "cmd.closeui", Close = CategoryUI },
                RectTransform = { AnchorMin = "0.6 0.05", AnchorMax = "0.9 0.1" },
                Text = { Text = "CLOSE", FontSize = 14, Align = TextAnchor.MiddleCenter }
            }, panel);

            CuiHelper.AddUi(player, container);
        }

        [ConsoleCommand("cmd.closeui")]
        private void CmdCloseUI(ConsoleSystem.Arg arg)
        {
            var player = arg.Player();
            if (player == null) return;
            DestroyUI(player);
        }

        [ConsoleCommand("cmd.shop")]
        private void CmdShopConsole(ConsoleSystem.Arg arg)
        {
            var player = arg.Player();
            if (player == null) return;
            OpenMainMenu(player);
        }

        [ConsoleCommand("cmd.buy")]
        private void CmdBuy(ConsoleSystem.Arg arg)
        {
            var player = arg.Player();
            if (player == null || arg.Args == null || arg.Args.Length < 2) return;
            
            string category = arg.Args[0];
            if (!int.TryParse(arg.Args[1], out int index) || !shopCategories.ContainsKey(category)) return;
            if (index < 0 || index >= shopCategories[category].Count) return;

            TryBuy(player, shopCategories[category][index]);
        }

        private void TryBuy(BasePlayer player, ShopItem item)
        {
            int scrapAmount = GetItemCount(player, ScrapItemId);
            if (scrapAmount < item.Price)
            {
                player.ChatMessage($"<color=red>You need {item.Price} scrap (you have {scrapAmount})</color>");
                return;
            }

            TakeItem(player, ScrapItemId, item.Price);
            player.GiveItem(ItemManager.CreateByName(item.ShortName, item.Amount));
            player.ChatMessage($"<color=green>Purchased {item.Name} x{item.Amount} for {item.Price} scrap!</color>");
        }

        private int GetItemCount(BasePlayer player, int itemId)
        {
            return player.inventory.containerMain.itemList.Concat(player.inventory.containerBelt.itemList).Concat(player.inventory.containerWear.itemList).Where(i => i.info.itemid == itemId).Sum(i => i.amount);
        }

        private void TakeItem(BasePlayer player, int itemId, int amount)
        {
            int remaining = amount;
            var items = player.inventory.containerMain.itemList.Concat(player.inventory.containerBelt.itemList).Concat(player.inventory.containerWear.itemList).Where(i => i.info.itemid == itemId);

            foreach (var item in items)
            {
                int toTake = Mathf.Min(item.amount, remaining);
                item.UseItem(toTake);
                remaining -= toTake;
                if (remaining <= 0) break;
            }
        }

        private void DestroyUI(BasePlayer player)
        {
            CuiHelper.DestroyUi(player, MainUI);
            CuiHelper.DestroyUi(player, CategoryUI);
        }

        private class ShopItem
        {
            public string Name;
            public string ShortName;
            public int Price;
            public int Amount;

            public ShopItem(string name, string shortName, int price, int amount = 1)
            {
                Name = name;
                ShortName = shortName;
                Price = price;
                Amount = amount;
            }
        }
    }
}

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