C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using System.Collections.Generic;
namespace Oxide.Plugins
{
[Info("Join Message Plus", "MisterPixie", "1.0.54")]
[Description("Advanced join/leave messages")]
class JoinMessagePlus : CovalencePlugin
{
private System.Random _rnd = new System.Random();
private const string _permission = "joinmessageplus.allow";
#region Data
private List<string> _joinMessagePlusData = new List<string>();
private void SaveData()
{
Interface.Oxide.DataFileSystem.WriteObject("JoinMessagePlusData", _joinMessagePlusData);
}
#endregion
#region Lang
private string Lang(string key, string id = null, params object[] args) => string.Format(lang.GetMessage(key, this, id), args);
protected override void LoadDefaultMessages()
{
lang.RegisterMessages(new Dictionary<string, string>
{
["NoCommandAccess"] = "You don't have access to this command.",
["ToggleOn"] = "You have turned your Join/Leave Messages [#50D703]ON![/#].",
["ToggleOff"] = "You have turned your Join/Leave Messages [#D60000]OFF![/#]."
}, this);
}
#endregion
#region Hooks
private void Init()
{
LoadVariables();
_joinMessagePlusData = Interface.Oxide.DataFileSystem.ReadObject<List<string>>(Name);
permission.RegisterPermission(_permission, this);
if (!configData.EnableJoinMsg)
Unsubscribe("OnUserConnected");
if (!configData.EnableLeaveMsg)
Unsubscribe("OnUserDisconnected");
AddCovalenceCommand(configData.VIPToggleCommand, "VIPToggle");
}
private void OnUserConnected(IPlayer player)
{
if (configData.IsAdminJoin && player.IsAdmin)
{
return;
}
if (!_joinMessagePlusData.Contains(player.Id))
{
int randomQuote = _rnd.Next(configData.JoinMessages.Count);
string randomString = configData.JoinMessages[randomQuote];
server.Broadcast(string.Format(randomString, player.Name));
}
}
private void OnUserDisconnected(IPlayer player)
{
if (configData.IsAdminLeave && player.IsAdmin)
{
return;
}
if (!_joinMessagePlusData.Contains(player.Id))
{
int randomQuote = _rnd.Next(configData.LeaveMessages.Count);
string randomString = configData.LeaveMessages[randomQuote];
server.Broadcast(string.Format(randomString, player.Name));
}
}
private void Unload()
{
SaveData();
}
private void OnServerSave()
{
SaveData();
}
#endregion
#region Methods
private void VIPToggle(IPlayer player, string command, string[] arg)
{
if (player == null || player.IsServer)
{
return;
}
if (configData.UseVIPTogglePerm == true && !permission.UserHasPermission(player.Id, _permission))
{
player.Reply(Lang("NoCommandAccess", player.Id));
return;
}
if (!_joinMessagePlusData.Contains(player.Id))
{
_joinMessagePlusData.Add(player.Id);
player.Reply(Lang("ToggleOff", player.Id));
}
else
{
_joinMessagePlusData.Remove(player.Id);
player.Reply(Lang("ToggleOn", player.Id));
}
}
#endregion
#region Config
private ConfigData configData;
private class ConfigData
{
public bool EnableJoinMsg;
public bool EnableLeaveMsg;
public bool IsAdminJoin;
public bool IsAdminLeave;
public bool UseVIPTogglePerm;
public string VIPToggleCommand;
public List<string> JoinMessages;
public List<string> LeaveMessages;
}
private void LoadVariables()
{
LoadConfigVariables();
SaveConfig();
}
protected override void LoadDefaultConfig()
{
var config = new ConfigData
{
EnableJoinMsg = false,
EnableLeaveMsg = false,
IsAdminJoin = false,
IsAdminLeave = false,
UseVIPTogglePerm = false,
VIPToggleCommand = "joinmessage",
JoinMessages = new List<string>
{
"{0} Joined the game!!!",
"Look out...its <color=red>{0}</color>",
"{0} Has joined the server!"
},
LeaveMessages = new List<string>
{
"{0} Left the game!!!",
"It's sad to see you go <color=red>{0}</color>"
}
};
SaveConfig(config);
}
private void LoadConfigVariables() => configData = Config.ReadObject<ConfigData>();
void SaveConfig(ConfigData config) => Config.WriteObject(config, true);
#endregion
}
}