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

FREE ReferalSystem : 0.1.2 0.1.2

Нет прав для скачивания
C#:
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui; 
using UnityEngine;
namespace Oxide.Plugins
{
    [Info("Referal System", "TopPlugin.ru", "0.1.2")]
    public class ReferalSystem : RustPlugin
    {
        #region Classes

        private class PlayerInfo
        {
            [JsonProperty("Отображаемое имя")]
            public string DisplayName;
            [JsonProperty("ID человека")]
            public ulong UserID;
            
            public PlayerInfo() {}
            public PlayerInfo(BasePlayer player)
            {
                DisplayName = player.displayName;
                UserID = player.userID;
            }
        }
        
        private class RefProfile
        {
            [JsonProperty("Информация об игроке")]
            public PlayerInfo PlayerInfo;

            [JsonProperty("Информация о пригласившем")]
            public PlayerInfo InviterInfo;
            [JsonProperty("Информация о приглашённых игроках")]
            public List<PlayerInfo> InvitedInfos;

            [JsonProperty("Получена ли награда")]
            public bool Collected = false;
            
            public RefProfile() { }
            public RefProfile(BasePlayer player)
            {
                PlayerInfo = new PlayerInfo(player);
                InviterInfo = null;
                InvitedInfos = new List<PlayerInfo>();
            }

            public RefProfile GetProfileByInfo(PlayerInfo info)
            {
                if (info == null) return null;

                var profile = RefProfiles.FirstOrDefault(p => p.Key == info.UserID).Value;
                return profile;
            }
            
            public RefProfile GetInviter()
            {
                if (InviterInfo == null) return null;

                return GetProfileByInfo(InviterInfo);
            }
            
            public List<RefProfile> GetInvited()
            {
                List<RefProfile> output = new List<RefProfile>();
                foreach (var check in InvitedInfos)
                {
                    var profile = GetProfileByInfo(check);
                    if (profile == null) continue;
                    
                    output.Add(profile);
                }

                return output;
            }
        }

        private class RefReward
        {
            public class RefItem
            {
                [JsonProperty("Отображаемое имя предмета")]
                public string DisplayName;
                [JsonProperty("Короткое название предмета")]
                public string ShortName;
            
                [JsonProperty("Количество предмета")]
                public int Amount;

                [JsonProperty("SkinID предмета")]
                public ulong SkinID;
                [JsonProperty("Вызываемая команда")]
                public string ExecuteCommand;

                public void ProcessReward(BasePlayer player)
                {
                    if (!string.IsNullOrEmpty(ShortName))
                    {
                        Item item = ItemManager.CreateByPartialName(ShortName, Amount);
                        item.skin = SkinID;
 
                        if (!item.MoveToContainer(player.inventory.containerMain))
                            item.Drop(player.transform.position, Vector3.down);
                    }

                    if (!string.IsNullOrEmpty(ExecuteCommand))
                    {
                        _.Server.Command(ExecuteCommand.Replace("%STEAMID%", player.UserIDString));
                    }
                }
            }

            [JsonProperty("Предметы получаемые с этого набора")]
            public List<RefItem> RefItems = new List<RefItem>();

            public void ProcessRewards(BasePlayer player)
            {
                player.ChatMessage($"Вы получили <color=orange>награду</color>, спасибо что приглашаете игроков на сервер!");
                for (int i = 0; i < Settings.PrizeRandomAmount; i++)
                {
                    RefItems.GetRandom().ProcessReward(player);
                }
            }
        }

        private class Configuration
        {
            [JsonProperty("Максимальное количество приглащенных игроков")]
            public int MaxInvitedAmount = 5;
            [JsonProperty("Количество случайных предметов за одного игрока")]
            public int PrizeRandomAmount = 3;

            [JsonProperty("Список возможных подарков для пригласившего")]
            public RefReward RewardsForInviter;
            [JsonProperty("Список возможных подарков для приглашенного")]
            public RefReward RewardsForInvited;

