It would be very nice if it is possible to not loot the admins whose steamid we have added to the config.
Users written to config are not affected
using Newtonsoft.Json;
using Oxide.Core.Configuration;
using System;
using System.Collections.Generic;
namespace Oxide.Plugins
{
[Info("Admin No Loot", "Dana", "0.1.3")]
[Description("Protects admins' corpses and bodies from being looted.")]
public class AdminNoLoot : RustPlugin
{
private PluginConfig _pluginConfig;
public const string PermissionBypass = "adminnoloot.bypass";
#region Hooks
protected override void LoadDefaultConfig()
{
PrintWarning("Loading Default Config");
}
protected override void LoadConfig()
{
var configPath = $"{Manager.ConfigPath}/{Name}.json";
var newConfig = new DynamicConfigFile(configPath);
if (!newConfig.Exists())
{
LoadDefaultConfig();
newConfig.Save();
}
try
{
newConfig.Load();
}
catch (Exception ex)
{
RaiseError("Failed to load config file (is the config file corrupt?) (" + ex.Message + ")");
return;
}
newConfig.Settings.DefaultValueHandling = DefaultValueHandling.Populate;
_pluginConfig = newConfig.ReadObject<PluginConfig>();
if (_pluginConfig.Config == null)
{
_pluginConfig.Config = new AdminNoLootConfig
{
ShowWarning = true,
ImmuneSteamIDs = new List<string>()
{
"76561############", // First SteamID
"76561############" // Second SteamID
}
};
}
newConfig.WriteObject(_pluginConfig);
PrintWarning("Config Loaded");
}
private void OnServerInitialized()
{
permission.RegisterPermission(PermissionBypass, this);
}
protected override void LoadDefaultMessages()
{
lang.RegisterMessages(new Dictionary<string, string>
{
{ MessageManager.NoCorpseLootPermission, "You can't loot Admin corpse!" },
{ MessageManager.NoBagLootPermission, "You can't loot Admin bag!" },
{ MessageManager.NoBodyLootPermission, "You can't loot Admin body!" },
}, this);
}
object CanLootPlayer(BasePlayer target, BasePlayer looter)
{
if (target.IsAdmin && target.userID != looter.userID && !permission.UserHasPermission(looter.UserIDString, PermissionBypass) && !_pluginConfig.Config.ImmuneSteamIDs.Contains(target.UserIDString))
{
if (_pluginConfig.Config.ShowWarning)
looter.ChatMessage(lang.GetMessage(MessageManager.NoBodyLootPermission, this, looter.UserIDString));
return false;
}
return null;
}
object CanLootEntity(BasePlayer player, DroppedItemContainer container)
{
var target = BasePlayer.FindAwakeOrSleeping(container.playerSteamID.ToString());
if (target == null)
return null;
if (target.IsAdmin && target.userID != player.userID && !permission.UserHasPermission(player.UserIDString, PermissionBypass) && !_pluginConfig.Config.ImmuneSteamIDs.Contains(target.UserIDString))
{
if (_pluginConfig.Config.ShowWarning)
player.ChatMessage(lang.GetMessage(MessageManager.NoBagLootPermission, this, player.UserIDString));
return false;
}
return null;
}
object CanLootEntity(BasePlayer player, LootableCorpse corpse)
{
var target = BasePlayer.FindAwakeOrSleeping(corpse.playerSteamID.ToString());
if (target == null)
return null;
if (target.IsAdmin && target.userID != player.userID && !permission.UserHasPermission(player.UserIDString, PermissionBypass) && !_pluginConfig.Config.ImmuneSteamIDs.Contains(target.UserIDString))
{
if (_pluginConfig.Config.ShowWarning)
player.ChatMessage(lang.GetMessage(MessageManager.NoCorpseLootPermission, this, player.UserIDString));
return false;
}
return null;
}
#endregion Hooks
#region Classes
public class MessageManager
{
public const string NoCorpseLootPermission = "NoCorpseLootPermission";
public const string NoBagLootPermission = "NoBagLootPermission";
public const string NoBodyLootPermission = "NoBodyLootPermission";
}
private class PluginConfig
{
public AdminNoLootConfig Config { get; set; }
}
private class AdminNoLootConfig
{
[JsonProperty(PropertyName = "Warning - Enabled")]
public bool ShowWarning { get; set; }
[JsonProperty(PropertyName = "Immune SteamIDs")]
public List<string> ImmuneSteamIDs { get; set; }
}
#endregion Classes
}
}
you can use if you want to use