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

FREE WakeInfo : 1.2.0 1.2.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using Oxide.Core;
using UnityEngine;
namespace Oxide.Plugins {
    [Info("Wake Info", "Mevent", "1.2.0")]
    [Description("Gives a note with information about the server after connecting")]
    public class WakeInfo : RustPlugin {
#region Config
        private static Configuration _config;
        private class Configuration {
            [JsonProperty(PropertyName = "Notes", ObjectCreationHandling = ObjectCreationHandling.Replace)]
            public List<NoteConf> Notes = new List<NoteConf> {
                new NoteConf {
                    Title = "New Player Info", Enabled = true, Permission = string.Empty, Text = new List<string> {
                        "Hello {name}!", "Now online: {online}"
                    }
                }
                , new NoteConf {
                    Title = "New Player Info 2", Enabled = true, Permission = string.Empty, Text = new List<string> {
                        "Last Wipe: {lastwipe}!", "Max online: {maxonline}"
                    }
                }
            }
            ;
            [JsonProperty(PropertyName = "Only Introduce?")]
            public bool Introduce = true;
            [JsonProperty(PropertyName = "Note Item")]
            public ItemConf Item = new ItemConf {
                ShortName = "note", Skin = 0
            }
            ;
        }
        private class NoteConf {
            [JsonProperty(PropertyName = "Title")]
            public string Title;
            [JsonProperty(PropertyName = "Enabled?")]
            public bool Enabled;
            [JsonProperty(PropertyName = "Permission (ex: wakeinfo.vip)")]
            public string Permission;
            [JsonProperty(PropertyName = "Text", ObjectCreationHandling = ObjectCreationHandling.Replace)]
            public List<string> Text = new List<string>();
            public void Get(BasePlayer player) {
                var item = _config.Item.ToItem(Title);
                if (item == null) return;
                var convertText = ConvertText(player);
                if (!string.IsNullOrEmpty(convertText)) item.text = convertText;
                item.MarkDirty();
                GiveItem(player, item);
            }
            private void GiveItem(BasePlayer player, Item item) {
                if (!item.MoveToContainer(player.inventory.containerBelt)) player.GiveItem(item, BaseEntity.GiveItemReason.PickedUp);
            }
            private string ConvertText(BasePlayer player) {
                return string.Join("\n", Text).Replace("{lastwipe}", SaveRestore.SaveCreatedTime.ToUniversalTime().ToShortDateString()).Replace("{name}", player.displayName).Replace("{steamid}", player.UserIDString).Replace("{maxonline}", ConVar.Server.maxplayers.ToString()).Replace("{online}", BasePlayer.activePlayerList.Count.ToString());
            }
        }
        private class ItemConf {
            [JsonProperty(PropertyName = "Short Name")]
            public string ShortName;
            [JsonProperty(PropertyName = "Skin")]
            public ulong Skin;
            public Item ToItem(string title) {
                var item = ItemManager.CreateByName(ShortName, 1, Skin);
                if (item == null) {
                    Debug.LogError($"Error creating item with shortName '{ShortName}'");
                    return null;
                }
                if (!string.IsNullOrEmpty(title)) item.name = title;
                return item;
            }
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                _config = Config.ReadObject<Configuration>();
                if (_config == null) throw new Exception();
                SaveConfig();
            }
            catch {
                PrintError("Your configuration file contains an error.Using default configuration values.");
                LoadDefaultConfig();
            }
        }
        protected override void SaveConfig() {
            Config.WriteObject(_config);
        }
        protected override void LoadDefaultConfig() {
            _config = new Configuration();
        }
#endregion
#region Data
        private PluginData _data;
        private void SaveData() {
            Interface.Oxide.DataFileSystem.WriteObject(Name, _data);
        }
        private void LoadData() {
            try {
                _data = Interface.Oxide.DataFileSystem.ReadObject<PluginData>(Name);
            }
            catch (Exception e) {
                PrintError(e.ToString());
            }
            if (_data == null) _data = new PluginData();
        }
        private class PluginData {
            [JsonProperty(PropertyName = "Players", ObjectCreationHandling = ObjectCreationHandling.Replace)]
            public List<ulong> Players = new List<ulong>();
        }
#endregion
#region Hooks
        private void Init() {
            LoadData();
        }
        private void Unload() {
            SaveData();
            _config = null;
        }
        private void OnNewSave() {
            _data.Players.Clear();
        }
        private void OnPlayerConnected(BasePlayer player) {
            if (player == null || _config.Introduce && _data.Players.Contains(player.userID)) return;
            _config.Notes.FindAll(note => note.Enabled && (string.IsNullOrEmpty(note.Permission) || permission.UserHasPermission(player.UserIDString, note.Permission))).ForEach(note => note.Get(player));
            if (!_data.Players.Contains(player.userID)) _data.Players.Add(player.userID);
        }
#endregion
    }
}

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