            public static Configuration Generate()
            {
                return new Configuration
                {
                    MaxInvitedAmount = 8,
                    RewardsForInviter = new RefReward
                    {
                            RefItems = new List<RefReward.RefItem>
                            {
                                new RefReward.RefItem
                                {
                                    ShortName = "rifle.ak",
                                    Amount = 1,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                            }
                    },
                    RewardsForInvited = new RefReward
                    {
                        RefItems = new List<RefReward.RefItem>
                        {
                                new RefReward.RefItem
                                {
                                    ShortName = "rifle.ak",
                                    Amount = 1,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                                new RefReward.RefItem
                                {
                                    ShortName = "ammo.rifle",
                                    Amount = 150,
                                    SkinID = 1
                                },
                            } 
                    }
                }; 
            }
        }
        
        #endregion

        #region Variables

        [PluginReference] private Plugin ImageLibrary;
        private static ReferalSystem _;
        private static Configuration Settings = Configuration.Generate();
        private static Hash<ulong, RefProfile> RefProfiles = new Hash<ulong, RefProfile>();
        
        #endregion

        #region Initialization

        protected override void LoadConfig()
        {
            base.LoadConfig();
            try
            {
                Settings = Config.ReadObject<Configuration>();
            }
            catch
            {
                PrintError($"An error occurred reading the configuration file!");
                PrintError($"Check it with any JSON Validator!");
                return;
            }
            
            SaveConfig();  
        } 

        protected override void LoadDefaultConfig() => Settings = Configuration.Generate();
        protected override void SaveConfig()        => Config.WriteObject(Settings);
        
        private void OnServerInitialized()
        {
            _ = this;
            if (!ImageLibrary)
            {
                PrintError("Donwload and install ImageLibrary to work with this plugin...");
                Interface.Oxide.UnloadPlugin(Name);
                return;
            }
            
            ImageLibrary.Call("AddImage", "https://i.imgur.com/nmWKdi8.png", "UNKNOWNUSERID");
            
            if (Interface.Oxide.DataFileSystem.ExistsDatafile(Name))
                RefProfiles = Interface.Oxide.DataFileSystem.ReadObject<Hash<ulong, RefProfile>>(Name);
            BasePlayer.activePlayerList.ToList().ForEach(OnPlayerConnected); 
        }

        private void OnPlayerConnected(BasePlayer player)
        {
            if (!RefProfiles.ContainsKey(player.userID))
                RefProfiles.Add(player.userID, new RefProfile(player));
        }

        private void SaveData() => Interface.Oxide.DataFileSystem.WriteObject(Name, RefProfiles);

        private void Unload()
        {
            SaveData();
            
            BasePlayer.activePlayerList.ToList().ForEach(p => CuiHelper.DestroyUi(p, Layer + ".Owner"));
        }

        #endregion

        #region Commands

        [ChatCommand("ref")]
        private void CmdChatRef(BasePlayer player, string command, string[] args) => UI_DrawInterface(player);  

        [ConsoleCommand("RS_Controller")]
        private void CmdConsoleController(ConsoleSystem.Arg args)
        {
            var player = args.Player();
            if (player == null || !args.HasArgs(1)) return;

            switch (args.Args[0].ToLower())
            {
                case "show":
                {
                    CuiElementContainer container = new CuiElementContainer();
             
                    container.Add(new CuiLabel
                    {
                        RectTransform = { AnchorMin = "0 1", AnchorMax = "1 1", OffsetMin = $"-250 -50", OffsetMax = "0 50" },
                        Text = { FadeIn = 1f,Text = "для пригласившего", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", FontSize = 18, Color = "1 1 1 0.7" }
                    }, Layer + ".Head");

                    container.Add(new CuiLabel
                    {
                        RectTransform = { AnchorMin = "0 1", AnchorMax = "1 1", OffsetMin = $"0 -50", OffsetMax = "250 50" },
                        Text = { FadeIn = 1f,Text = "для приглашённого", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", FontSize = 18, Color = "1 1 1 0.7"}
                    }, Layer + ".Head");
            
                    container.Add(new CuiLabel
                    {
                        RectTransform = { AnchorMin = "0 1", AnchorMax = "1 1", OffsetMin = $"-250 -375", OffsetMax = "250 -325" },
                        Text = { FadeIn = 1f,Text = $"Вы получите {Settings.PrizeRandomAmount} случайных предмета", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", FontSize = 18, Color = "1 1 1 0.7" }
                    }, Layer + ".Head");
                    
                    int rewIndex = 0;
                    float topPosition = -55; 
                    float leftPositionReward = 50;
                    
                    foreach (var rew in Settings.RewardsForInviter.RefItems)
                    {
                        rewIndex++;
                        var rUi = CuiHelper.GetGuid();
                        
                        container.Add(new CuiPanel
                        {
                            RectTransform = { AnchorMin = "0 1", AnchorMax = "1 1", OffsetMin = $"{leftPositionReward - 137.5} {topPosition - 37.5}", OffsetMax = $"{leftPositionReward - 62.5} {topPosition + 37.5}" },
                            Image         = {FadeIn = 1f,Color     = "1 1 1 0.2"} 
                        }, Layer + ".Head", Layer + rUi);

                        if (rewIndex == 10)
                        {
                            container.Add(new CuiLabel
                            {
                                RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0" },
                                Text = { FadeIn = 1f,Text = "+" + (Settings.RewardsForInviter.RefItems.Count - 12), Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 40, Color = "1 1 1 0.6"}
                            }, Layer + rUi);
                            
                            break; 
                        }
                        
                        if (!string.IsNullOrEmpty(rew.ShortName))
                        {
                            container.Add(new CuiElement
                            {
                                Parent = Layer + rUi,
                                Components = 
                                {
                                    new CuiRawImageComponent {FadeIn = 1f,Png            = (string) ImageLibrary.Call("GetImage", rew.ShortName)},
                                    new CuiRectTransformComponent {AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "2 2", OffsetMax = "-2 -2"}
                                }
                            }); 
                        }  

                        leftPositionReward -= 85;
                        if (leftPositionReward <= -200)
                        {
                            leftPositionReward = 50;
                            topPosition -= 80;
                        }
                    }
                    
                    rewIndex = 0;
                    topPosition = -55;
                    leftPositionReward = 150; 
                    
                    foreach (var rew in Settings.RewardsForInvited.RefItems)
                    {
                        rewIndex++;
                        var rUi = CuiHelper.GetGuid();
                        
                        container.Add(new CuiPanel
                        {
                            RectTransform = { AnchorMin = "0 1", AnchorMax = "1 1", OffsetMin = $"{leftPositionReward - 137.5} {topPosition - 37.5}", OffsetMax = $"{leftPositionReward - 62.5} {topPosition + 37.5}" },
                            Image         = {FadeIn = 1f,Color     = "1 1 1 0.2"} 
                        }, Layer + ".Head", Layer + rUi);


                        if (rewIndex == 10)
                        {
                            container.Add(new CuiLabel
                                {
                                    RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0" },
                                    Text = { FadeIn = 1f,Text = "+" + (Settings.RewardsForInviter.RefItems.Count - 12), Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 40, Color = "1 1 1 0.6"}
                                }, Layer + rUi);
                            
                            break; 
                        }
                        
                        if (!string.IsNullOrEmpty(rew.ShortName))
                        {
                            container.Add(new CuiElement
                            {
                                Parent = Layer + rUi,
                                Components = 
                                {
                                    new CuiRawImageComponent {FadeIn = 1f,Png            = (string) ImageLibrary.Call("GetImage", rew.ShortName)},
                                    new CuiRectTransformComponent {AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "2 2", OffsetMax = "-2 -2"}
                                }
                            });
                        }  

                        leftPositionReward += 85;
                        if (leftPositionReward >= 350)
                        {
                            leftPositionReward = 150;
                            topPosition -= 80;
                        }
                    }

                    CuiHelper.AddUi(player, container); 
                    break;
                }
                case "choose":
                {
                    if (!args.HasArgs(2))
                    {
                        UI_DrawChoose(player); 
                        return;
                    }

                    ulong targetId = 0UL;
                    if (!ulong.TryParse(args.Args[1], out targetId)) return;

                    if (RefProfiles[player.userID].InviterInfo != null) return;

                    if (RefProfiles[targetId].InviterInfo == RefProfiles[player.userID].PlayerInfo) return;                    
                    
                    RefProfiles[player.userID].InviterInfo = RefProfiles[targetId].PlayerInfo;
                    RefProfiles[targetId].InvitedInfos.Add(RefProfiles[player.userID].PlayerInfo);  
                    
                    player.ChatMessage($"Вы <color=orange>успешно выбрали</color>, награда находится у вас в инвентаре!");
                    UI_DrawInterface(player);

                    Settings.RewardsForInvited.ProcessRewards(player); 
                    var targetPlayer = BasePlayer.FindByID(targetId);
                    if (targetPlayer != null && targetPlayer.IsConnected)
                    {
                        targetPlayer.ChatMessage($"<color=orange>{player.displayName}</color> теперь ваш реферал, вы можете забрать награду (/ref)");
                    }
                    break;
                }
                case "collect":
                {
                    if (!args.HasArgs(2)) return;
                    
                    ulong targetId = 0UL;
                    if (!ulong.TryParse(args.Args[1], out targetId)) return;

                    if (RefProfiles[player.userID].InvitedInfos.All(p => p.UserID != targetId)) return;

                    Settings.RewardsForInviter.ProcessRewards(player); 
                    RefProfiles[targetId].Collected = true;
                    UI_DrawInterface(player);
                    break;
                }
            }
        }
        
        #endregion

        #region Interface

        private const string Layer = "UI.IRS2.Layer"; 

        private void UI_DrawChoose(BasePlayer player)
        { 
            CuiHelper.DestroyUi(player, Layer);
            CuiElementContainer container = new CuiElementContainer();
            
            container.Add(new CuiPanel
            {
                CursorEnabled = true,
                RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"},
                Image         = {Color     = "0 0 0 0"}
            }, Layer + ".Owner", Layer);
 
            container.Add(new CuiButton
            {
                RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"},
                Button        = {Color     = "0 0 0 0", Close = Layer + ".Owner" },
                Text = { Text = "" }
            }, Layer);

            float leftPosition = 0;
            float topPosition = 0;
            
            for(int i = 0; i < ConVar.Server.maxplayers; i++)
            {
                var check = BasePlayer.activePlayerList.ElementAtOrDefault(i);
                
                container.Add(new CuiPanel
                {
                    RectTransform = { AnchorMin = "0.04 1", AnchorMax = "0.04 1", OffsetMin = $"{0 + leftPosition} {topPosition - 60}", OffsetMax = $"{120 + leftPosition} {topPosition - 35}" },
                    Image = { Color = check == null ? "1 1 1 0.1" : player.userID == check.userID ? "1 0.5 0.5 0.2" : "1 1 1 0.2" }
                }, Layer, Layer +player.userID);

                if (check != null)
                {
                    container.Add(new CuiElement
                    {
                        Parent = Layer + player.userID,
                        Components =
                        {
                            new CuiRawImageComponent
                                {Png = (string) ImageLibrary.Call("GetImage", check.UserIDString)},
                            new CuiRectTransformComponent
                                {AnchorMin = "0 0", AnchorMax = "0 0", OffsetMin = "2 2", OffsetMax = "23 23"}
                        }
                    });

                    container.Add(new CuiLabel
                        {
                            RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "30 0", OffsetMax = "0 0"},
                            Text =
                            {
                                Text = check.displayName, Align = TextAnchor.MiddleLeft,
                                Font = "robotocondensed-regular.ttf"
                            }
                        }, Layer + player.userID);

                    if (check.userID != player.userID)
                    {
                        container.Add(new CuiButton
                            {
                                RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"},
                                Button = {Color = "0 0 0 0", Command = $"RS_Controller choose {check.userID}"}, 
                                Text = {Text = ""}
                            }, Layer + player.userID);
                    }
                }
                

                leftPosition += 125;
                if (leftPosition >= 125 * 10)
                {
                    topPosition -= 30;
                    leftPosition = 0;
                }
            }

            CuiHelper.AddUi(player, container);
        }
        
        private void UI_DrawInterface(BasePlayer player)
        {
            var userInfo = RefProfiles.FirstOrDefault(p => p.Key == player.userID).Value;
            
            CuiHelper.DestroyUi(player, Layer + ".Owner");
            CuiElementContainer container = new CuiElementContainer();

            container.Add(new CuiPanel
            {
                CursorEnabled = true,
                RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"},
                Image         = {Color     = "0 0 0 0.9"}
            }, "Overlay", Layer + ".Owner");
            
            container.Add(new CuiPanel
            {
                CursorEnabled = true,
                RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"},
                Image         = {Color     = "0 0 0 0"}
            }, Layer + ".Owner", Layer);
 
            container.Add(new CuiButton
            {
                RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"},
                Button        = {Color     = "0 0 0 0", Close = Layer + ".Owner" },
                Text = { Text = "" }
            }, Layer);
                    
            container.Add(new CuiPanel
                {
                    RectTransform = {AnchorMin = "0.25 0.5", AnchorMax = "0.25 0.8", OffsetMin = "-29 -58", OffsetMax = "-25 42"},
                    Image         = {Color     = "1 1 1 0"}
                }, Layer, Layer + ".Head");
            
            container.Add(new CuiLabel
            {
                RectTransform = { AnchorMin = "0 1", AnchorMax = "1 1", OffsetMin = $"-250 0", OffsetMax = "250 50" },
                Text = { FadeIn = 1f, Text = "Список доступных наград", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 24 }
            }, Layer + ".Head");

            container.Add(new CuiButton 
            {
                RectTransform = { AnchorMin = "0 1", AnchorMax = "1 1", OffsetMin = $"-250 -25", OffsetMax = "250 30" },
                Button = { Color = "0 0 0 0", Close = Layer + ".Show", Command = "RS_Controller show"},
                Text = { FadeIn = 1f,Text = "Нажмите чтобы посмотреть", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", FontSize = 18, Color = "1 1 1 0.7"}
            }, Layer + ".Head", Layer + ".Show");

            container.Add(new CuiPanel
            {
                RectTransform = {AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.8", OffsetMin = "-2 75", OffsetMax = "2 -75"},
                Image         = {Color     = "1 1 1 0.2"}
            }, Layer);

            container.Add(new CuiPanel
            {
                RectTransform = {AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-75 -75", OffsetMax = "75 75"},
                Image         = {Color     = "1 1 1 0.2"}
            }, Layer, Layer + ".User");

            container.Add(new CuiElement
            {
                Parent = Layer + ".User",
                Components =
                {
                    new CuiRawImageComponent {Png            = (string) ImageLibrary.Call("GetImage", player.UserIDString)},
                    new CuiRectTransformComponent {AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "5 5", OffsetMax = "-5 -5"}
                }
            });

            container.Add(new CuiButton
            {
                RectTransform = {AnchorMin = "1 1", AnchorMax = "1 1", OffsetMin = "-250 -75", OffsetMax = "-15 -15"},
                Button = {Color = "0 0 0 0", Close = Layer + ".Owner"},
                Text =
                {
                    Text = "ЗАКРЫТЬ", Align = TextAnchor.UpperRight, Font = "robotocondensed-bold.ttf", FontSize = 24,
                    Color = "1 1 1 0.2"
                } 
            }, Layer);
            
            container.Add(new CuiLabel
            {
                RectTransform = {AnchorMin = "1 0", AnchorMax = "1 1", OffsetMin = "25 0", OffsetMax = "1000 0" }, 
                Text          = { Color = "1 1 1 0.8", Text = $"<size=24><b>Это ваш реферальный профиль</b></size>\n" +
                        $"<size=18>Приглашайте друзей и получайте награды</size>", Align = TextAnchor.MiddleLeft, Font = "robotocondensed-regular.ttf" }
            }, Layer + ".User");
            
            /*container.Add(new CuiLabel
            {
                FadeOut = 1f,
                RectTransform = { AnchorMin = "0 0", AnchorMax = "0 0", OffsetMin = $"25 0", OffsetMax = "500 50" },
                Text = { Text = "Нажмите для просмотра наград", Align = TextAnchor.MiddleLeft, Font = "robotocondensed-bold.ttf", FontSize = 24, Color = "1 1 1 0.6"}
            }, Layer ,Layer + ".Show");*/
            
            /*container.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = $"0 0", OffsetMax = "0 0" },
                Button = { Color = "0 0 0 0", Close = Layer + ".Show", Command = "RS_Controller show"},
                Text = { Text = "", Align = TextAnchor.MiddleLeft, Font = "robotocondensed-bold.ttf", FontSize = 24 }
            }, Layer + ".Show");*/

            var inviter = userInfo.GetInviter();

            string imageId = "UNKNOWNUSERID";
            string text = $"<size=24><b>Вы не указали пригласившего вас игрока</b></size>\n" +
                    $"<size=18>Нажмите на изображение, чтобы выбрать игрока</size>";
            if (inviter != null) 
            {
                imageId = inviter.PlayerInfo.UserID.ToString();
                text = $"<size=24><b>Это пригласивший вас игрок</b></size>\n" +
                        $"<size=18>Он уведомлён о вашем выборе</size>";
            }

            container.Add(new CuiPanel
            {
                RectTransform = {AnchorMin = "0.5 0.8", AnchorMax = "0.5 0.8", OffsetMin = "-75 -75", OffsetMax = "75 75"},
                Image         = {Color     = "1 1 1 0.2"}
            }, Layer, Layer + ".Inviter");
            
            container.Add(new CuiElement
            {
                Parent = Layer + ".Inviter",
                Components =
                {
                    new CuiRawImageComponent {Png            = (string) ImageLibrary.Call("GetImage", imageId)},
                    new CuiRectTransformComponent {AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "5 5", OffsetMax = "-5 -5"}
                }
            });

            if (inviter == null)
            {
                container.Add(new CuiButton
                {
                    RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"},
                    Text = {Text = ""},
                    Button = {Color = "0 0 0 0", Command = "RS_Controller choose"}
                }, Layer + ".Inviter");
            }

            float leftPosition  = Settings.MaxInvitedAmount / 2f * -110 - (Settings.MaxInvitedAmount - 1) / 2f * 25;
            float startPosition = leftPosition                          + 110                                  / 2f;
            
            container.Add(new CuiPanel
            {
                RectTransform = {AnchorMin = "0.5 0.2", AnchorMax = "0.5 0.5", OffsetMin = $"{-2} 79", OffsetMax = $"{2} -75"},
                Image         = {Color     = "1 1 1 0.2"}
            }, Layer);

            /*container.Add(new CuiLabel
            {
                RectTransform = {AnchorMin = "0 0", AnchorMax                                                                                                              = "1 0", OffsetMax            = "0 90"}, 
                Text          = {Text      = $"Здесь отображены игроки, которых вы пригласили на сервер\nВы можете получать награду за их игру на сервере", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", FontSize = 16 }
            }, Layer);*/ 
            
            container.Add(new CuiLabel
            {
                RectTransform = {AnchorMin = "1 0", AnchorMax  = "1 1", OffsetMin = "25 0", OffsetMax           = "1000 0" },
                Text          = { Color    = "1 1 1 0.8", Text = text, Align      = TextAnchor.MiddleLeft, Font = "robotocondensed-regular.ttf" }
            }, Layer + ".Inviter");
            
            for (int i = 0; i < Settings.MaxInvitedAmount; i++)
            {
                RefProfile invitedProfile = null;
                var invited = userInfo.InvitedInfos.ElementAtOrDefault(i);
                if (invited != null) invitedProfile = userInfo.GetProfileByInfo(invited);

                imageId = "UNKNOWNUSERID";
                if (invitedProfile != null)
                    imageId = invitedProfile.PlayerInfo.UserID.ToString();
                
                container.Add(new CuiPanel
                {
                    RectTransform = {AnchorMin = "0.5 0.2", AnchorMax = "0.5 0.2", OffsetMin = $"{leftPosition + 53} 55", OffsetMax = $"{leftPosition + 57} 75"},
                    Image         = {Color     = "1 1 1 0.2"}
                }, Layer);
                
                container.Add(new CuiPanel
                {
                    RectTransform = {AnchorMin = "0.5 0.2", AnchorMax = "0.5 0.2", OffsetMin = $"{leftPosition} -55", OffsetMax = $"{leftPosition + 110} 55"},
                    Image         = {Color     = invitedProfile == null || invitedProfile.Collected ? "1 1 1 0.2" : "0.8 1 0.8 0.6"}  
                }, Layer, Layer + $".Invited.{i}");
                
                container.Add(new CuiElement
                {
                    Parent = Layer + $".Invited.{i}", 
                    Components =
                    {
                        new CuiRawImageComponent{ FadeIn = 0f + i * 0.1f, Png            = (string) ImageLibrary.Call("GetImage", imageId)},
                        new CuiRectTransformComponent {AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "5 5", OffsetMax = "-5 -5"}
                    }
                });

                
                leftPosition += 135;
                if (invitedProfile == null) continue;  
                
                /*container.Add(new CuiPanel
                {
                    RectTransform = {AnchorMin = "0 0", AnchorMax = "1 0", OffsetMin = "0 -15", OffsetMax = "0 0"},
                    Image         = {Color     = "1 1 1 0.2"} 
                }, Layer + $".Invited.{i}", Layer + $".Invited.{i}.Progress");
                */
                /*container.Add(new CuiPanel
                {
                    RectTransform = {AnchorMin = "0 0", AnchorMax = $"{currentProgress / 3} {1}", OffsetMax = "0 0"},
                    Image         = {Color     = "0.7 1 0.7 0.2"}
                }, Layer + $".Invited.{i}.Progress");*/

                if (!invitedProfile.Collected)
                { 
                    container.Add(new CuiButton
                    {
                        RectTransform = {AnchorMin = "0 0", AnchorMax     = "1 1", OffsetMin = "-10 -20", OffsetMax = "10 0"},
                        Button        = {Color     = "0.6 1 0.6 0", Command   = $"RS_Controller collect {invitedProfile.PlayerInfo.UserID}" },
                        Text          = {Text      = "Заберите награду".ToUpper(), Align = TextAnchor.LowerCenter, Font = "robotocondensed-regular.ttf", FontSize = 14, Color = "1 1 1 0.7" }
                    }, Layer + $".Invited.{i}");
                }
            }
            
            container.Add(new CuiPanel
            {
                RectTransform = {AnchorMin = "0.5 0.2", AnchorMax = "0.5 0.2", OffsetMin = $"{startPosition - 2} 75", OffsetMax = $"{leftPosition - 78} 79"},
                Image         = {Color     = "1 1 1 0.2"}
            }, Layer);
            
            

            CuiHelper.AddUi(player, container);
        } 

        #endregion

        #region Hooks

        private int GetActiveReferals(BasePlayer player)
        {
            int amount = 1;

            if (RefProfiles.ContainsKey(player.userID))
            {
                amount = RefProfiles[player.userID].InvitedInfos.Count;
            }

            return amount;
        }
 
        #endregion
    }
}

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