C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
namespace Oxide.Plugins
{
[Info("StructureGrades", "Wulf/lukespragg", "1.0.0", ResourceId = 1511)]
[Description("Limits which structure grades players can build")]
public class StructureGrades : RustPlugin
{
// Do NOT edit this file, instead edit StructureGrades.json in oxide/config and StructureGrades.en.json in the oxide/lang directory,
// or create a new language file for another language using the 'en' file as a default.#region Initialization
void Init()
{
var grades = new List<string>();
foreach (var grade in Enum.GetNames(typeof(BuildingGrade.Enum)))
{
if (grade.Equals("None") || grade.Equals("Count")) continue;
grades.Add(grade);
// Permissions
permission.RegisterPermission($"{Title}.{grade}", this);
// Configuration
Config[grade] = GetConfig(grade, true);
SaveConfig();
}
Puts("Allowed: " + string.Join(", ", grades.ToArray()));
lang.RegisterMessages(new Dictionary<string, string>
{
["NotAllowed"] = "<color=yellow>{0}</color> has been <color=red>disabled</color>"
}, this);
}
protected override void LoadDefaultConfig()
{
}
#endregion
object OnStructureUpgrade(BuildingBlock block, BasePlayer player, BuildingGrade.Enum gradeEnum)
{
var grade = gradeEnum.ToString();
if ((bool)Config[grade] || IsAllowed(player.UserIDString, $"{Title}.{grade}")) return null;
PrintToChat(player, Lang("NotAllowed", player.UserIDString, grade));
return true;
}
#region Helpers
T GetConfig<T>(string name, T defaultValue) => Config[name] == null ? defaultValue : (T)Convert.ChangeType(Config[name], typeof(T));
string Lang(string key, string id = null, params object[] args) => string.Format(lang.GetMessage(key, this, id), args);
bool IsAllowed(string id, string perm) => permission.UserHasPermission(id, perm);
#endregion
}
}