using System; using System.Collections.Generic; using Newtonsoft.Json; using Oxide.Core; using UnityEngine; namespace Oxide.Plugins; [Info("Wipe Greeter", "Michael Keulemans", "1.0.0")] [Description("Greets each player once, on their first join after a wipe.")] public class WipeGreeter : RustPlugin { private ConfigData _config; private HashSet _greeted; private class ConfigData { [JsonProperty("Message")] public string Message = "Fresh wipe! Welcome back {name}. Map size {size}, seed {seed}."; } protected override void LoadDefaultConfig() => _config = new ConfigData(); protected override void LoadConfig() { base.LoadConfig(); try { _config = Config.ReadObject() ?? new ConfigData(); } catch (Exception ex) { Debug.LogException(ex); _config = new ConfigData(); } } protected override void SaveConfig() => Config.WriteObject(_config, true); private void Init() => _greeted = Interface.Oxide.DataFileSystem.ReadObject>(Name) ?? new HashSet(); private void OnNewSave(string filename) { _greeted = new HashSet(); Interface.Oxide.DataFileSystem.WriteObject(Name, _greeted); } private void OnPlayerConnected(BasePlayer player) { if (!_greeted.Add((ulong)player.userID)) return; Interface.Oxide.DataFileSystem.WriteObject(Name, _greeted); var text = _config.Message.Replace("{name}", player.displayName); text = text.Replace("{size}", World.Size.ToString()); text = text.Replace("{seed}", World.Seed.ToString()); PrintToChat(player, text); } }