C#:
using Newtonsoft.Json;
using Oxide.Core;
using System.Collections.Generic;
using System.Linq;
namespace Oxide.Plugins {
[Info("ChangeName", "TopPlugin.ru", "0.1.0")]
class ChangeName : RustPlugin {
private PluginConfig config;
protected override void LoadDefaultConfig() {
PrintWarning("Благодарим за заказ плагина на сайте TopPlugin.ru.Если вы передадите этот плагин сторонним лицам знайте - это лишает вас гарантированных обновлений!");
config = PluginConfig.DefaultConfig();
}
protected override void LoadConfig() {
base.LoadConfig();
config = Config.ReadObject<PluginConfig>();
if (config.PluginVersion < Version) UpdateConfigValues();
Config.WriteObject(config, true);
}
private void UpdateConfigValues() {
PluginConfig baseConfig = PluginConfig.DefaultConfig();
if (config.PluginVersion < new VersionNumber(1, 0, 1)) {
PrintWarning("Config update detected! Updating config values...");
PrintWarning("Config update completed!");
}
config.PluginVersion = Version;
}
protected override void SaveConfig() {
Config.WriteObject(config);
}
private class PluginConfig {
[JsonProperty("Версия конфигурации")]
public VersionNumber PluginVersion = new VersionNumber();
[JsonProperty("Привилегия")]
public string Permission;
[JsonProperty("Список имет какие мы удаляем")]
public List<object> StringsToRemove = new List<object>();
public static PluginConfig DefaultConfig() {
return new PluginConfig() {
PluginVersion = new VersionNumber(), Permission = "ChangeName.allowed", StringsToRemove = new List<object>() {
"#magicrust", "magicrust", "grand-rust", "#MAGICRUST", "magicdrop.ru", "Grand-Rust", "rustlife", "tastydrop.ru", "ZTESLA.RU", "cs.money.ru", "BONEBLOOD.RU", "grand-rust.ru"
}
}
;
}
}
private string RemoveUnwantedNames(BasePlayer player) {
string newName = player.displayName;
foreach (string text in config.StringsToRemove) {
newName = newName.Replace(text, "");
}
newName = string.IsNullOrEmpty(newName) ? player.UserIDString : newName;
return newName;
}
void OnServerInitialized() {
BasePlayer.activePlayerList.ToList().ForEach(OnPlayerConnected);
}
void OnPlayerConnected(BasePlayer player) {
if (PlayersSettings.ContainsKey(player.userID) && string.IsNullOrEmpty(PlayersSettings[player.userID].OldName) && player.displayName != PlayersSettings[player.userID].OldName) PlayersSettings[player.userID].OldName = player.displayName;
if (PlayersSettings.ContainsKey(player.userID) && !string.IsNullOrEmpty(PlayersSettings[player.userID].NewName) && player.displayName != PlayersSettings[player.userID].NewName && permission.UserHasPermission(player.UserIDString, config.Permission)) Rename(player, PlayersSettings[player.userID].NewName);
ClearAdvertising(player, RemoveUnwantedNames(player));
}
void Loaded() {
LoadData();
permission.RegisterPermission(config.Permission, this);
}
void SaveData() {
if (PlayersSettings != null) Interface.Oxide.DataFileSystem.WriteObject(Name, PlayersSettings);
}
void Unload() {
SaveData();
}
public Dictionary<ulong, PlayerSettingName> PlayersSettings = new Dictionary<ulong, PlayerSettingName>();
public class PlayerSettingName {
public string OldName = "";
public string NewName = "";
}
void LoadData() {
try {
PlayersSettings = Interface.GetMod().DataFileSystem.ReadObject<Dictionary<ulong, PlayerSettingName>>(Name);
}
catch {
PlayersSettings = new Dictionary<ulong, PlayerSettingName>();
}
}
public void ClearAdvertising(BasePlayer player, string name) {
name = (string.IsNullOrEmpty(name.Trim()) ? player.displayName : name);
player.net.connection.username = name;
player.displayName = name;
player._name = name;
player.SendNetworkUpdateImmediate(false);
player.IPlayer.Name = name;
permission.UpdateNickname(player.UserIDString, name);
}
public void Rename(BasePlayer player, string name) {
name = (string.IsNullOrEmpty(name.Trim()) ? player.displayName : name);
var data = PlayersSettings[player.userID];
if (string.IsNullOrEmpty(data.OldName)) data.OldName = player.displayName;
data.NewName = name;
player.net.connection.username = name;
player.displayName = name;
player._name = name;
player.SendNetworkUpdateImmediate(false);
player.IPlayer.Name = name;
permission.UpdateNickname(player.UserIDString, name);
}
[ChatCommand("name")]
void cmdChangeName(BasePlayer player, string command, string[] args) {
if (!permission.UserHasPermission(player.UserIDString, config.Permission)) return;
if (args == null || args.Length <= 0) return;
if (!PlayersSettings.ContainsKey(player.userID)) PlayersSettings.Add(player.userID, new PlayerSettingName());
var data = PlayersSettings[player.userID];
if (args[0] == "back" && args.Length == 1) {
if (string.IsNullOrEmpty(data.OldName)) {
SendReply(player, "У Вас <color=#00ff7f>не указано</color> старое имя, или оно пустое.ВЫ не можете вернуть его");
return;
}
Rename(player, data.OldName);
SendReply(player, $"Ваше имя успешно установлено на <color=#00ff7f>{player.displayName}</color>");
return;
}
var name = string.Join(" ", args);
Rename(player, name);
SendReply(player, $"Ваше имя успешно установлено на <color=#00ff7f>{player.displayName}</color>");
}
}
}