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

FREE Exchanger : 1.0.0 1.0.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
//Requires: ImageLibrary

using System;
using System.Collections.Generic;
using Oxide.Core;
using Oxide.Core.Configuration;
using Oxide.Game.Rust.Cui;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("Exchanger", "Sami37", "1.0.0"), Description("Exchange your bills for scrap.")]
    class Exchanger : RustPlugin
    {
        #region References

        [PluginReference] ImageLibrary ImageLibrary;

        #endregion

        private string perm = "Exchanger.admin";
        private string ShopOverlayName = "ExchangerOverlay";
        private const string BackgroundImage = "ExchangerBackground";

        private ExchangerData _exData;

        private DynamicConfigFile data;

        private void SaveData()
        {
            data.WriteObject(_exData);
        }

        private class ExchangerData
        {
            public List<Info> ShopList = new List<Info>();
        }

        private class Info
        {
            public string ShopName;
            public List<ulong> NPCList = new List<ulong>();
            public List<ShopInfo> shops = new List<ShopInfo>();
        }

        private class ShopInfo
        {
            public string MoneyItemShortname;
            public int MoneyItemAmount;
            public string ItemShortname;
            public int ItemAmount;
        }

        private void LoadData()
        {
            data = Interface.Oxide.DataFileSystem.GetFile(Name);

            try
            {
                _exData = data.ReadObject<ExchangerData>();
            }
            catch
            {
                _exData = new ExchangerData();
            }
        }

        private void LoadImages()
        {
            Dictionary<string, string> imageList = new Dictionary<string, string>
            {
                {BackgroundImage, "http://screenup.cleanmeca.be/uploads/1635084187.jpg"}
            };

            LoadOrder(Title, imageList, 0, true);
        }

        private void LoadOrder(string title, Dictionary<string, string> importImageList, ulong skin, bool force) => ImageLibrary?.ImportImageList(title, importImageList, skin, force);

        void GuiDestroy(BasePlayer player)
        {
            CuiHelper.DestroyUi(player, ShopOverlayName);
        }

        private string GetImage(string name) => ImageLibrary.GetImage(name);

        #region Oxide Hooks
        private void OnServerInitialized()
        {
            permission.RegisterPermission(perm, this);
            LoadData();
            LoadImages();
        }

        protected override void LoadDefaultMessages()
        {
            lang.RegisterMessages(_messages, this);
        }

        void Unload()
        {
            foreach (var player in BasePlayer.activePlayerList)
            {
                GuiDestroy(player);
            }
        }

        private void OnUseNPC(BasePlayer npc, BasePlayer player)
        {
            if (player == null) return;

            var datas = _exData.ShopList.FindAll(x => x.NPCList.Contains(npc.userID));
            int i = 0;
            if (datas.Count != 0)
            {
                CuiElementContainer container = new CuiElementContainer();

                container.Add(new CuiPanel
                {
                    Image =
                    {
                        Color = "0 0 0 0"
                    },
                    RectTransform = { AnchorMin = "0.3 0.3", AnchorMax = "0.7 0.7" },
                    CursorEnabled = true
                },
                "Overlay", ShopOverlayName);

                container.Add(new CuiElement
                {
                    Name = CuiHelper.GetGuid(),
                    Parent = ShopOverlayName,
                    Components =
                    {
                        new CuiRawImageComponent
                        {
                            Png = GetImage(BackgroundImage),
                            Color = "1 1 1 1"
                        },
                        new CuiRectTransformComponent
                        {
                            AnchorMin = "0 0",
                            AnchorMax = "1 1"
                        }
                    }
                });

                foreach (var itemData in datas)
                {
                    container.Add(new CuiLabel
                    {
                        Text =
                        {
                            Text = itemData.ShopName,
                            FontSize = 20,
                            Align = TextAnchor.MiddleCenter
                        },
                        RectTransform =
                        {
                            AnchorMin = "0.05 0.85",
                            AnchorMax = "0.95 0.95"
                        }
                    }, ShopOverlayName);

                    foreach (var items in itemData.shops)
                    {
                        var pos = 0.75 - 0.75 * (i * 0.25);
                        var pos2 = 0.85 - 0.75 * (i * 0.25);

                        var money = ItemManager.CreateByPartialName(items.MoneyItemShortname, items.MoneyItemAmount);
                        var getItem = ItemManager.CreateByPartialName(items.ItemShortname, items.ItemAmount);

                        container.Add(new CuiLabel
                        {
                            Text =
                            {
                                Text = $"{getItem.amount} x {getItem.name ?? getItem.info.displayName.translated} each {money.amount} x {money.name ?? money.info.displayName.translated}",
                                FontSize = 16,
                                Align = TextAnchor.MiddleLeft
                            },
                            RectTransform =
                            {
                                AnchorMin = $"0.05 {pos}",
                                AnchorMax = $"0.75 {pos2}"
                            }
                        }, ShopOverlayName);

                        container.Add(new CuiButton
                        {
                            Text =
                            {
                                Text = "Exchange",
                                FontSize = 16,
                                Align = TextAnchor.MiddleCenter
                            },
                            Button =
                            {
                                Color = "0 1 0 0.4",
                                Command = $"ex {items.ItemShortname}-{items.ItemAmount} {items.MoneyItemShortname}-{items.MoneyItemAmount}"
                            },
                            RectTransform =
                            {
                                AnchorMin = $"0.75 {pos}",
                                AnchorMax = $"0.95 {pos2}"
                            }
                        }, ShopOverlayName);

                        i++;
                    }
                }

                container.Add(
                    new CuiButton
                    {
                        Button =
                        {
                            Command = "ExchangerDestroy",
                            Close = ShopOverlayName,
                            Color = "0.8 0.8 0.8 0.2"
                        },
                        RectTransform =
                        {
                            AnchorMin = "0.86 0.92",
                            AnchorMax = "0.97 0.98"
                        },
                        Text =
                        {
                            Text = "X",
                            FontSize = 16,
                            Align = TextAnchor.MiddleCenter
                        }
                    }, ShopOverlayName);

                CuiHelper.AddUi(player, container);
            }
        }
        #endregion

        #region Messaging
        private string Message(string key, string ID = null) => lang.GetMessage(key, this, ID);

        private readonly Dictionary<string, string> _messages = new Dictionary<string, string>
        {
            {"NoPerm", "You don't have permission to do that."},
            {"Created", "Sample data file created."},
            {"Dropped", "You don't have enough space in your inventory, just dropped to your feets." },
            {"Inventory", "Just added the reward to your inventory."},
            {"CantProcess", "Not enough money, can't afford."}
        };
        #endregion

        #region Command

        [ConsoleCommand("cmdDestroyUI")]
        void cmdDestroyUI(ConsoleSystem.Arg arg)
        {
            if (arg.Player() == null) return;
            GuiDestroy(arg.Player());
        }

        [ConsoleCommand("ex")]
        private void cmdConsoleCommand(ConsoleSystem.Arg args)
        {
            var player = args.Player();

            if (player != null)
            {
                var getItemData = args.Args[0].Split('-');
                var moneyItemData = args.Args[1].Split('-');

                if (getItemData.Length == 2 && moneyItemData.Length == 2)
                {
                    var getitem = ItemManager.CreateByPartialName(getItemData[0], Convert.ToInt32(getItemData[1]));
                    var moneyitem = ItemManager.CreateByPartialName(moneyItemData[0], Convert.ToInt32(moneyItemData[1]));

                    if (player.inventory.FindItemID(moneyitem.info.itemid)?.amount >= moneyitem.amount)
                    {
                        player.inventory.Take(null, moneyitem.info.itemid, moneyitem.amount);
                        
                        if (!getitem.MoveToContainer(player.inventory.containerMain))
                        {
                            getitem.Drop(player.eyes.position, player.eyes.BodyForward() * 2f);
                            SendReply(player, Message("Dropped", player.UserIDString));
                        }
                        else
                        {
                            SendReply(player, Message("Inventory", player.UserIDString));
                        }
                    }
                    else
                    {
                        SendReply(player, Message("CantProcess", player.UserIDString));
                    }
                }

            }
        }

        [ChatCommand("ex")]
        private void cmdChatShopAdd(BasePlayer player, string command, string[] args)
        {
            if (!permission.UserHasPermission(player.UserIDString, perm))
            {
                SendReply(player, Message("NoPerm", player.UserIDString));
                return;
            }
            SendReply(player, Message("Created", player.UserIDString));

            _exData = new ExchangerData();
            _exData.ShopList.Add(new Info
                {
                    ShopName = "Sample",
                    NPCList = new List<ulong>
                    {
                        103863,
                        297318
                    },
                    shops = new List<ShopInfo>
                    {
                        new ShopInfo
                        {
                            MoneyItemShortname = "paper",
                            ItemShortname = "scrap",
                            MoneyItemAmount = 10,
                            ItemAmount = 2
                        },
                        new ShopInfo
                        {
                            MoneyItemShortname = "hq.metal.ore",
                            ItemShortname = "scrap",
                            MoneyItemAmount = 3,
                            ItemAmount = 1
                        },
                        new ShopInfo
                        {
                            MoneyItemShortname = "metal.refined",
                            ItemShortname = "scrap",
                            MoneyItemAmount = 1,
                            ItemAmount = 2
                        }
                    }
            });
            SaveData();
        }

        #endregion
    }
}

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