C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
namespace Oxide.Plugins
{
[Info("Instant Mixing Table", "MJSU", "1.0.0")]
[Description("Allows players to instantly mix teas")]
internal class InstantMixingTable : RustPlugin
{
#region Class Fields
private PluginConfig _pluginConfig; //Plugin Config
private const string PermBase = "instantmixingtable.";
private const string UsePermission = PermBase + "use";
#endregion
#region Setup & Loading
private void Init()
{
foreach (string perm in _pluginConfig.PlayerDurationMultiplier.Keys)
{
if (!perm.StartsWith(PermBase))
{
PrintWarning($"Permissions {perm} was skipped.Permissions must start with ${PermBase}");
continue;
}
permission.RegisterPermission(perm, this);
}
}
protected override void LoadDefaultConfig()
{
PrintWarning("Loading Default Config");
}
protected override void LoadConfig()
{
base.LoadConfig();
Config.Settings.DefaultValueHandling = DefaultValueHandling.Populate;
_pluginConfig = AdditionalConfig(Config.ReadObject<PluginConfig>());
Config.WriteObject(_pluginConfig);
}
private PluginConfig AdditionalConfig(PluginConfig config)
{
config.PlayerDurationMultiplier = config.PlayerDurationMultiplier ?? new Hash<string, float>
{
[UsePermission] = 0f,
};
return config;
}
#endregion
#region Hooks
private void OnMixingTableToggle(MixingTable table, BasePlayer player)
{
if (table.IsOn())
{
return;
}
NextTick(() =>
{
foreach (KeyValuePair<string,float> permSpeed in _pluginConfig.PlayerDurationMultiplier.OrderBy(p => p.Value))
{
if (HasPermission(player, permSpeed.Key))
{
table.RemainingMixTime *= permSpeed.Value;
table.TotalMixTime *= permSpeed.Value;
table.SendNetworkUpdateImmediate();
if (table.RemainingMixTime < 1f)
{
table.CancelInvoke(table.TickMix);
table.Invoke(table.TickMix, table.RemainingMixTime);
}
return;
}
}
});
}
#endregion
#region Helper Methods
private bool HasPermission(BasePlayer player, string perm) => permission.UserHasPermission(player.UserIDString, perm);
#endregion
#region Classes
private class PluginConfig
{
[JsonProperty(PropertyName = "Player Duration Multiplier (0 = instant, 1 = normal speed)")]
public Hash<string, float> PlayerDurationMultiplier { get; set; }
}
#endregion
}
}