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

FREE AbsolutGifts : 1.5.2 1.5.2

Нет прав для скачивания
C#:
// Requires: ImageLibrary
using System.Collections.Generic;
using System;
using System.Linq;
using UnityEngine;
using Oxide.Core.Configuration;
using Oxide.Game.Rust.Cui;
using Oxide.Core;
using Oxide.Core.Plugins;
namespace Oxide.Plugins {
    [Info("Absolut Gifts", "Absolut", "1.5.2")]
    [Description("Daily gift reward system")]
    class AbsolutGifts : RustPlugin {
        [PluginReference]
        Plugin ImageLibrary, ServerRewards, Economics, AbsolutCombat;
        GiftData agdata;
        private DynamicConfigFile AGData;
        bool initialized;
        int GlobalTime = 0;
        string TitleColor = "<color=orange>";
        string MsgColor = "<color=#A9A9A9>";
        int max;
        private Dictionary<int, float[]> GiftPositions = new Dictionary<int, float[]>();
        private Dictionary<string, Timer> timers = new Dictionary<string, Timer>();
        private Dictionary<ulong, GiftCreation> giftprep = new Dictionary<ulong, GiftCreation>();
        private Dictionary<ulong, Vector3> AFK = new Dictionary<ulong, Vector3>();
        private Dictionary<ulong, Info> UIinfo = new Dictionary<ulong, Info>();
        class Info {
            public bool open;
            public int page;
            public bool admin;
            public ItemCategory cat = ItemCategory.All;
        }
#region Server Hooks
        void Loaded() {
            AGData = Interface.Oxide.DataFileSystem.GetFile("AbsolutGifts_Data");
            lang.RegisterMessages(messages, this);
        }
        void Unload() {
            foreach (var entry in timers) entry.Value.Destroy();
            timers.Clear();
            foreach (BasePlayer p in BasePlayer.activePlayerList) {
                DestroyPlayer(p);
            }
            if (initialized) SaveData();
        }
        void OnServerInitialized() {
            initialized = false;
            LoadVariables();
            LoadData();
            LoadImages();
            permission.RegisterPermission(this.Name + ".vip", this);
            permission.RegisterPermission(this.Name + ".admin", this);
            timers.Add("info", timer.Once(900, () => InfoLoop()));
            timers.Add("save", timer.Once(600, () => SaveLoop()));
            SaveData();
            SetGiftPositions();
            timer.Once(5, () => {
                foreach (BasePlayer p in BasePlayer.activePlayerList) OnPlayerConnected(p);
            }
            );
            timers.Add("time", timer.Once(60, () => ChangeGlobalTime()));
        }
        void LoadImages() {
            if (!ImageLibrary) return;
            if (timers.ContainsKey("imageloading")) {
                timers["imageloading"].Destroy();
                timers.Remove("imageloading");
            }
            if (!isReady()) {
                Puts(GetMSG("WaitingImageLibrary"));
                timers.Add("imageloading", timer.Once(60, () => LoadImages()));
                return;
            }
            ;
            if (string.IsNullOrEmpty(configData.GiftIconImage)) AddImage("http://i.imgur.com/zMe9ky5.png", "newgift", (ulong)ResourceId);
            else AddImage(configData.GiftIconImage, "newgift", (ulong)ResourceId);
            CreateLoadOrder();
            LoadAllItemImages();
            if (timers.ContainsKey("imageloading")) {
                timers["imageloading"].Destroy();
                timers.Remove("imageloading");
            }
        }
        private void LoadAllItemImages() {
            ImageLibrary.Call("LoadImageList", Title, ItemManager.itemList.Select(x => new KeyValuePair<string, ulong>(x.shortname, 0)).ToList());
        }
        private void CreateLoadOrder() {
            Dictionary<string, string> newLoadOrder = new Dictionary<string, string> {
                {
                    "sr", "http://oxidemod.org/data/resource_icons/1/1751.jpg?1456924271"
                }
                , {
                    "eco", "http://oxidemod.org/data/resource_icons/0/717.jpg?1465675504"
                }
                , {
                    "ac", "http://oxidemod.org/data/resource_icons/2/2103.jpg?1472590458"
                }
                ,
            }
            ;
            ImageLibrary.Call("ImportImageList", Title, newLoadOrder, (ulong)ResourceId, true);
        }
        private void OnPlayerDisconnected(BasePlayer player) {
            DestroyPlayer(player);
        }
        private void OnPlayerConnected(BasePlayer player) {
            if (player != null) {
                GetSendMSG(player, "AGInfo");
                InitializePlayer(player);
            }
        }
        private void OnPlayerRespawned(BasePlayer player) {
            NewGiftIcon(player);
        }
        private void InitializePlayer(BasePlayer player) {
            if (!UIinfo.ContainsKey(player.userID)) UIinfo.Add(player.userID, new Info {
                page = 0
            }
            );
            if (!agdata.Players.ContainsKey(player.userID)) {
                agdata.Players.Add(player.userID, new playerdata {
                    PlayerTime = 0, ReceivedGifts = new List<int>(), ResetTime = GrabCurrentTime() + (configData.ResetInDays * 86400)
                }
                );
            }
            else {
                //Puts($"CurrentTime: {GrabCurrentTime()}");
                if (GrabCurrentTime() >= agdata.Players[player.userID].ResetTime) {
                    //Puts("Time is Greater");
                    agdata.Players[player.userID].ReceivedGifts.Clear();
                    agdata.Players[player.userID].pendingGift.Clear();
                    agdata.Players[player.userID].PlayerTime = 0;
                    agdata.Players[player.userID].ResetTime = GrabCurrentTime() + (configData.ResetInDays * 86400);
                    if (UIinfo[player.userID].open) GiftPanel(player);
                    SaveData();
                }
            }
            double timeremaining = agdata.Players[player.userID].ResetTime - GrabCurrentTime();
            if (timers.ContainsKey(player.UserIDString)) {
                timers[player.UserIDString].Destroy();
                timers.Remove(player.UserIDString);
            }
            timers.Add(player.UserIDString, timer.Once((float)timeremaining, () => InitializePlayer(player)));
            NewGiftIcon(player);
        }
        private void DestroyPlayer(BasePlayer player) {
            if (!agdata.Players.ContainsKey(player.userID)) agdata.Players.Add(player.userID, new playerdata {
                PlayerTime = 0, ReceivedGifts = new List<int>()
            }
            );
            if (timers.ContainsKey(player.UserIDString)) {
                timers[player.UserIDString].Destroy();
                timers.Remove(player.UserIDString);
            }
            DestroyGiftPanel(player, true);
            CuiHelper.DestroyUi(player, PanelIcon);
            CuiHelper.DestroyUi(player, PanelOnScreen);
        }
        static double GrabCurrentTime() => DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds;
#endregion
#region Player Hooks
#endregion
#region Functions
        private string TryForImage(string shortname, ulong skin = 99) {
            if (!ImageLibrary) return "https://i.imgur.com/yxESUQJ.png";
            if (shortname.Contains("http") || shortname.Contains("www")) return shortname;
            if (skin == 99) skin = (ulong)ResourceId;
            return GetImage(shortname, skin, true);
        }
        public string GetImage(string shortname, ulong skin = 0, bool returnUrl = false) => (string)ImageLibrary.Call("GetImage", shortname.ToLower(), skin, returnUrl);
        public bool HasImage(string shortname, ulong skin = 0) => (bool)ImageLibrary.Call("HasImage", shortname.ToLower(), skin);
        public bool AddImage(string url, string shortname, ulong skin = 0) => (bool)ImageLibrary?.Call("AddImage", url, shortname.ToLower(), skin);
        public List<ulong> GetImageList(string shortname) => (List<ulong>)ImageLibrary.Call("GetImageList", shortname.ToLower());
        public bool isReady() => (bool)ImageLibrary?.Call("IsReady");
        private void CancelGiftCreation(BasePlayer player) {
            DestroyGiftPanel(player, false);
            if (giftprep.ContainsKey(player.userID)) giftprep.Remove(player.userID);
            GetSendMSG(player, "GiftCreationCanceled");
            UIinfo[player.userID].page = 0;
            Background(player);
        }
        public void DestroyGiftPanel(BasePlayer player, bool background) {
            if (UIinfo.ContainsKey(player.userID)) {
                UIinfo[player.userID].open = false;
                UIinfo[player.userID].page = 0;
            }
            if (background) CuiHelper.DestroyUi(player, PanelStatic);
            CuiHelper.DestroyUi(player, PanelGift);
            CuiHelper.DestroyUi(player, PanelTime);
            for (int i = 0; i < max; i++) CuiHelper.DestroyUi(player, "GiftEntry" + i);
        }
        void ChangeGlobalTime() {
            if (timers.ContainsKey("time")) {
                timers["time"].Destroy();
                timers.Remove("time");
            }
            GlobalTime++;
            timers.Add("time", timer.Once(60, () => ChangeGlobalTime()));
            CheckPlayers();
        }
        private void CheckPlayers() {
            foreach (BasePlayer player in BasePlayer.activePlayerList) if (agdata.Players.ContainsKey(player.userID)) {
                if (configData.NoAFK) if (CheckAFK(player)) continue;
                agdata.Players[player.userID].PlayerTime++;
                int giftIndex = 0;
                if (permission.UserHasPermission(player.UserIDString, this.Title + ".vip")) giftIndex = agdata.Gifts.Where(k => !agdata.Players[player.userID].ReceivedGifts.Contains(k.Key)).OrderBy(k => k.Key).Select(k => k.Key).FirstOrDefault();
                else giftIndex = agdata.Gifts.Where(k => !k.Value.vip && !agdata.Players[player.userID].ReceivedGifts.Contains(k.Key)).OrderBy(k => k.Key).Select(k => k.Key).FirstOrDefault();
                if (giftIndex != 0 && giftIndex <= agdata.Players[player.userID].PlayerTime) {
                    OnScreen(player, "CompletedNewGift", giftIndex.ToString());
                    ProcessGift(player, giftIndex);
                }
                if (UIinfo[player.userID].open) PlayerTimeCounter(player);
            }
            else InitializePlayer(player);
        }
        bool CheckAFK(BasePlayer player) {
            if (player == null) return false;
            if (!AFK.ContainsKey(player.userID)) {
                AFK.Add(player.userID, player.transform.position);
                //Puts("Not in Dictionary");
                return false;
            }
            else if (AFK[player.userID] == player.transform.position) {
                //Puts("Same Position - AFK");
                return true;
            }
            else if (AFK[player.userID] != player.transform.position) {
                AFK[player.userID] = player.transform.position;
                //Puts("New Position - Not AFK");
            }
            return false;
        }
        private void ProcessGift(BasePlayer player, int GiftIndex) {
            if (!agdata.Gifts.ContainsKey(GiftIndex)) return;
            var Gift = agdata.Gifts[GiftIndex];
            if (Gift.gifts.Where(k => !k.AC && !k.SR && !k.Eco).Count() == 0) foreach (var entry in Gift.gifts) {
                if (entry.SR) {
                    ServerRewards?.Call("AddPoints", player.userID.ToString(), entry.amount);
                    GetSendMSG(player, "NewGiftGiven", entry.amount.ToString(), "ServerRewards Points");
                }
                else if (entry.Eco) {
                    Economics.Call("DepositS", player.userID.ToString(), entry.amount);
                    GetSendMSG(player, "NewGiftGiven", entry.amount.ToString(), "Economics");
                }
                else if (entry.AC) {
                    AbsolutCombat.Call("AddMoney", player.userID.ToString(), entry.amount, false);
                    GetSendMSG(player, "NewGiftGiven", entry.amount.ToString(), "AbsolutCombat Money");
                }
            }
            else {
                agdata.Players[player.userID].pendingGift.Add(GiftIndex, Gift);
                NewGiftIcon(player);
            }
            agdata.Players[player.userID].ReceivedGifts.Add(GiftIndex);
        }
        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 void GetSendMSG(BasePlayer player, string message, string arg1 = "", string arg2 = "", string arg3 = "", string arg4 = "") {
            string msg = string.Format(lang.GetMessage(message, this, player.UserIDString), arg1, arg2, arg3, arg4);
            SendReply(player, TitleColor + lang.GetMessage("title", this, player.UserIDString) + "</color>" + MsgColor + msg + "</color>");
        }
        private string GetMSG(string message, BasePlayer player = null, string arg1 = "", string arg2 = "", string arg3 = "", string arg4 = "") {
            string p = null;
            if (player != null) p = player.UserIDString;
            if (messages.ContainsKey(message)) return string.Format(lang.GetMessage(message, this, p), arg1, arg2, arg3, arg4);
            else return message;
        }
        bool isAuth(BasePlayer player) {
            if (player.net.connection != null) if (player.net.connection.authLevel < 2 && !permission.UserHasPermission(player.UserIDString, this.Title + ".admin")) return false;
            return true;
        }
#endregion
#region UI Creation
        private string PanelStatic = "PanelStatic";
        private string PanelGift = "PanelGift";
        private string PanelIcon = "PanelIcon";
        private string PanelOnScreen = "PanelOnScreen";
        private string PanelTime = "PanelTime";
        public class UI {
            static public CuiElementContainer CreateOverlayContainer(string panelName, 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 = "Overlay", panelName
                    }
                }
                ;
                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 container, string panel, string img, string aMin, string aMax) {
                if (img.StartsWith("http") || img.StartsWith("www")) {
                    container.Add(new CuiElement {
                        Parent = panel, Components = {
                            new CuiRawImageComponent {
                                Url = img, Sprite = "assets/content/textures/generic/fulltransparent.tga"
                            }
                            , new CuiRectTransformComponent {
                                AnchorMin = aMin, AnchorMax = aMax
                            }
                        }
                    }
                    );
                }
                else container.Add(new CuiElement {
                    Parent = panel, Components = {
                        new CuiRawImageComponent {
                            Png = img, Sprite = "assets/content/textures/generic/fulltransparent.tga"
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = aMin, AnchorMax = aMax
                        }
                    }
                }
                );
            }
            static public void CreateTextOutline(ref CuiElementContainer element, string panel, string colorText, string colorOutline, string text, int size, string aMin, string aMax, TextAnchor align = TextAnchor.MiddleCenter) {
                element.Add(new CuiElement {
                    Parent = panel, Components = {
                        new CuiTextComponent {
                            Color = colorText, FontSize = size, Align = align, Text = text
                        }
                        , new CuiOutlineComponent {
                            Distance = "1 1", Color = colorOutline
                        }
                        , new CuiRectTransformComponent {
                            AnchorMax = aMax, AnchorMin = aMin
                        }
                    }
                }
                );
            }
            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_AG_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"
            }
            , {
                "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"
            }
            , {
                "orange", "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 Background(BasePlayer player) {
            CuiHelper.DestroyUi(player, PanelStatic);
            if (!UIinfo.ContainsKey(player.userID)) UIinfo.Add(player.userID, new Info {
                page = 0
            }
            );
            UIinfo[player.userID].open = true;
            var element = UI.CreateOverlayContainer(PanelStatic, "0 0 0 0", "0.2 0.15", "0.8 0.85", true);
            CuiHelper.AddUi(player, element);
            GiftPanel(player);
        }
        void PlayerTimeCounter(BasePlayer player) {
            CuiHelper.DestroyUi(player, PanelTime);
            if (!UIinfo.ContainsKey(player.userID)) UIinfo.Add(player.userID, new Info {
                page = 0
            }
            );
            var element = UI.CreateOverlayContainer(PanelTime, "0 0 0 0", "0.2 0.85", "0.8 0.95");
            UI.CreateTextOutline(ref element, PanelTime, UIColors["white"], UIColors["black"], GetMSG("AccumulatedTime", player, agdata.Players[player.userID].PlayerTime.ToString()), 30, $"0 0", $"1 1", TextAnchor.MiddleCenter);
            CuiHelper.AddUi(player, element);
        }
        void GiftPanel(BasePlayer player) {
            CuiHelper.DestroyUi(player, PanelGift);
            var element = UI.CreateOverlayContainer(PanelGift, "0.1 0.1 0.1 0.8", "0.2 0.15", "0.8 0.85");
            //UI.CreatePanel(ref element, PanelGift, UIColors["dark"], "0.0", "1 1");
            var i = 0;
            var page = UIinfo[player.userID].page;
            double count = agdata.Gifts.Count();
            //Puts(count.ToString());
            int entriesallowed = max;
            double remainingentries = count - (page * entriesallowed);
            double totalpages = (Math.Floor(count / entriesallowed));
            if (remainingentries > entriesallowed) {
                UI.CreateButton(ref element, PanelGift, UIColors["header"], GetMSG("Next", player), 16, "0.76 0.02", "0.86 0.075", $"UI_AG_GiftMenu {page + 1}");
            }
            if (page > 0) {
                UI.CreateButton(ref element, PanelGift, UIColors["header"], GetMSG("Back", player), 16, "0.65 0.02", "0.75 0.075", $"UI_AG_GiftMenu {page - 1}");
            }
            if (isAuth(player)) {
                UI.CreateButton(ref element, PanelGift, UIColors["header"], GetMSG("ToggleAdmin", player), 12, "0.03 0.02", "0.13 0.075", $"UI_AG_ToggleAdmin");
                if (UIinfo[player.userID].admin) UI.CreateButton(ref element, PanelGift, UIColors["orange"], GetMSG("CreateGift", player), 12, "0.16 0.02", "0.26 0.075", $"UI_AG_CreateGifts");
            }
            UI.CreateButton(ref element, PanelGift, UIColors["buttonred"], GetMSG("Close", player), 16, "0.87 0.02", "0.97 0.075", $"UI_AG_DestroyGiftPanel");
            CuiHelper.AddUi(player, element);
            int n = 0;
            int shownentries = page * entriesallowed;
            List<int> completed = new List<int>();
            if (agdata.Players.ContainsKey(player.userID)) foreach (var entry in agdata.Players[player.userID].ReceivedGifts) completed.Add(entry);
            foreach (var entry in agdata.Gifts.OrderBy(kvp => kvp.Key)) {
                i++;
                if (i < shownentries + 1) continue;
                if (i <= shownentries + entriesallowed) {
                    CreateGiftMenuEntry(player, entry.Key, n);
                    n++;
                }
                if (n >= entriesallowed) break;
            }
            PlayerTimeCounter(player);
        }
        private void CreateGifts(BasePlayer player, int step = 0) {
            var i = 0;
            CuiElementContainer element = UI.CreateOverlayContainer(PanelGift, "0.1 0.1 0.1 0.8", "0.3 0.3", "0.7 0.9");
            switch (step) {
                case 0 : CuiHelper.DestroyUi(player, PanelGift);
                if (giftprep.ContainsKey(player.userID)) giftprep.Remove(player.userID);
                giftprep.Add(player.userID, new GiftCreation());
                //UI.CreateLabel(ref element, PanelGift, UIColors["black"], $"{TextColors["limegreen"]} {GetMSG("SelectGiftTimer")}", 20, "0.05 0", ".95 1", TextAnchor.MiddleCenter);
                NumberPad(player, "UI_AG_SelectTime", "SelectTime");
                return;
                case 1 : CuiHelper.DestroyUi(player, PanelGift);
                element = UI.CreateOverlayContainer(PanelGift, "0.1 0.1 0.1 0.8", "0.4 0.3", "0.6 0.6");
                UI.CreateLabel(ref element, PanelGift, UIColors["limegreen"], GetMSG("VIPGift", player, giftprep[player.userID].time.ToString()), 20, "0.05.4", ".95.95");
                UI.CreateButton(ref element, PanelGift, UIColors["buttonbg"], GetMSG("Yes", player), 18, "0.2 0.05", "0.4 0.25", $"UI_AG_VIP true", TextAnchor.MiddleCenter);
                UI.CreateButton(ref element, PanelGift, UIColors["buttonred"], GetMSG("No", player), 18, "0.6 0.05", "0.8 0.25", $"UI_AG_VIP false");
                break;
                case 2 : CuiHelper.DestroyUi(player, PanelGift);
                var cat = UIinfo[player.userID].cat;
                float[] pos;
                UI.CreatePanel(ref element, PanelGift, "0 0 0 0", $".0001 0.0001", $"0.0002 0.0002");
                UI.CreateLabel(ref element, PanelGift, UIColors["limegreen"], GetMSG("SelectGift", player, giftprep[player.userID].time.ToString()), 20, "0.05.95", ".95 1", TextAnchor.MiddleCenter);
                foreach (var entry in Enum.GetValues(typeof(ItemCategory)).Cast<ItemCategory>().ToList().OrderBy(k=> k == ItemCategory.All).ThenBy(k=>k.ToString().First())) {
                    if (entry == ItemCategory.Search || entry == ItemCategory.Common) continue;
                    pos = FilterButton(i);
                    if(cat == entry) UI.CreateButton(ref element, PanelGift, UIColors["yellow"], entry.ToString(), 10, $"{pos[0]} {pos[1]}", $"{pos[2]} {pos[3]}", $"UI_AG_ChangeCat {entry.ToString()}");
                    else UI.CreateButton(ref element, PanelGift, UIColors["black"], entry.ToString(), 10, $"{pos[0]} {pos[1]}", $"{pos[2]} {pos[3]}", $"UI_AG_ChangeCat {entry.ToString()}");
                    i++;
                }
                var itemList = ItemManager.itemList.Where(k => cat != ItemCategory.All ? k.category == cat : k.category != ItemCategory.All).Select(k => k).ToList();
                double count = itemList.Count();
                var page = UIinfo[player.userID].page;
                double entriesallowed = 30;
                double remainingentries = count - (page * (entriesallowed));
                double totalpages = (Math.Floor(count / (entriesallowed))) - 1;
                {
                    if (remainingentries > entriesallowed) {
                        UI.CreateButton(ref element, PanelGift, UIColors["header"], GetMSG("Next", player), 16, "0.85 0.02", "0.95 0.075", $"UI_AG_CreateGifts {2} {page + 1}");
                    }
                    if (page > 0) {
                        UI.CreateButton(ref element, PanelGift, UIColors["header"], GetMSG("Back", player), 16, "0.74 0.02", "0.84 0.075", $"UI_AG_CreateGifts {2} {page - 1}");
                    }
                }
                i = 0;
                int n = 0;
                pos = CalcButtonPos(n);
                double shownentries = page * entriesallowed;
                if (page == 0 && (cat == ItemCategory.All || cat == ItemCategory.Search || cat == ItemCategory.Common)) {
                    if (ServerRewards) {
                        UI.LoadImage(ref element, PanelGift, TryForImage("SR"), $"{pos[0] + 0.005f} {pos[1] + 0.005f}", $"{pos[2] - 0.005f} {pos[3] - 0.005f}");
                        UI.CreateButton(ref element, PanelGift, "0 0 0 0", "", 12, $"{pos[0]} {pos[1]}", $"{pos[2]} {pos[3]}", $"UI_AG_SelectGift SR");
                        n++;
                        i++;
                    }
                    if (Economics) {
                        pos = CalcButtonPos(n);
                        UI.LoadImage(ref element, PanelGift, TryForImage("ECO"), $"{pos[0] + 0.005f} {pos[1] + 0.005f}", $"{pos[2] - 0.005f} {pos[3] - 0.005f}");
                        UI.CreateButton(ref element, PanelGift, "0 0 0 0", "", 12, $"{pos[0]} {pos[1]}", $"{pos[2]} {pos[3]}", $"UI_AG_SelectGift ECO");
                        n++;
                        i++;
                    }
                    if (AbsolutCombat) {
                        pos = CalcButtonPos(n);
                        UI.LoadImage(ref element, PanelGift, TryForImage("AC"), $"{pos[0] + 0.005f} {pos[1] + 0.005f}", $"{pos[2] - 0.005f} {pos[3] - 0.005f}");
                        UI.CreateButton(ref element, PanelGift, "0 0 0 0", "", 12, $"{pos[0]} {pos[1]}", $"{pos[2]} {pos[3]}", $"UI_AG_SelectGift AC");
                        n++;
                        i++;
                    }
                    //if (configData.UseGatherIncrease)
                    //{
                    //    pos = CalcButtonPos(n);
                    //    UI.LoadImage(ref element, PanelGift, TryForImage("GATHER"), $"{pos[0] + 0.005f} {pos[1] + 0.005f}", $"{pos[2] - 0.005f} {pos[3] - 0.005f}");
                    //    UI.CreateButton(ref element, PanelGift, "0 0 0 0", "", 12, $"{pos[0]} {pos[1]}", $"{pos[2]} {pos[3]}", $"UI_AG_SelectGift GATHER");
                    //    n++;
                    //    i++;
                    //}
                }
                foreach (var item in itemList.OrderBy(k=>k.displayName.english)) {
                    i++;
                    if (i < shownentries + 1) continue;
                    else if (i <= shownentries + entriesallowed) {
                        pos = CalcButtonPos(n);
                        UI.CreatePanel(ref element, PanelGift, UIColors["header"], $"{pos[0]} {pos[1]}", $"{pos[2]} {pos[3]}");
                        UI.LoadImage(ref element, PanelGift, TryForImage(item.shortname, 0), $"{pos[0] + 0.005f} {pos[1] + 0.005f}", $"{pos[2] - 0.005f} {pos[3] - 0.005f}");
                        //UI.CreateLabel(ref element, PanelGift, UIColors["limegreen"], item.shortname, 14, $"{pos[0]} {pos[1]}", $"{pos[2]} {pos[3]}", TextAnchor.MiddleCenter);
                        UI.CreateButton(ref element, PanelGift, "0 0 0 0", "", 12, $"{pos[0]} {pos[1]}", $"{pos[2]} {pos[3]}", $"UI_AG_SelectGift {item.itemid}");
                        n++;
                    }
                }
                UI.CreateButton(ref element, PanelGift, UIColors["buttonred"], GetMSG("Close", player), 16, "0.03 0.02", "0.13 0.075", $"UI_AG_DestroyGiftPanel");
                break;
                default : CuiHelper.DestroyUi(player, PanelGift);
                UI.CreatePanel(ref element, PanelGift, "0 0 0 0", $".0001 0.0001", $"0.0002 0.0002");
                UI.CreateLabel(ref element, PanelGift, UIColors["limegreen"], GetMSG("NewGiftInfo", player, giftprep[player.userID].time.ToString()), 20, "0.05.8", ".95.95");
                string GiftDetails = "";
                var alt = "";
                foreach (var entry in giftprep[player.userID].gifts) if (entry.ID != 0) GiftDetails += $"{GetMSG("GiftDetails", player, GetDisplayNameFromSN(entry.ID), entry.amount.ToString())}\n";
                else {
                    if (entry.AC) alt = "AbsolutCombat Money";
                    if (entry.Eco) alt = "Economics";
                    if (entry.SR) alt = "ServerRewards Points";
                    GiftDetails += $"{GetMSG("GiftDetails", player, alt, entry.amount.ToString())}\n";
                }
                UI.CreateLabel(ref element, PanelGift, UIColors["limegreen"], GiftDetails, 20, "0.1 0.16", "0.9 0.75", TextAnchor.MiddleLeft);
                UI.CreateButton(ref element, PanelGift, UIColors["buttonbg"], GetMSG("FinalizeGift", player), 18, "0.2 0.05", "0.4 0.15", $"UI_AG_FinalizeGift", TextAnchor.MiddleCenter);
                if (giftprep[player.userID].gifts.Count() < 9) UI.CreateButton(ref element, PanelGift, UIColors["buttonbg"], GetMSG("AddToGift", player), 18, "0.401 0.05", "0.599 0.15", $"UI_AG_CreateGifts {2} {0}", TextAnchor.MiddleCenter);
                UI.CreateButton(ref element, PanelGift, UIColors["buttonred"], GetMSG("Cancel", player), 18, "0.6 0.05", "0.8 0.15", $"UI_AG_CancelGiftCreation");
                break;
            }
            CuiHelper.AddUi(player, element);
        }
        string GetDisplayNameFromSN(int id) {
            ItemDefinition def = ItemManager.FindItemDefinition(id);
            if (def != null) return def.displayName.translated;
            else return id.ToString();
        }
        private void CreateGiftMenuEntry(BasePlayer player, int ID, int num) {
            var panelName = "GiftEntry" + num;
            CuiHelper.DestroyUi(player, "GiftEntry" + num);
            var pos = GiftPos(num);
            CuiElementContainer container = UI.CreateOverlayContainer(panelName, UIColors["header"], $"{pos[0]} {pos[1]}", $"{pos[2]} {pos[3]}");
            //UI.CreatePanel(ref container, panelName, UIColors["header"], $"{pos[0]} {pos[1]}", $"{pos[2]} {pos[3]}");
            if (agdata.Gifts[ID].vip) {
                if (configData.HideVIP && !permission.UserHasPermission(player.UserIDString, this.Title + ".vip")) return;
                UI.CreateLabel(ref container, panelName, UIColors["red"], "VIP", 30, $"0 0", $"1 1", TextAnchor.MiddleCenter);
            }
            var i = 0;
            float[] loc;
            foreach (var entry in agdata.Gifts[ID].gifts) {
                var item = ItemManager.CreateByItemID(entry.ID);
                {
                    loc = giftentrypos(i);
                    UI.CreatePanel(ref container, panelName, UIColors["buttonbg"], $"{loc[0]} {loc[1]}", $"{loc[2]} {loc[3]}");
                    if (item != null) UI.LoadImage(ref container, panelName, TryForImage(item.info.shortname, entry.Skin), $"{loc[0]} {loc[1]}", $"{loc[2]} {loc[3]}");
                    else if (entry.Eco) UI.LoadImage(ref container, panelName, TryForImage("ECO"), $"{loc[0]} {loc[1]}", $"{loc[2]} {loc[3]}");
                    else if (entry.SR) UI.LoadImage(ref container, panelName, TryForImage("SR"), $"{loc[0]} {loc[1]}", $"{loc[2]} {loc[3]}");
                    else if (entry.AC) UI.LoadImage(ref container, panelName, TryForImage("AC"), $"{loc[0]} {loc[1]}", $"{loc[2]} {loc[3]}");
                    UI.CreateLabel(ref container, panelName, UIColors["limegreen"], entry.amount.ToString(), configData.UITextSize, $"{loc[0]} {loc[1]}", $"{loc[2]} {loc[3]}", TextAnchor.LowerCenter);
                    i++;
                }
            }
            loc = giftentrypos(9);
            if (isAuth(player) && UIinfo[player.userID].admin) {
                UI.CreateTextOutline(ref container, panelName, UIColors["white"], UIColors["black"], GetMSG("GiftTitle", player, ID.ToString()), configData.UITextSize, "0 0", "1 1", TextAnchor.UpperCenter);
                UI.CreateButton(ref container, panelName, UIColors["buttonred"], GetMSG("Delete", player), (int)(configData.UITextSize *.8), $"{loc[0]} {loc[1]}", $"{loc[2]} {loc[3]}", $"UI_AG_RemoveGift {ID}");
            }
            else if (agdata.Players[player.userID].ReceivedGifts.Contains(ID)) {
                UI.CreateTextOutline(ref container, panelName, UIColors["green"], UIColors["black"], GetMSG("GiftTitleCompleted", player, ID.ToString()), configData.UITextSize, "0 0", "1 1", TextAnchor.UpperCenter);
                if (agdata.Players[player.userID].pendingGift.ContainsKey(ID)) UI.CreateButton(ref container, panelName, UIColors["green"], GetMSG("Redeem", player), (int)(configData.UITextSize *.8), $"{loc[0]} {loc[1]}", $"{loc[2]} {loc[3]}", $"UI_AG_RedeemGift {ID}");
            }
            else {
                UI.CreateTextOutline(ref container, panelName, UIColors["white"], UIColors["black"], GetMSG("GiftTitle", player, ID.ToString()), configData.UITextSize, "0 0", "1 1", TextAnchor.UpperCenter);
            }
            CuiHelper.AddUi(player, container);
        }
        void NewGiftIcon(BasePlayer player) {
            CuiHelper.DestroyUi(player, PanelIcon);
            if (!agdata.Players.ContainsKey(player.userID) || agdata.Players[player.userID].pendingGift.Count() < 1) return;
            var element = UI.CreateOverlayContainer(PanelIcon, "0 0 0 0", $"{configData.minx} {configData.miny}", $"{configData.maxx} {configData.maxy}");
            UI.LoadImage(ref element, PanelIcon, TryForImage("NewGift"), "0 0", "1 1");
            UI.CreateButton(ref element, PanelIcon, "0 0 0 0", "", 12, "0 0", "1 1", "UI_AG_GiftMenu");
            CuiHelper.AddUi(player, element);
        }
        private void NumberPad(BasePlayer player, string cmd, string title) {
            CuiHelper.DestroyUi(player, PanelGift);
            var element = UI.CreateOverlayContainer(PanelGift, UIColors["dark"], "0.35 0.3", "0.65 0.7");
            UI.CreatePanel(ref element, PanelGift, UIColors["light"], "0.01 0.02", "0.99 0.98");
            UI.CreateLabel(ref element, PanelGift, UIColors["limegreen"], GetMSG(title, player), 16, "0.1 0.85", "0.9.98", TextAnchor.UpperCenter);
            var n = 1;
            var i = 0;
            if (title == "SelectTime") {
                while (n < 20) {
                    CreateNumberPadButton(ref element, PanelGift, i, n, cmd);
                    i++;
                    n++;
                }
                while (n >= 20 && n < 60) {
                    CreateNumberPadButton(ref element, PanelGift, i, n, cmd);
                    i++;
                    n += 5;
                }
                while (n >= 60 && n < 240) {
                    CreateNumberPadButton(ref element, PanelGift, i, n, cmd);
                    i++;
                    n += 30;
                }
                while (n >= 240 && n <= 1470) {
                    CreateNumberPadButton(ref element, PanelGift, i, n, cmd);
                    i++;
                    n += 60;
                }
            }
            else if (title == "SelectAmount") {
                while (n < 10) {
                    CreateNumberPadButton(ref element, PanelGift, i, n, cmd);
                    i++;
                    n++;
                }
                while (n >= 10 && n < 25) {
                    CreateNumberPadButton(ref element, PanelGift, i, n, cmd);
                    i++;
                    n += 5;
                }
                while (n >= 25 && n < 200) {
                    CreateNumberPadButton(ref element, PanelGift, i, n, cmd);
                    i++;
                    n += 25;
                }
                while (n >= 200 && n <= 950) {
                    CreateNumberPadButton(ref element, PanelGift, i, n, cmd);
                    i++;
                    n += 50;
                }
                while (n >= 1000 && n <= 10000) {
                    CreateNumberPadButton(ref element, PanelGift, i, n, cmd);
                    i++;
                    n += 500;
                }
            }
            UI.CreateButton(ref element, PanelGift, UIColors["buttonred"], GetMSG("Quit", player), 10, "0.03 0.02", "0.13 0.075", $"UI_AG_CancelGiftCreation");
            CuiHelper.AddUi(player, element);
        }
        void OnScreen(BasePlayer player, string msg, string arg1 = "", string arg2 = "", string arg3 = "") {
            if (timers.ContainsKey("Onscreen_"+player.userID.ToString())) {
                timers["Onscreen_" + player.userID.ToString()].Destroy();
                timers.Remove("Onscreen_" + player.userID.ToString());
            }
            CuiHelper.DestroyUi(player, PanelOnScreen);
            var element = UI.CreateOverlayContainer(PanelOnScreen, "0.0 0.0 0.0 0.0", "0.15 0.8", "0.85.9");
            UI.CreateTextOutline(ref element, PanelOnScreen, UIColors["white"], UIColors["black"], GetMSG(msg, player, arg1, arg2, arg3), 24, "0.0 0.0", "1.0 1.0");
            CuiHelper.AddUi(player, element);
            timers.Add("Onscreen_" + player.userID.ToString(), timer.Once(4, () => CuiHelper.DestroyUi(player, PanelOnScreen)));
        }
