C#:
using System.Collections.Generic;
using Oxide.Core;
using Oxide.Core.Plugins;
using UnityEngine;
namespace Oxide.Plugins
{
[Info("Supply Signal Rewards", "Banan", "1.0.0")]
[Description("Gives players a random reward when they throw a supply signal.")]
public class SupplySignalRewards : CovalencePlugin
{
private const string PermissionUse = "supplysignalrewards.use";
private PluginConfig config;
private Dictionary<string, float> playerCooldowns = new Dictionary<string, float>();
private class PluginConfig
{
public bool EnableMessages { get; set; } = true;
public float RewardCooldown { get; set; } = 300f;
public List<RewardItem> Rewards { get; set; } = new List<RewardItem>
{
new RewardItem("scrap", 100, 500),
new RewardItem("rifle.ak", 1, 1),
new RewardItem("explosive.timed", 2, 5)
};
}
private class RewardItem
{
public string Shortname { get; set; }
public int MinAmount { get; set; }
public int MaxAmount { get; set; }
public RewardItem(string shortname, int min, int max)
{
Shortname = shortname;
MinAmount = min;
MaxAmount = max;
}
}
protected override void LoadConfig()
{
base.LoadConfig();
try
{
config = Config.ReadObject<PluginConfig>();
SaveConfig();
}
catch
{
PrintWarning("Invalid config file, loading default settings.");
LoadDefaultConfig();
}
}
protected override void LoadDefaultConfig()
{
config = new PluginConfig();
SaveConfig();
}
protected override void SaveConfig() => Config.WriteObject(config);
private void Init()
{
permission.RegisterPermission(PermissionUse, this);
}
private void OnEntitySpawned(BaseEntity entity)
{
if (entity == null || entity.ShortPrefabName != "grenade.supplysignal.deployed") return;
BasePlayer player = entity.creatorEntity as BasePlayer;
if (player == null) return;
if (!permission.UserHasPermission(player.UserIDString, PermissionUse))
{
return;
}
if (playerCooldowns.ContainsKey(player.UserIDString) && Time.realtimeSinceStartup - playerCooldowns[player.UserIDString] < config.RewardCooldown)
{
player.ChatMessage("[Rewards] You must wait before using another supply signal.");
return;
}
playerCooldowns[player.UserIDString] = Time.realtimeSinceStartup;
GiveRandomReward(player);
}
private void GiveRandomReward(BasePlayer player)
{
RewardItem reward = config.Rewards[UnityEngine.Random.Range(0, config.Rewards.Count)];
int amount = UnityEngine.Random.Range(reward.MinAmount, reward.MaxAmount + 1);
var item = ItemManager.CreateByName(reward.Shortname, amount);
if (item != null)
{
player.inventory.GiveItem(item);
}
string itemName = ItemManager.FindItemDefinition(reward.Shortname)?.displayName.translated ?? reward.Shortname;
if (config.EnableMessages)
{
player.ChatMessage($"Congratulations!\nYou received: {amount}x {itemName}");
}
}
}
}