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

FREE MagicCards : 5.5.5 5.5.5

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using UnityEngine;
using System;
using Oxide.Game.Rust.Cui;
using System.Collections.Generic;
using Oxide.Core;
using Oxide.Core.Plugins;
using Newtonsoft.Json.Linq;
namespace Oxide.Plugins {
    [Info("MagicCards", "SHooTeR/Magic Rust/F5", "5.5.5")]
    [Description("Magic cards")]
    class MagicCards : RustPlugin {
        [PluginReference]
        Plugin ImageLibrary;
        public string GetImage(string shortname, ulong skin = 0) => (string)ImageLibrary.Call("GetImage", shortname, skin);
        public bool AddImage(string url, string shortname, ulong skin = 0) => (bool)ImageLibrary?.Call("AddImage", url, shortname, skin);
#region Config
        public int shopid = 0;
        public string secretkey = "secretkey";
        public string BackCard = "";
        public float CardsTimer = 21600f;
        public int MaxCards = 3;
        protected override void LoadDefaultConfig() {
            GetConfig("[MagicCards]", "ShopID Gamestores", ref shopid);
            GetConfig("[MagicCards]", "SecretKey Gamestores", ref secretkey);
            GetConfig("[MagicCards]", "Рубашка карты (Картинка)", ref BackCard);
            GetConfig("[MagicCards]", "Выдавать карту всем игрокам (оффлайн и онлайн) каждые N сек", ref CardsTimer);
            GetConfig("[MagicCards]", "Максимальное количество накапливаемых карты", ref MaxCards);
            SaveConfig();
        }
        private void GetConfig<T>(string menu, string Key, ref T var) {
            if (Config[menu, Key] != null) {
                var = (T)Convert.ChangeType(Config[menu, Key], typeof(T));
            }
            Config[menu, Key] = var;
        }
#endregion
#region Cards Class
        public List<Card> Cards = new List<Card>();
        public class Card {
            public int CardID {
                get;
                set;
            }
            public string ImageUrl {
                get;
                set;
            }
            public string ImageName {
                get;
                set;
            }
            public string DispayName {
                get;
                set;
            }
            public string DisplayDescription {
                get;
                set;
            }
            public int CardType {
                get;
                set;
            }
            public int Money {
                get;
                set;
            }
            public int CardsForUse {
                get;
                set;
            }
            public Dictionary<string, int> Items {
                get;
                set;
            }
            public List<string> GrantCommands {
                get;
                set;
            }
        }
        public List<PlayerCard> PlayerCards = new List<PlayerCard>();
        public class PlayerCard {
            public Dictionary<int, int> Cards {
                get;
                set;
            }
            public ulong SteamID {
                get;
                set;
            }
            public int CardsCount {
                get;
                set;
            }
        }
        public List<ulong> OpenCardNow = new List<ulong>();
#endregion
#region UI
        [ChatCommand("cards")]
        void ChatCards(BasePlayer player, string cmd, string[] args) {
            CardsUI(player);
        }
        [ConsoleCommand("cardsclose")]
        void CmdCardsClose(ConsoleSystem.Arg arg) {
            BasePlayer player = arg.Player();
            if (player == null) return;
            CuiHelper.DestroyUi(player, "MagicCards");
            CuiHelper.DestroyUi(player, "MagicMyCards");
        }
        [ConsoleCommand("cards")]
        void CmdCards(ConsoleSystem.Arg arg) {
            if (arg.HasArgs()) {
                if (!arg.IsServerside) return;
                switch(arg.Args[0]) {
                    case "add" : {
                        Card card = new Card {
                            CardID = Convert.ToInt32(arg.Args[1]), DispayName = "Имя карты", DisplayDescription = "Описание карты", CardsForUse = 1, Items = new Dictionary<string, int> {
                                {
                                    "rifle.ak", 1
                                }
                            }
                            , GrantCommands = new List<string> {
                                "addgroup {0} vip 1d"
                            }
                            , Money = 10, ImageUrl = "ImageFilepath", ImageName = "ImageName", CardType = 0
                        }
                        ;
                        Cards.Add(card);
                        PrintWarning("Карта добавлена, выгрузите плагин и отредактируйте ее в файле /data/MagicCards/Cards");
                        Interface.Oxide.DataFileSystem.WriteObject("MagicCards/Cards", Cards);
                        break;
                    }
                    case "remove" : {
                        Card card = Cards.Find(x => x.CardID == Convert.ToInt32(arg.Args[1]));
                        if(card != null) {
                            Cards.Remove(card);
                            PrintWarning($"Карта c CardID: {arg.Args[1]} удалена");
                            foreach(var pcard in PlayerCards) {
                                pcard.Cards.Remove(card.CardID);
                            }
                        }
                        break;
                    }
                }
            }
            else {
                BasePlayer player = arg.Player();
                if (player == null) return;
                CardsUI(player);
            }
        }
        void CardsUI(BasePlayer player) {
            CuiElementContainer Container = new CuiElementContainer();
            CuiHelper.DestroyUi(player, "MagicCards");
            CuiHelper.DestroyUi(player, "MagicCardsHelp");
            CuiHelper.DestroyUi(player, "MagicMyCards");
            if(Cards.Count == 0) {
                SendReply(player, "Не создано не одной MAGIC карты");
                return;
            }
            PlayerCard PCard = PlayerCards.Find(z => z.SteamID == player.userID);
            CreatePanel(Container, "MagicCards", "Hud", "0 0 0 0.5", "0.175 0.125", "0.825 0.975");
            CreateTitle(Container, "MagicCardsTitle", "MagicCards", "<size=70>Магическая колода карт</size>\n<size=22>Испытай свою удачу! Открывай карты каждый день и получай призы!</size>", TextAnchor.UpperCenter, "0 0.6", "1 0.975", "0 0 0 1", "1 -1", true);
            CreateTitle(Container, "MagicCardsCountTitle", "MagicCards", $"<size=22>Доступно карт для открытия: {PCard.CardsCount}</size>", TextAnchor.MiddleCenter, "0 0.085", "1 0.135", "0 0 0 1", "1 -1", true);
            Container.Add(new CuiElement {
                Name = "MagicCardsCursor", Parent = "MagicCards", Components = {
                    new CuiNeedsCursorComponent()
                }
            }
            );
            List<int> CardID = new List<int>();
            int RandomCardID = 0;
            foreach(var card in Cards) {
                CardID.Add(card.CardID);
            }
            int[] CardsID = {
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0
            }
            ;
            for (int i = 0, x = 0, y = 0; i < 10; i++, x++) {
                int Random = UnityEngine.Random.Range(0, CardID.Count);
                RandomCardID = CardID[Random];
                Card card = Cards.Find(v => v.CardID == RandomCardID);
                CreateImage(Container, $"MagicCard{i}", "MagicCards", GetImage("BackCard"), null, "1 1 1 1", $"{0.1 + (x * 0.16)} {0.475 - (y * 0.325)}", $"{0.25 + (x * 0.16)} {0.775 - (y * 0.325)}", 0.1f);
                CreateButton(Container, $"MagicCard{i}Btn", $"MagicCard{i}", "0 0 0 0", $"cardsopen {card.CardID} {i}", "0 0", "1 1", "");
                CardsID[i] = card.CardID;
                if (x == 4) {
                    x = -1;
                    y++;
                }
            }
            CreateButton(Container, "MagicCardBtnCards", "MagicCards", "0.00 0.75 1.00 1.00", "mycards", "0.135 0.02", "0.265 0.07", "ВАШИ КАРТЫ");
            CreateButton(Container, "MagicCardBtnOpenAll", "MagicCards", "0.3 1.00 0.00 1.00", $"cardsopen {CardsID[0]} {CardsID[1]} {CardsID[2]} {CardsID[3]} {CardsID[4]} {CardsID[5]} {CardsID[6]} {CardsID[7]} {CardsID[8]} {CardsID[9]}", "0.285 0.02", "0.415 0.07", "ВСКРЫТЬ КАРТЫ");
            CreateButton(Container, "MagicCardBtnRefresh", "MagicCards", "1.00 1.00 0.00 1.00", "cards", "0.435 0.02", "0.565 0.07", "ПЕРЕРАЗДАТЬ");
            CreateButton(Container, "MagicCardBtnHelp", "MagicCards", "1.00 0.00 0.00 1.00", "cardhelp 1", "0.585 0.02", "0.715 0.07", "ПОМОЩЬ");
            CreateButton(Container, "MagicCardBtnClose", "MagicCards", "1.00 0.00 1.00 1.00", "cardsclose", "0.735 0.02", "0.865 0.07", "ЗАКРЫТЬ");
            CuiHelper.AddUi(player, Container);
        }
        [ConsoleCommand("cardsopen")]
        void CardOpen(ConsoleSystem.Arg arg) {
            if (!arg.HasArgs()) return;
            if (arg.Args.Length == 10) {
                CuiElementContainer Container = new CuiElementContainer();
                for (int i = 0; i < 10; i++) {
                    Card card = Cards.Find(z => z.CardID == Convert.ToInt32(arg.Args[i]));
                    CreateImage(Container, $"MagicCard{i}Image", $"MagicCard{i}", GetImage(card.ImageName), null, "1 1 1 1", "0 0", "1 1", 0.5f);
                }
                CuiHelper.AddUi(arg.Player(), Container);
            }
            else {
                if (OpenCardNow.Contains(arg.Player().userID)) {
                    SendReply(arg.Player(), $"Нельзя открывать карты так часто");
                    return;
                }
                else {
                    OpenCardNow.Add(arg.Player().userID);
                    timer.Once(1f, () => {
                        OpenCardNow.Remove(arg.Player().userID);
                    }
                    );
                }
                PlayerCard PCard = PlayerCards.Find(x => x.SteamID == arg.Player().userID);
                if (PCard.CardsCount == 0) return;
                Card card = Cards.Find(z => z.CardID == Convert.ToInt32(arg.Args[0]));
                int i = Convert.ToInt32(arg.Args[1]);
                if (PCard.Cards.ContainsKey(card.CardID)) {
                    PCard.Cards[card.CardID]++;
                }
                else {
                    PCard.Cards.Add(card.CardID, 1);
                }
                PCard.CardsCount--;
                CuiHelper.DestroyUi(arg.Player(), "MagicCardsCountTitle");
                CuiHelper.DestroyUi(arg.Player(), $"MagicCard{i}Btn");
                CuiElementContainer Container = new CuiElementContainer();
                CreateTitle(Container, "MagicCardsCountTitle", "MagicCards", $"<size=22>Доступно карт для открытия: {PCard.CardsCount}</size>", TextAnchor.MiddleCenter, "0 0.085", "1 0.135", "0 0 0 1", "1 -1", true);
                CreateImage(Container, $"MagicCard{i}Image", $"MagicCard{i}", GetImage(card.ImageName), null, "1 1 1 1", "0 0", "1 1", 0.5f);
                CuiHelper.AddUi(arg.Player(), Container);
            }
        }
        [ConsoleCommand("mycards")]
        void CmdMyCards(ConsoleSystem.Arg arg) {
            if (arg.Player() == null) return;
            CuiHelper.DestroyUi(arg.Player(), "MagicCards");
            CuiHelper.DestroyUi(arg.Player(), "MagicMyCards");
            CuiElementContainer Container = new CuiElementContainer();
            PlayerCard PCard = PlayerCards.Find(z => z.SteamID == arg.Player().userID);
            CreatePanel(Container, "MagicMyCards", "Hud", "0 0 0 0.5", "0.175 0.125", "0.825 0.975");
            CreateTitle(Container, "MagicMyCardsTitle", "MagicMyCards", "<size=70>Ваши собранные карты</size>", TextAnchor.UpperCenter, "0 0.8", "1 0.975", "0 0 0 1", "1 -1", true);
            Container.Add(new CuiElement {
                Name = "MagicMyCardsCursor", Parent = "MagicMyCards", Components = {
                    new CuiNeedsCursorComponent()
                }
            }
            );
            int CardsSkip = 0;
            int Arg = 0;
            double d = Cards.Count / 39;
            int MaxArg = Convert.ToInt32(Math.Floor(d));
            if (arg.HasArgs()) {
                Arg = int.Parse(arg.Args[0]);
            }
            CardsSkip = Arg * 39;
            int i = 0, x = 0, y = 0, v = 0;
            foreach (var cards in PCard.Cards) {
                if(i < CardsSkip) {
                    i++;
                    continue;
                }
                if (v > 38) continue;
                Card card = Cards.Find(z => z.CardID == cards.Key);
                if(cards.Value >= card.CardsForUse) CreateImage(Container, $"MagicMyCard{i}", "MagicMyCards", GetImage(card.ImageName), null, "1 1 1 1", $"{0.01 + (x * 0.076)} {0.675 - (y * 0.165)}", $"{0.076 + (x * 0.076)} {0.825 - (y * 0.165)}", 0.1f);
                else CreateImage(Container, $"MagicMyCard{i}", "MagicMyCards", GetImage(card.ImageName), null, "1 1 1 0.5", $"{0.01 + (x * 0.076)} {0.675 - (y * 0.165)}", $"{0.076 + (x * 0.076)} {0.825 - (y * 0.165)}", 0.1f);
                CreateButton(Container, $"MagicMyCard{i}Btn", $"MagicMyCard{i}", "0 0 0 0", $"cardinfo {card.CardID}", "0 0", "1 1", "");
                if (x == 12) {
                    x = -1;
                    y++;
                }
                if (i == CardsSkip) rust.RunClientCommand(arg.Player(), $"cardinfo {card.CardID}");
                i++;
                x++;
                v++;
            }
            if(Arg > 0) {
                CreateButton(Container, "MagicMyCardsBack", "MagicMyCards", "0.00 0.75 1.00 1.00", $"mycards {Arg - 1}", "0.47 0.3", "0.495 0.33", "<");
            }
            if(Arg < MaxArg) {
                CreateButton(Container, "MagicMyCardsNext", "MagicMyCards", "0.00 0.75 1.00 1.00", $"mycards {Arg + 1}", "0.505 0.3", "0.53 0.33", ">");
            }
            CuiHelper.AddUi(arg.Player(), Container);
        }
        [ConsoleCommand("cardinfo")]
        void CmdMyCard(ConsoleSystem.Arg arg) {
            if (!arg.HasArgs()) return;
            if (arg.Player() == null) return;
            PlayerCard Pcard = PlayerCards.Find(x => x.SteamID == arg.Player().userID);
            int CardsCount = Pcard.Cards[Convert.ToInt32(arg.Args[0])];
            Card card = Cards.Find(x => x.CardID == Convert.ToInt32(arg.Args[0]));
            CuiHelper.DestroyUi(arg.Player(), "MyCardInfo");
            CuiElementContainer Container = new CuiElementContainer();
            CreatePanel(Container, "MyCardInfo", "MagicMyCards", "1 1 1 0", "0 0", "1 0.3");
            CreateImage(Container, $"MyCardInfoImg", "MyCardInfo", GetImage(card.ImageName), null, "1 1 1 1", $"0.15 0.1", $"0.275 0.9", 0.1f);
            CreateTitle(Container, $"MyCardInfoTitle", "MyCardInfo", $"<size=24>{card.DispayName}</size>", TextAnchor.UpperLeft, "0.3 0.75", "0.85 0.9", "0 0 0 1", "1 -1", true);
            CreateTitle(Container, $"MyCardInfoTitleDesc", "MyCardInfo", $"<size=16>{card.DisplayDescription}</size>", TextAnchor.UpperLeft, "0.3 0.35", "0.85 0.75", "0 0 0 1", "1 -1", true);
            CreateTitle(Container, $"MyCardInfoTitle", "MyCardInfo", $"<size=16>Собрано: {CardsCount}/{card.CardsForUse}</size>", TextAnchor.UpperLeft, "0.3 0.1", "0.85 0.2", "0 0 0 1", "1 -1", true);
            if(CardsCount >= card.CardsForUse) {
                CreateButton(Container, "MyCardGet", "MyCardInfo", "0.00 0.75 1.00 1.00", $"cardget {card.CardID}", "0.625 0.1", "0.725 0.3", "ПОЛУЧИТЬ");
            }
            CreateButton(Container, "MyCardClose", "MyCardInfo", "1.00 0.00 1.00 1.00", "cardsclose", "0.75 0.1", "0.85 0.3", "ЗАКРЫТЬ");
            CuiHelper.AddUi(arg.Player(), Container);
        }
        [ConsoleCommand("cardget")]
        void CmdCardGet(ConsoleSystem.Arg arg) {
            if (!arg.HasArgs()) return;
            if (arg.Player() == null) return;
            Card card = Cards.Find(x => x.CardID == Convert.ToInt32(arg.Args[0]));
            PlayerCard Pcard = PlayerCards.Find(z => z.SteamID == arg.Player().userID);
            int CardCount = Pcard.Cards[Convert.ToInt32(arg.Args[0])];
            if (CardCount < card.CardsForUse) return;
            Pcard.Cards[Convert.ToInt32(arg.Args[0])] = CardCount - card.CardsForUse;
            switch (card.CardType) {
                case 0 : {
                    foreach(var carditem in card.Items) {
                        Item item = ItemManager.CreateByName(carditem.Key, carditem.Value);
                        arg.Player().GiveItem(item);
                    }
                    break;
                }
                case 1 : {
                    foreach (var cardcommand in card.GrantCommands) {
                        rust.RunServerCommand(String.Format(cardcommand, arg.Player().userID));
                    }
                    break;
                }
                case 2 : {
                    webrequest.EnqueueGet($"https://gamestores.ru/api?shop_id={shopid}&secret={secretkey}&action=moneys&type=plus&steam_id={arg.Player().userID}&amount={card.Money}&mess=MagicCards: Карта пополнения на {card.Money} рублей", (i, s) => {
                        if(i != 200) {
                            LogToFile("MagicCardsGM", $"{arg.Player().userID} ОШИБКА GAMESTORES НЕ ОТВЕЧАЕТ Сумма:{card.Money}", this);
                        }
                        else {
                            JObject jObject = JObject.Parse(s);
                            if(jObject["result"].ToString() == "fail") {
                                LogToFile("MagicCardsGM", $"{arg.Player().userID} FAIL Сумма: {card.Money}, Ошибка: {jObject["message"].ToString()}", this);
                            }
                            else {
                                LogToFile("MagicCardsGM", $"{arg.Player().userID} пополнен счет на {card.Money} рублей", this);
                            }
                        }
                    }
                    , this);
                    break;
                }
            }
            if(CardCount - card.CardsForUse < card.CardsForUse) rust.RunClientCommand(arg.Player(), $"mycards");
            else rust.RunClientCommand(arg.Player(), $"cardinfo {card.CardID}");
        }
        [ConsoleCommand("cardhelp")]
        void CardHelp(ConsoleSystem.Arg arg) {
            if (!arg.HasArgs()) return;
            if (arg.Player() == null) return;
            CuiHelper.DestroyUi(arg.Player(), "MagicCardsHelp");
            CuiHelper.DestroyUi(arg.Player(), "MagicCards");
            CuiElementContainer Container = new CuiElementContainer();
            switch (arg.Args[0]) {
                case "1" : {
                    CreatePanel(Container, "MagicCardsHelp", "Overlay", "0 0 0 0.5", "0.175 0.125", "0.825 0.975");
                    CreateTitle(Container, "MagicCardsHelpTitle", "MagicCardsHelp", "<size=70>Магическая колода карт</size>\n<size=22>Испытай свою удачу! Открывай карты каждый день и получай призы!</size>", TextAnchor.UpperCenter, "0 0.6", "1 0.975", "0 0 0 1", "1 -1", true);
                    Container.Add(new CuiElement {
                        Name = "MagicHelpCursor", Parent = "MagicCardsHelp", Components = {
                            new CuiNeedsCursorComponent()
                        }
                    }
                    );
                    List<int> CardID = new List<int>();
                    int RandomCardID = 0;
                    foreach (var card in Cards) {
                        CardID.Add(card.CardID);
                    }
                    int[] CardsID = {
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                    }
                    ;
                    for (int i = 0, x = 0, y = 0; i < 10; i++, x++) {
                        int Random = UnityEngine.Random.Range(0, CardID.Count);
                        RandomCardID = CardID[Random];
                        Card card = Cards.Find(v => v.CardID == RandomCardID);
                        CreateImage(Container, $"MagicCardsHelp{i}", "MagicCardsHelp", GetImage("BackCard"), null, "1 1 1 1", $"{0.1 + (x * 0.16)} {0.475 - (y * 0.325)}", $"{0.25 + (x * 0.16)} {0.775 - (y * 0.325)}", 0.1f);
                        CardsID[i] = card.CardID;
                        if (x == 4) {
                            x = -1;
                            y++;
                        }
                    }
                    CreatePanel(Container, "MagicCardsHelpFon", "MagicCardsHelp", "0 0 0 0.99", "0 0.775", "1 1");
                    CreatePanel(Container, "MagicCardsHelpFon2", "MagicCardsHelp", "0 0 0 0.99", "0 0", "1 0.15");
                    CreateTitle(Container, "MagicCardsHelpCountTitle", "MagicCardsHelp", $"<size=16>Это карты, которые вы можете открыть.Просто нажмите на любую и через секунду она будет открыта.</size>", TextAnchor.MiddleCenter, "0 0.085", "1 0.135", "0 0 0 1", "1 -1", true);
                    CreateButton(Container, "MagiccardsAccept", "MagicCardsHelp", "1 0 0 1", "cardhelp 2", "0.45 -0.05", "0.55 0", "Понятно");
                    CuiHelper.AddUi(arg.Player(), Container);
                    break;
                }
                case "2" : {
                    CreatePanel(Container, "MagicCardsHelp", "Overlay", "0 0 0 0.5", "0.175 0.125", "0.825 0.975");
                    CreateTitle(Container, "MagicCardsHelpTitle", "MagicCardsHelp", "<size=70>Магическая колода карт</size>\n<size=22>Испытай свою удачу! Открывай карты каждый день и получай призы!</size>", TextAnchor.UpperCenter, "0 0.6", "1 0.975", "0 0 0 1", "1 -1", true);
                    CreateTitle(Container, "MagicCardsCountTitle", "MagicCardsHelp", $"<size=22>Доступно карт для открытия: 3</size>", TextAnchor.MiddleCenter, "0 0.085", "1 0.135", "0 0 0 1", "1 -1", true);
                    Container.Add(new CuiElement {
                        Name = "MagicHelpCursor", Parent = "MagicCardsHelp", Components = {
                            new CuiNeedsCursorComponent()
                        }
                    }
                    );
                    CreatePanel(Container, "MagicCardsHelpFon", "MagicCardsHelp", "0 0 0 0.99", "0 0.135", "1 1");
                    CreatePanel(Container, "MagicCardsHelpFon2", "MagicCardsHelp", "0 0 0 0.99", "0 0", "1 0.085");
                    CreateTitle(Container, "MagicCardsHelpCountTitle", "MagicCardsHelp", $"<size=16>Тут показано количество карт, которое вы можете открыть.По одной карте дается всем каждые 6 часов</size>", TextAnchor.MiddleCenter, "0 0.0", "1 0.1", "0 0 0 1", "1 -1", true);
                    CreateButton(Container, "MagiccardsAccept", "MagicCardsHelp", "1 0 0 1", "cardhelp 3", "0.45 -0.05", "0.55 0", "Понятно");
                    CuiHelper.AddUi(arg.Player(), Container);
                    break;
                }
                case "3" : {
                    CreatePanel(Container, "MagicCardsHelp", "Overlay", "0 0 0 0.5", "0.175 0.125", "0.825 0.975");
                    CreateTitle(Container, "MagicCardsHelpTitle", "MagicCardsHelp", "<size=70>Магическая колода карт</size>\n<size=22>Испытай свою удачу! Открывай карты каждый день и получай призы!</size>", TextAnchor.UpperCenter, "0 0.6", "1 0.975", "0 0 0 1", "1 -1", true);
                    Container.Add(new CuiElement {
                        Name = "MagicHelpCursor", Parent = "MagicCardsHelp", Components = {
                            new CuiNeedsCursorComponent()
                        }
                    }
                    );
                    CreatePanel(Container, "MagicCardsHelpFon", "MagicCardsHelp", "0 0 0 0.99", "0 0", "1 1");
                    CreateButton(Container, "MagicCardsHelpBtnRefresh", "MagicCardsHelp", "1.00 1.00 0.00 1.00", "", "0.435 0.02", "0.565 0.07", "ПЕРЕРАЗДАТЬ");
                    CreateTitle(Container, "MagicCardsHelpCountTitle", "MagicCardsHelp", $"<size=16>Если вдруг у вас есть дар предсказывать будущее и вы знаете, что под разложенными картами окажется какая-то хрень, можете перераздать карты.\nСделать это можно в любой момент, даже когда вы уже открыли одну или две карты.\nПри перераздаче вы не потеряете уже открытые карты, а счетчик карт не будет сброшен в исходное состояние</size>", TextAnchor.MiddleCenter, "0 0.4", "1 0.6", "0 0 0 1", "1 -1", true);
                    CreateButton(Container, "MagiccardsAccept", "MagicCardsHelp", "1 0 0 1", "cardhelp 4", "0.45 -0.05", "0.55 0", "Понятно");
                    CuiHelper.AddUi(arg.Player(), Container);
                    break;
                }
                case "4" : {
                    CreatePanel(Container, "MagicCardsHelp", "Overlay", "0 0 0 0.5", "0.175 0.125", "0.825 0.975");
                    CreateTitle(Container, "MagicCardsHelpTitle", "MagicCardsHelp", "<size=70>Магическая колода карт</size>\n<size=22>Испытай свою удачу! Открывай карты каждый день и получай призы!</size>", TextAnchor.UpperCenter, "0 0.6", "1 0.975", "0 0 0 1", "1 -1", true);
                    Container.Add(new CuiElement {
                        Name = "MagicHelpCursor", Parent = "MagicCardsHelp", Components = {
                            new CuiNeedsCursorComponent()
                        }
                    }
                    );
                    CreatePanel(Container, "MagicCardsHelpFon", "MagicCardsHelp", "0 0 0 0.99", "0 0", "1 1");
                    CreateButton(Container, "MagicCardsHelpBtnOpenAll", "MagicCardsHelp", "0.3 1.00 0.00 1.00", $"", "0.285 0.02", "0.415 0.07", "ВСКРЫТЬ КАРТЫ");
                    CreateTitle(Container, "MagicCardsHelpCountTitle", "MagicCardsHelp", $"<size=16>Если вам интересно, что же осталось под закрытыми картами, нажмите эту кнопку и все карты будут открыты.Все закрытые карты, вскрытые таким способом, не будут вам засчитаны.Этим способом вы просто смотрите карты</size>", TextAnchor.MiddleCenter, "0 0.4", "1 0.6", "0 0 0 1", "1 -1", true);
                    CreateButton(Container, "MagiccardsAccept", "MagicCardsHelp", "1 0 0 1", "cardhelp 5", "0.45 -0.05", "0.55 0", "Понятно");
                    CuiHelper.AddUi(arg.Player(), Container);
                    break;
                }
                case "5" : {
                    CreatePanel(Container, "MagicCardsHelp", "Overlay", "0 0 0 0.5", "0.175 0.125", "0.825 0.975");
                    CreateTitle(Container, "MagicCardsHelpTitle", "MagicCardsHelp", "<size=70>Магическая колода карт</size>\n<size=22>Испытай свою удачу! Открывай карты каждый день и получай призы!</size>", TextAnchor.UpperCenter, "0 0.6", "1 0.975", "0 0 0 1", "1 -1", true);
                    Container.Add(new CuiElement {
                        Name = "MagicHelpCursor", Parent = "MagicCardsHelp", Components = {
                            new CuiNeedsCursorComponent()
                        }
                    }
                    );
                    CreatePanel(Container, "MagicCardsHelpFon", "MagicCardsHelp", "0 0 0 0.99", "0 0", "1 1");
                    CreateButton(Container, "MagicCardsHelpBtnCards", "MagicCardsHelp", "0.00 0.75 1.00 1.00", "cardhelp 6", "0.135 0.02", "0.265 0.07", "ВАШИ КАРТЫ");
                    CreateTitle(Container, "MagicCardsHelpCountTitle", "MagicCardsHelp", $"<size=16>Тут вы можете посмотреть все карты, которые вы насобирали за все время\nДля продолжения обучения нажмите эту кнопку</size>", TextAnchor.MiddleCenter, "0 0.4", "1 0.6", "0 0 0 1", "1 -1", true);
                    CuiHelper.AddUi(arg.Player(), Container);
                    break;
                }
                case "6" : {
                    CreatePanel(Container, "MagicCardsHelp", "Overlay", "0 0 0 0.5", "0.175 0.125", "0.825 0.975");
                    CreateTitle(Container, "MagicMyCardsHelpTitle", "MagicCardsHelp", "<size=70>Ваши собранные карты</size>", TextAnchor.UpperCenter, "0 0.8", "1 0.975", "0 0 0 1", "1 -1", true);
                    Container.Add(new CuiElement {
                        Name = "MagicHelpCursor", Parent = "MagicCardsHelp", Components = {
                            new CuiNeedsCursorComponent()
                        }
                    }
                    );
                    int x = 0, y = 0;
                    for(int i = 0; i < 39; i++) {
                        CreateImage(Container, $"MagicMyCardHelp{i}", "MagicCardsHelp", GetImage("BackCard"), null, "1 1 1 1", $"{0.01 + (x * 0.076)} {0.675 - (y * 0.165)}", $"{0.076 + (x * 0.076)} {0.825 - (y * 0.165)}", 0.1f);
                        CreateButton(Container, "MagiccardsAccept", $"MagicMyCardHelp{i}", "1 0 0 0", "cardhelp 7", "0 0", "1 1", "");
                        if (x == 12) {
                            x = -1;
                            y++;
                        }
                        x++;
                    }
                    CreatePanel(Container, "MagicCardsHelpFon", "MagicCardsHelp", "0 0 0 0.99", "0 0.825", "1 1");
                    CreatePanel(Container, "MagicCardsHelpFon2", "MagicCardsHelp", "0 0 0 0.99", "0 0", "1 0.325");
                    CreateTitle(Container, "MagicCardsHelpCountTitle", "MagicCardsHelp", $"<size=16>Тут будут все ваши собранные карты\nДля продолжение нажмите на любую карту</size>", TextAnchor.MiddleCenter, "0 0.1", "1 0.3", "0 0 0 1", "1 -1", true);
                    CuiHelper.AddUi(arg.Player(), Container);
                    break;
                }
                case "7" : {
                    CreatePanel(Container, "MagicCardsHelp", "Overlay", "0 0 0 0.5", "0.175 0.125", "0.825 0.975");
                    CreateTitle(Container, "MagicMyCardsHelpTitle", "MagicCardsHelp", "<size=70>Ваши собранные карты</size>", TextAnchor.UpperCenter, "0 0.8", "1 0.975", "0 0 0 1", "1 -1", true);
                    Container.Add(new CuiElement {
                        Name = "MagicHelpCursor", Parent = "MagicCardsHelp", Components = {
                            new CuiNeedsCursorComponent()
                        }
                    }
                    );
                    CreatePanel(Container, "MagicCardsHelpFon", "MagicCardsHelp", "0 0 0 0.99", "0 0.325", "1 1");
                    CreateTitle(Container, "MagicCardsHelpCountTitle", "MagicCardsHelp", $"<size=16>Здесь показана информация о выбранной карте.Ее название, описание, сколько собранно, и сколько нужно собрать для получения</size>", TextAnchor.MiddleCenter, "0 0.325", "1 0.4", "0 0 0 1", "1 -1", true);
                    CreatePanel(Container, "MagicCardsHelpInfo", "MagicCardsHelp", "1 1 1 0", "0 0", "1 0.325");
                    CreateImage(Container, $"MyCardInfoImg", "MagicCardsHelpInfo", GetImage("BackCard"), null, "1 1 1 1", $"0.15 0.1", $"0.275 0.9", 0.1f);
                    CreateTitle(Container, $"MyCardInfoTitle", "MagicCardsHelpInfo", $"<size=24>НАЗВАНИЕ</size>", TextAnchor.UpperLeft, "0.3 0.75", "0.85 0.9", "0 0 0 1", "1 -1", true);
                    CreateTitle(Container, $"MyCardInfoTitleDesc", "MagicCardsHelpInfo", $"<size=16>Описание</size>", TextAnchor.UpperLeft, "0.3 0.35", "0.85 0.75", "0 0 0 1", "1 -1", true);
                    CreateTitle(Container, $"MyCardInfoTitle", "MagicCardsHelpInfo", $"<size=16>Собрано: 6/10</size>", TextAnchor.UpperLeft, "0.3 0.1", "0.85 0.2", "0 0 0 1", "1 -1", true);
                    CreateButton(Container, "MagiccardsAccept", "MagicCardsHelp", "1 0 0 1", "cardhelp 8", "0.45 -0.05", "0.55 0", "Понятно");
                    CuiHelper.AddUi(arg.Player(), Container);
                    break;
                }
                case "8" : {
                    CreatePanel(Container, "MagicCardsHelp", "Overlay", "0 0 0 0.5", "0.175 0.125", "0.825 0.975");
                    CreateTitle(Container, "MagicMyCardsHelpTitle", "MagicCardsHelp", "<size=70>Ваши собранные карты</size>", TextAnchor.UpperCenter, "0 0.8", "1 0.975", "0 0 0 1", "1 -1", true);
                    Container.Add(new CuiElement {
                        Name = "MagicHelpCursor", Parent = "MagicCardsHelp", Components = {
                            new CuiNeedsCursorComponent()
                        }
                    }
                    );
                    CreatePanel(Container, "MagicCardsHelpFon", "MagicCardsHelp", "0 0 0 0.99", "0 0.325", "1 1");
                    CreateTitle(Container, "MagicCardsHelpCountTitle", "MagicCardsHelp", $"<size=16>Как только вы соберете нужное количество карты, вы сможете получить награду</size>", TextAnchor.MiddleCenter, "0 0.325", "1 0.4", "0 0 0 1", "1 -1", true);
                    CreatePanel(Container, "MagicCardsHelpInfo", "MagicCardsHelp", "1 1 1 0", "0 0", "1 0.325");
                    CreateImage(Container, $"MyCardInfoImg", "MagicCardsHelpInfo", GetImage("BackCard"), null, "1 1 1 1", $"0.15 0.1", $"0.275 0.9", 0.1f);
                    CreateTitle(Container, $"MyCardInfoTitle", "MagicCardsHelpInfo", $"<size=24>НАЗВАНИЕ</size>", TextAnchor.UpperLeft, "0.3 0.75", "0.85 0.9", "0 0 0 1", "1 -1", true);
                    CreateTitle(Container, $"MyCardInfoTitleDesc", "MagicCardsHelpInfo", $"<size=16>Описание</size>", TextAnchor.UpperLeft, "0.3 0.35", "0.85 0.75", "0 0 0 1", "1 -1", true);
                    CreateTitle(Container, $"MyCardInfoTitle", "MagicCardsHelpInfo", $"<size=16>Собрано: 10/10</size>", TextAnchor.UpperLeft, "0.3 0.1", "0.85 0.2", "0 0 0 1", "1 -1", true);
                    CreateButton(Container, "MagiccardsAccept", "MagicCardsHelp", "1 0 0 1", "cards", "0.45 -0.05", "0.55 0", "Понятно");
                    CreateButton(Container, "MyCardGet", "MagicCardsHelpInfo", "0.00 0.75 1.00 1.00", $"", "0.625 0.1", "0.725 0.3", "ПОЛУЧИТЬ");
                    CreateButton(Container, "MyCardClose", "MagicCardsHelpInfo", "1.00 0.00 1.00 1.00", "", "0.75 0.1", "0.85 0.3", "ЗАКРЫТЬ");
                    CuiHelper.AddUi(arg.Player(), Container);
                    break;
                }
            }
        }
#endregion
#region Hook
        void OnServerInitialized() {
            LoadDefaultConfig();
            PlayerCards = Interface.Oxide.DataFileSystem.ReadObject<List<PlayerCard>>("MagicCards/Players");
            Cards = Interface.Oxide.DataFileSystem.ReadObject<List<Card>>("MagicCards/Cards");
            AddImage(BackCard, "BackCard");
            foreach(var card in Cards) {
                AddImage(card.ImageUrl, card.ImageName);
            }
            foreach (var player in BasePlayer.activePlayerList) {
                PlayerCard PCard = PlayerCards.Find(x => x.SteamID == player.userID);
                if (PCard == null) {
                    PCard = new PlayerCard {
                        SteamID = player.userID, CardsCount = 3, Cards = new Dictionary<int, int>()
                    }
                    ;
                    PlayerCards.Add(PCard);
                }
            }
            timer.Repeat(CardsTimer, 0, () => {
                foreach(var pcard in PlayerCards) {
                    if (pcard.CardsCount < MaxCards) pcard.CardsCount++;
                }
            }
            );
        }
        void OnPlayerInit(BasePlayer player) {
            PlayerCard PCard = PlayerCards.Find(x => x.SteamID == player.userID);
            if (PCard == null) {
                PCard = new PlayerCard {
                    SteamID = player.userID, CardsCount = 3, Cards = new Dictionary<int, int>()
                }
                ;
                PlayerCards.Add(PCard);
            }
        }
        void Unload() {
            foreach (BasePlayer player in BasePlayer.activePlayerList) {
                CuiHelper.DestroyUi(player, "MagicCards");
                CuiHelper.DestroyUi(player, "MagicMyCards");
                CuiHelper.DestroyUi(player, "MagicCardsHelp");
            }
            SaveData();
        }
        void OnServerSave() {
            SaveData();
        }
        void SaveData() {
            Interface.Oxide.DataFileSystem.WriteObject("MagicCards/Players", PlayerCards);
        }
#endregion
#region GUI Template
        private void CreatePanel(CuiElementContainer Container, string Name, string Parent, string Color, string AnchorMin, string AnchorMax) {
            Container.Add(new CuiElement {
                Name = Name, Parent = Parent, Components = {
                    new CuiImageComponent {
                        Color = Color
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = AnchorMin, AnchorMax = AnchorMax
                    }
                }
            }
            );
        }
        private void CreateImage(CuiElementContainer Container, string Name, string Parent, string Png, string Url, string Color, string AnchorMin, string AnchorMax, float fadein) {
            Container.Add(new CuiElement {
                Name = Name, Parent = Parent, Components = {
                    new CuiRawImageComponent {
                        Png = Png, Url = Url, Color = Color, FadeIn = fadein
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = AnchorMin, AnchorMax = AnchorMax
                    }
                }
            }
            );
        }
        private void CreateButton(CuiElementContainer Container, string Name, string Parent, string Color, string Command, string AnchorMin, string AnchorMax, string Text) {
            Container.Add(new CuiButton {
                Button = {
                    Color = Color, Command = Command
                }
                , RectTransform = {
                    AnchorMin = AnchorMin, AnchorMax = AnchorMax
                }
                , Text = {
                    Text = Text, Align = TextAnchor.MiddleCenter
                }
            }
            , Parent, Name);
        }
        private void CreateTitle(CuiElementContainer Container, string Name, string Parent, string Text, TextAnchor Align, string AnchorMin, string AnchorMax, string OutlineColor, string OutlineDistance, bool UseAlpha) {
            Container.Add(new CuiElement {
                Name = Name, Parent = Parent, Components = {
                    new CuiTextComponent {
                        Text = Text, Align = Align
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = AnchorMin, AnchorMax = AnchorMax
                    }
                    , new CuiOutlineComponent {
                        Color = OutlineColor, Distance = OutlineDistance, UseGraphicAlpha = UseAlpha
                    }
                }
            }
            );
        }
#endregion
    }
}

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