#endregion
#region UI Calculations
        void SetGiftPositions() {
            GiftPositions.Clear();
            int rows = 2;
            int columns = 2;
            if (max > 4) {
                if (max <= 6) columns = 3;
                else if (max <= 8) columns = 4;
                else if (max <= 10) columns = 5;
                else if (max <= 12) columns = 6;
            }
            //int rows = configData.GiftsPerPanel > 8 4;
            //if (max % rows > 0)
            //{
            //    if (max % 3 == 0) rows = 3;
            //    else if (max % 2 == 0) rows = 2;
            //    else max++;
            //}
            //Puts($"Number: {number}");
            //Puts($"Max: {max}");
            //int columns = max / rows;
            //Puts($"Columns: {columns} - Rows {rows}");
            //"0.2 0.15", "0.8 0.85"
            Vector2 position = new Vector2(0.205f, .848f);
            Vector2 dimensions = new Vector2();
            dimensions.x = (.6f - (.005f * rows)) / rows;
            dimensions.y = (.6f - (.01f * columns)) / columns;
            position.y =.848f - dimensions.y;
            float gap = (.6f - (dimensions.x * rows)) / (rows+1);
            position.x =.2f + gap;
            //position.x = (float)(1 - ((dimensions.x +.005f) * root));
            int testValue = 0;
            for (int i = 0; i < max; i++) {
                float offsetY = 0;
                float offsetX = 0;
                if (i%columns != 0) {
                    testValue = i;
                    // Puts($"Index: {i}: TestValue {testValue}");
                    while (testValue - columns > 0) {
                        testValue -= columns;
                        //  Puts($">>Index: {i}: TestValue {testValue}");
                    }
                    offsetY = (-0.01f - dimensions.y) * testValue;
                }
                offsetX = (dimensions.x + gap) * (i < columns ? 0 : (int)Math.Floor((double)i / columns));
                Vector2 offset = new Vector2(offsetX, offsetY);
                Vector2 posMin = position + offset;
                Vector2 posMax = posMin + dimensions;
                GiftPositions.Add(i, new float[] {
                    posMin.x, posMin.y, posMax.x, posMax.y
                }
                );
            }
            //foreach (var entry in GiftPositions)
            //    Puts($"{entry.Key}: MinX{entry.Value[0]}, MaxX{entry.Value[2]}, MinY{entry.Value[1]}, MaxY{entry.Value[3]}");
        }
        private float[] GiftPos(int number) {
            return GiftPositions[number];
        }
        //private float[] GiftPos(int number)
        //{
        //    Vector2 position = new Vector2(0.03f, 0.525f);
        //    Vector2 dimensions = new Vector2(0.46f, 0.425f);
        //    float offsetY = 0;
        //    float offsetX = 0;
        //    if (number >= 0 && number < 2)
        //    {
        //        offsetY = (-0.01f - dimensions.y) * number;
        //    }
        //    if (number > 1 && number < 4)
        //    {
        //        offsetX = dimensions.x + 0.005f;
        //        offsetY = (-0.01f - dimensions.y) * (number - 2);
        //    }
        //    Vector2 offset = new Vector2(offsetX, offsetY);
        //    Vector2 posMin = position + offset;
        //    Vector2 posMax = posMin + dimensions;
        //    return new float[] { posMin.x, posMin.y, posMax.x, posMax.y };
        //}
        private float[] FilterButton(int number) {
            Vector2 position = new Vector2(0.01f, 1.01f);
            Vector2 dimensions = new Vector2(0.1f, 0.04f);
            float offsetY = 0;
            float offsetX = 0;
            if (number >= 0 && number < 10) {
                offsetX = (0.01f + dimensions.x) * number;
            }
            if (number >= 10 && number < 20) {
                offsetX = (0.01f + dimensions.x) * (number - 10);
                offsetY = (-0.005f - dimensions.y) * 1;
            }
            Vector2 offset = new Vector2(offsetX, offsetY);
            Vector2 posMin = position + offset;
            Vector2 posMax = posMin + dimensions;
            return new float[] {
                posMin.x, posMin.y, posMax.x, posMax.y
            }
            ;
        }
        private float[] BackgroundButton(int number) {
            Vector2 position = new Vector2(0.3f, 0.97f);
            Vector2 dimensions = new Vector2(0.035f, 0.03f);
            float offsetY = 0;
            float offsetX = 0;
            offsetX = (0.005f + dimensions.x) * number;
            Vector2 offset = new Vector2(offsetX, offsetY);
            Vector2 posMin = position + offset;
            Vector2 posMax = posMin + dimensions;
            return new float[] {
                posMin.x, posMin.y, posMax.x, posMax.y
            }
            ;
        }
        private float[] giftentrypos(int number) {
            Vector2 position = new Vector2(0.005f, 0.42f);
            Vector2 dimensions = new Vector2(0.19f, 0.35f);
            if (max > 4) {
                if (max <= 6) dimensions.x = 0.15f;
                else if (max <= 8) {
                    dimensions.x = 0.12f;
                    dimensions.y =.38f;
                }
                else if (max <= 10) dimensions.x = 0.1f;
                else if (max <= 12) dimensions.x = 0.08f;
            }
            float gap = (1 - (dimensions.x *5)) / 6;
            position.x = gap;
            float offsetY = 0;
            float offsetX = 0;
            if (number >= 0 && number < 5) {
                offsetX = (gap + dimensions.x) * number;
            }
            if (number > 4 && number < 10) {
                offsetX = (gap + dimensions.x) * (number - 5);
                offsetY = (-0.03f - dimensions.y) * 1;
            }
            Vector2 offset = new Vector2(offsetX, offsetY);
            Vector2 posMin = position + offset;
            Vector2 posMax = posMin + dimensions;
  
// ... [Code preview truncated due to length. Full source in attached file] ...

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

Другие ресурсы пользователя 15FPS

Сверху