Force wipe update notice.Fixed

Hi there CaseMan!

It seem your plugin wil break this force wipe (Error while compiling: PreventLooting.cs(799,115): error CS1503: Argument `#1' cannot convert `NetworkableId' expression to type `ulong')

Do you have a version ready we might be able to test? ^^

This plugin looks abandoned 

Anyone have the code fix for it?

KingSizeKevin

This plugin looks abandoned 

Anyone have the code fix for it?

The plugin is updated, have it.
It will come here at some point from someone ^^

I was able to fix it manually myself, very easy.  Just add .Value after every .Net.ID so it looks like this net.ID.Value

if anyone could hook me up with the updated version that would be really appreciated

using Oxide.Core.Plugins;
using System;
using System.Collections.Generic;
using Oxide.Core;
using Oxide.Game.Rust;
using UnityEngine;
using System.Reflection;
using Oxide.Core.Libraries.Covalence;
using System.Linq;

namespace Oxide.Plugins
{
    [Info("PreventLooting", "CaseMan", "1.12.1", ResourceId = 2469)]
    [Description("Prevent looting by other players")]

    class PreventLooting : RustPlugin
    {	
		#region Variables
	    [PluginReference] Plugin Friends;
		[PluginReference] Plugin ZoneManager;	    
		
		bool UsePermission;
		bool UseFriendsAPI;
		bool UseTeams;
		bool AdminCanLoot;
		bool CanAuthCB;
		bool CanLootPl;
		bool CanLootCorpse;
		bool CanLootEnt;
		bool CanLootBackpack;
		bool CanLootBackpackPlugin;
		bool CanPickup;
		bool CanOvenToggle;
		bool IncludeZoneMode;
		bool UseZoneManager;
		bool UseExcludeEntities;
		bool UseCupboard;
		List<object> UseCupboardInclude;
		bool UseOnlyInCupboardRange;		
		List<object> UseOnlyInCupboardRangeInclude;
		bool WipeDetected = false;
		List<object> ZoneID;
		List<object> ExcludeEntities;
		string PLPerm = "preventlooting.use";
		string PlayerPerm = "preventlooting.player";
		string CorpsePerm = "preventlooting.corpse";
		string BackpackPerm = "preventlooting.backpack";
		string StoragePerm = "preventlooting.storage";
		string AdmPerm = "preventlooting.admin";
	
		class StoredData
        {
            public Dictionary<ulong, EntityData> Data = new Dictionary<ulong, EntityData>();
            public StoredData()
            {
            }
        }

        class EntityData
        {
			public List<ulong> Share = new List<ulong>();
			public Dictionary<string, List<ulong>> Quarry = new Dictionary<string, List<ulong>>();
			public EntityData(){}
        }
		
		StoredData storedData;
		
		#endregion
		#region Initialization
		void Init()
        {
            LoadDefaultConfig();
			permission.RegisterPermission(PLPerm, this);
			permission.RegisterPermission(AdmPerm, this);
			permission.RegisterPermission(PlayerPerm, this);
			permission.RegisterPermission(CorpsePerm, this);
			permission.RegisterPermission(BackpackPerm, this);
			permission.RegisterPermission(StoragePerm, this);
            storedData = Interface.Oxide.DataFileSystem.ReadObject<StoredData>("PreventLooting");
			
        }
		void OnServerInitialized()
		{
			if(WipeDetected)		
			{
				PrintWarning("Wipe detected! Clearing all share data!");
				storedData.Data.Clear();
				Interface.Oxide.DataFileSystem.WriteObject("PreventLooting", storedData);
			}	
		}	
		void OnServerSave() => Interface.Oxide.DataFileSystem.WriteObject("PreventLooting", storedData);
		void Unload() => Interface.Oxide.DataFileSystem.WriteObject("PreventLooting", storedData);
		void OnNewSave(string filename) => WipeDetected = true;
		#endregion
		#region Configuration
        protected override void LoadDefaultConfig()
        {
			Config["UsePermission"] = UsePermission = GetConfig("UsePermission", false);
			Config["UseFriendsAPI"] = UseFriendsAPI = GetConfig("UseFriendsAPI", true);
			Config["UseTeams"] = UseTeams = GetConfig("UseTeams", true);
			Config["AdminCanLoot"] = AdminCanLoot = GetConfig("AdminCanLoot", true);
			Config["CanAuthorizeCupboard"] = CanAuthCB = GetConfig("CanAuthorizeCupboard", true);
			Config["CanLootPlayer"] = CanLootPl = GetConfig("CanLootPlayer", false);
			Config["CanLootCorpse"] = CanLootCorpse = GetConfig("CanLootCorpse", false);
			Config["CanLootEntity"] = CanLootEnt = GetConfig("CanLootEntity", false);
			Config["CanLootBackpack"] = CanLootBackpack = GetConfig("CanLootBackpack", false);
			Config["CanLootBackpackPlugin"] = CanLootBackpackPlugin = GetConfig("CanLootBackpackPlugin", false);
			Config["CanPickup"] = CanPickup = GetConfig("CanPickup", false);
			Config["CanOvenToggle"] = CanOvenToggle = GetConfig("CanOvenToggle", false);
			Config["UseZoneManager"] = UseZoneManager = GetConfig("UseZoneManager", false);
			Config["ZoneManagerIncludeMode"] = IncludeZoneMode = GetConfig("ZoneManagerIncludeMode", false);
			Config["ZoneID"] = ZoneID = GetConfig("ZoneID", new List<object>{"12345678"});
			Config["UseExcludeEntities"] = UseExcludeEntities = GetConfig("UseExcludeEntities", true);
			Config["ExcludeEntities"] = ExcludeEntities = GetConfig("ExcludeEntities", new List<object>{"mailbox.deployed"});
			Config["UseCupboard"] = UseCupboard = GetConfig("UseCupboard", false);
			Config["UseCupboardInclude"] = UseCupboardInclude = GetConfig("UseCupboardInclude", new List<object>{"storage"});
			Config["UseOnlyInCupboardRange"] = UseOnlyInCupboardRange = GetConfig("UseOnlyInCupboardRange", false);
			Config["UseOnlyInCupboardRangeInclude"] = UseOnlyInCupboardRangeInclude = GetConfig("UseOnlyInCupboardRangeInclude", new List<object>{"storage"});

			SaveConfig();
        }		
		#endregion		
		#region Localization
		
        void LoadDefaultMessages()
        {
            lang.RegisterMessages(new Dictionary<string, string>
            {
				["OnTryLootPlayer"] = "You can not loot players!",
				["OnTryLootCorpse"] = "You can not loot corpses of players!",
				["OnTryLootEntity"] = "You can not use this entity because it is not yours!",
				["OnTryLootBackpack"] = "You can not open this backpack because it is not yours!",
				["OnTryPickup"] = "You can not pickup this because it is not yours!",
				["NoAccess"] = "This entity is not yours!",
				["PlayerNotFound"] = "Player {0} not found!",
				["ShareAll"] = "All players were given permission to use this entity!",
				["SharePlayer"] = "The player {0} was given permission to use this entity!",
				["NoShare"] = "No permissions have been found for this entity!",
				["ListShare"] = "List of permissions for this entity:",
				["EntityNotFound"] = "You are not standing in front of the entity or away from it!",
				["HasShareAllList"] = "All players are allowed to use this entity!",
				["ShareClear"] = "All permissions for this entity have been deleted!",
				["HasShareAll"] = "All players already have permission to use this entity!",
				["HasSharePlayer"] = "Player {0} already has permission to use this entity!",
				["HasUnShareAll"] = "Permission to use this entity has not been issued to all players!",
				["HasUnSharePlayer"] = "Player {0} has not been granted permission to use this entity!",
				["WasUnShareAll"] = "All players have been removed permission for this entity!",
				["WasUnSharePlayer"] = "The permission to use this entity has been removed from player {0}!",
				["MultiplePlayerFind"]="Multiple players found:",
				["OwnEntity"]="This object is yours!",
				["NoPermission"]="You do not have enough rights to execute this command!",
				["EntPrevent"] = "This entity is protected!",
				["EntNoPrevent"] = "This entity is not protected!",	
				["OnTryOnOff"] = "You can not turn on or off this entity because it is not yours!",
				["OnTryAuthCB"] = "You can not authorize in cupboard because it is not yours!",
            }, this);
			lang.RegisterMessages(new Dictionary<string, string>
            {
                ["OnTryLootPlayer"] = "Вы не можете обворовывать игроков!",
                ["OnTryLootCorpse"] = "Вы не можете обворовывать трупы игроков!",
                ["OnTryLootEntity"] = "Вы не можете использовать этот объект, потому что он вам не принадлежит!",
				["OnTryLootBackpack"] = "Вы не можете открыть чужой рюкзак!",
				["OnTryPickup"] = "Вы не можете взять чужое!",
				["NoAccess"]="Этот объект не принадлежит вам!",
				["PlayerNotFound"]="Игрок с именем {0} не найден!",
				["ShareAll"]="Всем игрокам было выдано разрешение на использование этого объекта!",
				["SharePlayer"]="Игроку {0} было выдано разрешение на использование этого объекта!",
				["NoShare"]="Не найдено разрешений для этого объекта!",
				["ListShare"]="Список разрешений для этого объекта:",
				["EntityNotFound"]="Вы стоите не перед хранилищем или далеко от него!",
				["HasShareAllList"]="Всем игрокам разрешено использовать этот объект!",
				["ShareClear"]="Все разрешения для этого объекта были удалены!",
				["HasShareAll"]="Все игроки уже имеют разрешение на использование этого объекта!",
				["HasSharePlayer"]="Игрок {0} уже имеет разрешение на использование этого объекта!",
				["HasUnShareAll"]="Разрешение на использование этого объекта не было выдано для всех игроков!",
				["HasUnSharePlayer"]="Игроку {0} не было выдано разрешение на использование этого объекта!",	
				["WasUnShareAll"]="Всем игрокам было удалено разрешение на использование этого объекта!",
				["WasUnSharePlayer"]="Игроку {0} было удалено разрешение на использование этого объекта!",
				["MultiplePlayerFind"]="Найдено несколько игроков:",
				["OwnEntity"]="Этот объект принадлежит вам!",
				["NoPermission"]="У вас недостаточно прав для выполнения этой команды!",
				["EntPrevent"]="Этот предмет защищен от воровства!",
				["EntNoPrevent"]="Этот предмет не защищен от воровства!",
				["OnTryOnOff"] = "Вы не можете включить или выключить этот объект, потому что он вам не принадлежит!",
				["OnTryAuthCB"] = "Вы не можете авторизоваться в чужом шкафу, потому что он вам не принадлежит!",
            }, this, "ru");

        }
        #endregion
		#region Hooks
		private object CanLootEntity(BasePlayer player, LootableCorpse corpse)
		{
			if(corpse == null || player == null) return null;
			if(CanLootCorpse) return null;
			if(CheckHelper(player, corpse as BaseEntity)) return null;
			if(IsFriend(corpse.playerSteamID, player.userID)) return null;
			if(UsePermission && !permission.UserHasPermission(corpse.playerSteamID.ToString(), CorpsePerm)) return null;
			if(corpse.playerSteamID < 76561197960265728L || player.userID == corpse.playerSteamID) return null;
			if(UseCupboard || UseOnlyInCupboardRange)
					if(CheckAuthCupboard(corpse, player)) return null;
			SendReply(player, lang.GetMessage("OnTryLootCorpse", this, player.UserIDString));	
			return true;
		}		
		private object CanLootEntity(BasePlayer player, DroppedItemContainer container)
		{
			if(container == null || player == null) return null;
			if(CanLootBackpack && CanLootBackpackPlugin) return null;
			if(CheckHelper(player, container as BaseEntity)) return null;
			if(((container as BaseEntity).name.Contains("item_drop_backpack") && !CanLootBackpack) || ((container as BaseEntity).name.Contains("droppedbackpack") && !CanLootBackpackPlugin))
			{
				if(IsFriend(container.playerSteamID, player.userID)) return null;
				if(UsePermission && !permission.UserHasPermission(container.playerSteamID.ToString(), BackpackPerm)) return null;
				if(container.playerSteamID < 76561197960265728L || player.userID == container.playerSteamID) return null;
				if(UseCupboard || UseOnlyInCupboardRange)
					if(CheckAuthCupboard(container, player)) return null;
				SendReply(player, lang.GetMessage("OnTryLootBackpack", this, player.UserIDString));	
				return true;
			}
			return null;
		}
		private object CanLootPlayer(BasePlayer target, BasePlayer player)
		{
			if(target == null || player == null) return null;
			if(CanLootPl) return null;
			if(CheckHelper(player, target as BaseEntity)) return null;
			if(IsFriend(target.userID, player.userID)) return null;
			if(UsePermission && !permission.UserHasPermission(target.userID.ToString(), PlayerPerm)) return null;
			if(player.userID == target.userID) return null;
			if(UseCupboard || UseOnlyInCupboardRange)
					if(CheckAuthCupboard(target, player)) return null;
			SendReply(player, lang.GetMessage("OnTryLootPlayer", this, player.UserIDString));
			return false;
		}	
		private bool CheckHelper(BasePlayer player, BaseEntity entity)
		{
			if(entity == null || player == null) return true;
			if(player.IsAdmin && AdminCanLoot) return true;
			if(permission.UserHasPermission(player.userID.ToString(), AdmPerm)) return true;
			if(UseZoneManager && ZoneManager != null)
			{
				if((string[])ZoneManager.Call("GetPlayerZoneIDs", player) != null)
				{					
					if(!IncludeZoneMode)
					{					
						foreach(var zoneID in ZoneID)
						{
							if((bool)ZoneManager.Call("isPlayerInZone", zoneID, player)) return true;				
						}
					}
					else
					{
						foreach(var zoneID in ZoneID)
						{
							if((bool)ZoneManager.Call("isPlayerInZone", zoneID, player)) return false;				
						}		
						return true;
					}
				}				
			}
			if(entity is SupplyDrop) return true;
			return false;
		}		
		private object CanLootEntity(BasePlayer player, StorageContainer container)
		{
			if(container == null || player == null) return null;
			if(CanLootEnt) return null;
			BaseEntity entity = container as BaseEntity;
			if(CheckHelper(player, entity)) return null;
			BaseEntity childentity = entity;
			entity = CheckParent(entity);
			if(entity.OwnerID == player.userID) return null;
			if(UsePermission && !permission.UserHasPermission(entity.OwnerID.ToString(), StoragePerm)) return null;	
			if(UseExcludeEntities)
			{
				if(ExcludeEntities.Contains(entity.ShortPrefabName)) return null;
			}			
			if(IsVendingOpen(player, entity) || IsDropBoxOpen(player, entity)) return null;
			if(IsFriend(entity.OwnerID, player.userID)) return null;
			if(storedData.Data.ContainsKey(entity.net.ID.Value))
			{
				if(childentity == entity)
				{				
					if(storedData.Data[entity.net.ID.Value].Share.Contains(player.userID) || storedData.Data[entity.net.ID.Value].Share.Contains(0)) return null;
				}
				else
				{
					if(storedData.Data[entity.net.ID.Value].Quarry.ContainsKey(childentity.ShortPrefabName))
						if(storedData.Data[entity.net.ID.Value].Quarry[childentity.ShortPrefabName].Contains(player.userID) || storedData.Data[entity.net.ID.Value].Quarry[childentity.ShortPrefabName].Contains(0)) return null;
				}	
			}
			if(entity.OwnerID != player.userID && entity.OwnerID != 0)
			{			
				if(UseCupboard || UseOnlyInCupboardRange)
					if(CheckAuthCupboard(entity, player)) return null;
				SendReply(player, lang.GetMessage("OnTryLootEntity", this, player.UserIDString));
				return false;	
			}
			return null;
		}
		private object OnOvenToggle(BaseOven oven, BasePlayer player)
		{
			if(oven == null || player == null) return null;
			if(CanOvenToggle) return null;
			BaseEntity entity = oven as BaseEntity;
			if(CheckHelper(player, entity)) return null;
			if(entity.OwnerID == player.userID) return null;
			if(entity.OwnerID != 0 && entity.OwnerID != player.userID && !IsFriend(entity.OwnerID, player.userID)) 
			{	
				if(UseCupboard || UseOnlyInCupboardRange)
					if(CheckAuthCupboard(entity, player)) return null;
				SendReply(player, lang.GetMessage("OnTryOnOff", this, player.UserIDString));
				return false;
			}	
			return null;
		}
		private object CanPickupEntity(BasePlayer player, BaseCombatEntity ent)
		{
			if(ent == null || player == null) return null;
			if(CanPickup) return null;
			BaseEntity entity = ent as BaseEntity;
			if(CheckHelper(player, entity)) return null;
			if(entity.OwnerID != 0 && entity.OwnerID != player.userID && !IsFriend(entity.OwnerID, player.userID)) 
			{	
				if(UseCupboard || UseOnlyInCupboardRange)
					if(CheckAuthCupboard(entity, player)) return null;
				SendReply(player, lang.GetMessage("OnTryPickup", this, player.UserIDString));
				return false;
			}	
			return null;
		}
		private object OnCupboardAuthorize(BuildingPrivlidge privilege, BasePlayer player)
		{
			if(CanAuthCB) return null;
			BaseEntity entity = privilege as BaseEntity;
			if(CheckHelper(player, entity)) return null;
			if(entity.OwnerID != 0 && entity.OwnerID != player.userID && !IsFriend(entity.OwnerID, player.userID)) 
			{	
				SendReply(player, lang.GetMessage("OnTryAuthCB", this, player.UserIDString));
				return false;
			}
			return null;
		}
		private BaseEntity CheckParent(BaseEntity entity)
		{
			if(entity.HasParent())
			{
				BaseEntity parententity = entity.GetParentEntity();
				if(parententity is MiningQuarry)	
				{
					entity.OwnerID=parententity.OwnerID;
					entity=parententity;
				}	
			}
			return entity;	
		}
		object CanAdministerVending(BasePlayer player, VendingMachine machine)
		{
			if(machine == null || player == null) return null;
			if(CanLootEnt) return null;
			BaseEntity entity = machine as BaseEntity;
			if(CheckHelper(player, entity)) return null;
			if(UsePermission && !permission.UserHasPermission(entity.OwnerID.ToString(), StoragePerm)) return null;	
			if(entity.OwnerID == player.userID) return null;
			if(UseExcludeEntities)
			{
				if(ExcludeEntities.Contains(entity.ShortPrefabName)) return null;
			}		
			if(IsFriend(entity.OwnerID, player.userID)) return null;
			if(entity.OwnerID != player.userID && entity.OwnerID != 0)
			{			
				if(UseCupboard || UseOnlyInCupboardRange)
					if(CheckAuthCupboard(entity, player)) return null;
				SendReply(player, lang.GetMessage("OnTryLootEntity", this, player.UserIDString));
				return false;	
			}
			return null;
		}
		bool IsVendingOpen(BasePlayer player, BaseEntity entity)
		{
			if(entity is VendingMachine) 
			{	
				VendingMachine shopFront = entity as VendingMachine;
				if(shopFront.PlayerInfront(player)) return true;
				return false;	
			}
			return false;
		}
		bool IsDropBoxOpen(BasePlayer player, BaseEntity entity)
		{
			if(entity is DropBox) 
			{	
				DropBox dropboxFront = entity as DropBox;
				if(dropboxFront.PlayerInfront(player)) return true;
				return false;		
			}
			return false;
		}		
		bool IsFriend(ulong friendid, ulong playerid)
		{
			if(UseFriendsAPI && Friends != null)	
			{
				var fr = Friends.CallHook("AreFriends", friendid, playerid);
                if (fr != null && (bool)fr) return true;
			}
			if(UseTeams)
			{
				BasePlayer player = BasePlayer.FindByID(playerid);
				if(player == null) return false;
				if (player.currentTeam != (long)0)
				{
					RelationshipManager.PlayerTeam playerTeam = RelationshipManager.ServerInstance.FindTeam(player.currentTeam);
					if(playerTeam == null) return false;
					if(playerTeam.members.Contains(friendid)) return true;	
				}		
			}
			return false;
		}		
		bool FindEntityFromRay(BasePlayer player, out object success)
        {
			success = null;
			RaycastHit hit;
			if (!Physics.Raycast(player.eyes.HeadRay(), out hit, 2.2f))
				return false;
			success = hit.GetEntity();
			return true; 
        }
		bool CheckAuthCupboard(object ent, BasePlayer player)
		{		
			BaseEntity entity = ent as BaseEntity;
			ulong ownerid = 0;
			string type = "";
			if(ent is BaseCombatEntity)
				if((ent as BaseCombatEntity).pickup.enabled) type = "pickup";
			if(ent is StorageContainer || ent is MiningQuarry)
			{
				ownerid = entity.OwnerID;
				type = "storage";
			}				
			else if(ent is BasePlayer)
			{
				ownerid = (ent as BasePlayer).userID;
				type = "player";
			}				
			else if(ent is LootableCorpse)
			{
				ownerid = (ent as LootableCorpse).playerSteamID;
				type = "corpse";
			}			
			else if(ent is DroppedItemContainer)
			{
				ownerid = (ent as DroppedItemContainer).playerSteamID;
				if(entity.name.Contains("item_drop_backpack")) type = "backpack";
				else if (entity.name.Contains("droppedbackpack")) type = "backpackplugin";
			}				
			BuildingPrivlidge bprev = player.GetBuildingPrivilege(new OBB(entity.transform.position, entity.transform.rotation, entity.bounds));
			if(UseOnlyInCupboardRangeInclude.Contains(type) && bprev == null)	
			{				
				if(UseOnlyInCupboardRange) return true;
				if(!UseOnlyInCupboardRange) return false;
			}
			if(UseCupboard && UseCupboardInclude.Contains(type) && bprev != null)	
			{
				if(ownerid != 0)
				{
					if(bprev.IsAuthed(player) && bprev.authorizedPlayers.Any<ProtoBuf.PlayerNameID>((ProtoBuf.PlayerNameID x) => x.userid == ownerid)) return true;
				}
				else
				{
					if(bprev.IsAuthed(player)) return true;
				}				
			}								
			return false;
		}
		private IPlayer CheckPlayer(BasePlayer player, string[] args)
		{
			var playerlist = covalence.Players.FindPlayers(args[0]).ToList();
			if(playerlist.Count > 1)
			{
				
				var message="<color=#FF0000>"+lang.GetMessage("MultiplePlayerFind", this, player.UserIDString)+"</color>\n";
				int i=0;
				foreach(var pl in playerlist)
				{
					i++;
					message+= string.Format("{0}. <color=#FFA500>{1}</color> ({2})\n\r", i, pl.Name, pl.Id);
				}
				SendReply(player, message);
                return null;
            }
			var player0 = covalence.Players.FindPlayer(args[0]);
			if(player0==null) 
			{
				SendReply(player, string.Format(lang.GetMessage("PlayerNotFound", this, player.UserIDString), "<color=#FFA500>"+args[0]+"</color>")); 
				return null;
			}
			return player0;
		}	
		#endregion
		#region Commands	
		[ChatCommand("share")]
        void Share(BasePlayer player, string command, string[] args)
        {	
		    if (UsePermission && !permission.UserHasPermission(player.UserIDString, PLPerm)) 
			{
				SendReply(player, lang.GetMessage("NoPermission", this, player.UserIDString));
				return;
			}
			IPlayer player0 = null;
			ulong ID;							
			if (args == null || args.Length <= 0) ID=0;
			else
			{	
				player0 = CheckPlayer(player, args);
				if(player0 == null) return;
				ID=Convert.ToUInt64(player0.Id);
			}
			object success;
			if (FindEntityFromRay(player, out success))
			{
				if (success is StorageContainer)
				{	
					BaseEntity entity = success as BaseEntity;
					BaseEntity childentity = entity;
					entity = CheckParent(entity);
					if(entity.OwnerID == ID)
					{
						SendReply(player, lang.GetMessage("OwnEntity", this, player.UserIDString));
						return;
					}				
					if(entity.OwnerID != player.userID && (!player.IsAdmin || (player.IsAdmin && !AdminCanLoot)))
					{
						SendReply(player, lang.GetMessage("NoAccess", this, player.UserIDString));
						return;
					}
					if(!storedData.Data.ContainsKey(entity.net.ID.Value)) 
					{
						var data = new EntityData();
						storedData.Data.Add(entity.net.ID.Value, data);
						if(childentity != entity) 
						{
							data.Quarry = new Dictionary<string, List<ulong>>();
							data.Quarry.Add(childentity.ShortPrefabName, new List<ulong>{ID});
						}
						else
						{
							data.Share = new List<ulong>();							
							data.Share.Add(ID);
						}
						if(ID==0) SendReply(player, lang.GetMessage("ShareAll", this, player.UserIDString));
						else SendReply(player, string.Format(lang.GetMessage("SharePlayer", this, player.UserIDString), "<color=#FFA500>"+player0.Name+"</color>"));
					}	
					else 
					{
						if(childentity == entity)
						{
							if(storedData.Data[entity.net.ID.Value].Share.Contains(ID))
							{
								if(ID==0) SendReply(player, lang.GetMessage("HasShareAll", this, player.UserIDString));
								else SendReply(player, string.Format(lang.GetMessage("HasSharePlayer", this, player.UserIDString), "<color=#FFA500>"+player0.Name+"</color>"));
							}						
							else
							{
								storedData.Data[entity.net.ID.Value].Share.Add(ID);
								if(ID==0) SendReply(player, lang.GetMessage("ShareAll", this, player.UserIDString));
								else SendReply(player, string.Format(lang.GetMessage("SharePlayer", this, player.UserIDString), "<color=#FFA500>"+player0.Name+"</color>"));
							}
						}
						else
						{
							if(!storedData.Data[entity.net.ID.Value].Quarry.ContainsKey(childentity.ShortPrefabName)) storedData.Data[entity.net.ID.Value].Quarry.Add(childentity.ShortPrefabName, new List<ulong>{});
							if(storedData.Data[entity.net.ID.Value].Quarry[childentity.ShortPrefabName].Contains(ID))
							{
								if(ID==0) SendReply(player, lang.GetMessage("HasShareAll", this, player.UserIDString));
								else SendReply(player, string.Format(lang.GetMessage("HasSharePlayer", this, player.UserIDString), "<color=#FFA500>"+player0.Name+"</color>"));
							}						
							else
							{
								if(storedData.Data[entity.net.ID.Value].Quarry.ContainsKey(childentity.ShortPrefabName)) storedData.Data[entity.net.ID.Value].Quarry[childentity.ShortPrefabName].Add(ID);
								else storedData.Data[entity.net.ID.Value].Quarry.Add(childentity.ShortPrefabName, new List<ulong>{ID});
								if(ID==0) SendReply(player, lang.GetMessage("ShareAll", this, player.UserIDString));
								else SendReply(player, string.Format(lang.GetMessage("SharePlayer", this, player.UserIDString), "<color=#FFA500>"+player0.Name+"</color>"));
							}
						}	
					}
				}
				else
				{
					SendReply(player, lang.GetMessage("EntityNotFound", this, player.UserIDString));
				}	
		    }
			else
			{
				SendReply(player, lang.GetMessage("EntityNotFound", this, player.UserIDString));
			}	
        }		
        [ChatCommand("unshare")]
        void Unshare(BasePlayer player, string command, string[] args)
        {
		    if (UsePermission && !permission.UserHasPermission(player.UserIDString, PLPerm)) 
			{
				SendReply(player, lang.GetMessage("NoPermission", this, player.UserIDString));
				return;
			}
			IPlayer player0 = null;
			ulong ID;							
			if (args == null || args.Length <= 0) ID=0;
			else
			{	
				player0 = CheckPlayer(player, args);
				if(player0 == null) return;
				ID=Convert.ToUInt64(player0.Id);
			}
			object success;
			if (FindEntityFromRay(player, out success))			
			{
				if (success is StorageContainer)
				{
					BaseEntity entity = success as BaseEntity;
					BaseEntity childentity = entity;
					entity = CheckParent(entity);
					if(entity.OwnerID != player.userID && (!player.IsAdmin || (player.IsAdmin &&!AdminCanLoot)))
					{
						SendReply(player, lang.GetMessage("NoAccess", this, player.UserIDString));
						return;
					}
					if(!storedData.Data.ContainsKey(entity.net.ID.Value)) 
					{
						SendReply(player, lang.GetMessage("NoShare", this, player.UserIDString));
					}	
					else 
					{
						if(childentity == entity)
						{
							if(!storedData.Data[entity.net.ID.Value].Share.Contains(ID))
							{
								if(ID==0) SendReply(player, lang.GetMessage("HasUnShareAll", this, player.UserIDString));	
								else SendReply(player, string.Format(lang.GetMessage("HasUnSharePlayer", this, player.UserIDString), "<color=#FFA500>"+player0.Name+"</color>"));	
							}
							else
							{
								storedData.Data[entity.net.ID.Value].Share.Remove(ID);
								if(storedData.Data[entity.net.ID.Value].Share.Count==0) storedData.Data.Remove(entity.net.ID.Value);
								if(ID==0) SendReply(player, lang.GetMessage("WasUnShareAll", this, player.UserIDString));
								else SendReply(player, string.Format(lang.GetMessage("WasUnSharePlayer", this, player.UserIDString), "<color=#FFA500>"+player0.Name+"</color>"));
							}
						}
						else
						{
							if(!storedData.Data[entity.net.ID.Value].Quarry.ContainsKey(childentity.ShortPrefabName)) 
							{
								SendReply(player, lang.GetMessage("NoShare", this, player.UserIDString));
								return;
							}
							if(!storedData.Data[entity.net.ID.Value].Quarry[childentity.ShortPrefabName].Contains(ID))
							{
								if(ID==0) SendReply(player, lang.GetMessage("HasUnShareAll", this, player.UserIDString));	
								else SendReply(player, string.Format(lang.GetMessage("HasUnSharePlayer", this, player.UserIDString), "<color=#FFA500>"+player0.Name+"</color>"));	
							}
							else
							{
								storedData.Data[entity.net.ID.Value].Quarry[childentity.ShortPrefabName].Remove(ID);
								if(storedData.Data[entity.net.ID.Value].Quarry[childentity.ShortPrefabName].Count==0) storedData.Data[entity.net.ID.Value].Quarry.Remove(childentity.ShortPrefabName);
								if(ID==0) SendReply(player, lang.GetMessage("WasUnShareAll", this, player.UserIDString));
								else SendReply(player, string.Format(lang.GetMessage("WasUnSharePlayer", this, player.UserIDString), "<color=#FFA500>"+player0.Name+"</color>"));
							}
						}
						Sharelist(player);
					}
				}
				else
				{
					SendReply(player, lang.GetMessage("EntityNotFound", this, player.UserIDString));
				}	
			}	
			else
			{
				SendReply(player, lang.GetMessage("EntityNotFound", this, player.UserIDString));
			}			
		}		
		[ChatCommand("sharelist")]
        void Sharelist(BasePlayer player)
        {
		    if (UsePermission && !permission.UserHasPermission(player.UserIDString, PLPerm)) 
			{
				SendReply(player, lang.GetMessage("NoPermission", this, player.UserIDString));
				return;
			}			
			object success;
			if (FindEntityFromRay(player, out success))			
			{			
				if (success is StorageContainer)
				{
					BaseEntity entity = success as BaseEntity;
					BaseEntity childentity = entity;
					entity = CheckParent(entity);
					if(entity.OwnerID != player.userID && (!player.IsAdmin || (player.IsAdmin &&!AdminCanLoot)))
					{
						SendReply(player, lang.GetMessage("NoAccess", this, player.UserIDString));
						return;
					}
					if(!storedData.Data.ContainsKey(entity.net.ID.Value)) 
					{
						SendReply(player, lang.GetMessage("NoShare", this, player.UserIDString));
					}
					else
					{
						if(childentity == entity)
						{
							if(storedData.Data[entity.net.ID.Value].Share.Contains(0))
							{
								SendReply(player, lang.GetMessage("HasShareAllList", this, player.UserIDString));
								return;
							}	
							var message="<color=#FFFF00>"+lang.GetMessage("ListShare", this, player.UserIDString)+"</color>\n";
							int i=0;
							foreach(var share in storedData.Data[entity.net.ID.Value].Share)
							{
								i++;
								message+= string.Format("{0}. <color=#00FF00>{1}</color> ({2})\n\r", i, covalence.Players.FindPlayer(share.ToString()).Name, covalence.Players.FindPlayer(share.ToString()).Id);
							}	
							SendReply(player, message);
						}
						else
						{
							if(!storedData.Data[entity.net.ID.Value].Quarry.ContainsKey(childentity.ShortPrefabName)) 
							{
								SendReply(player, lang.GetMessage("NoShare", this, player.UserIDString));
								return;
							}
							if(storedData.Data[entity.net.ID.Value].Quarry[childentity.ShortPrefabName].Contains(0))
							{
								SendReply(player, lang.GetMessage("HasShareAllList", this, player.UserIDString));
								return;
							}	
							var message="<color=#FFFF00>"+lang.GetMessage("ListShare", this, player.UserIDString)+"</color>\n";
							int i=0;
							foreach(var share in storedData.Data[entity.net.ID.Value].Quarry[childentity.ShortPrefabName])
							{
								i++;
								message+= string.Format("{0}. <color=#00FF00>{1}</color> ({2})\n\r", i, covalence.Players.FindPlayer(share.ToString()).Name, covalence.Players.FindPlayer(share.ToString()).Id);
							}	
							SendReply(player, message);
						}	
					}
				}
				else
				{
					SendReply(player, lang.GetMessage("EntityNotFound", this, player.UserIDString));
				}
			}
			else
			{
				SendReply(player, lang.GetMessage("EntityNotFound", this, player.UserIDString));
			}
		}		
		[ChatCommand("shareclear")]
        void Shareclear(BasePlayer player)
        {
		    if (UsePermission && !permission.UserHasPermission(player.UserIDString, PLPerm)) 
			{
				SendReply(player, lang.GetMessage("NoPermission", this, player.UserIDString));
				return;
			}			
			object success;
			if (FindEntityFromRay(player, out success))			
			{
				if (success is StorageContainer)
				{
					BaseEntity entity = success as BaseEntity;
					BaseEntity childentity = entity;
					entity = CheckParent(entity);
					if(entity.OwnerID != player.userID && (!player.IsAdmin || (player.IsAdmin &&!AdminCanLoot)))
					{
						SendReply(player, lang.GetMessage("NoAccess", this, player.UserIDString));
						return;
					}
					if(!storedData.Data.ContainsKey(entity.net.ID.Value)) 
					{
						SendReply(player, lang.GetMessage("NoShare", this, player.UserIDString));
					}
					else
					{
						if(childentity == entity)
						{
							storedData.Data[entity.net.ID.Value].Share.Clear();
							if(storedData.Data[entity.net.ID.Value].Share.Count==0) storedData.Data.Remove(entity.net.ID.Value);
							SendReply(player, lang.GetMessage("ShareClear", this, player.UserIDString));
						}
						else
						{
							if(!storedData.Data[entity.net.ID.Value].Quarry.ContainsKey(childentity.ShortPrefabName))
							{
								SendReply(player, lang.GetMessage("NoShare", this, player.UserIDString));
								return;
							}
							storedData.Data[entity.net.ID.Value].Quarry[childentity.ShortPrefabName].Clear();
							if(storedData.Data[entity.net.ID.Value].Quarry[childentity.ShortPrefabName].Count==0) storedData.Data[entity.net.ID.Value].Quarry.Remove(childentity.ShortPrefabName);
							SendReply(player, lang.GetMessage("ShareClear", this, player.UserIDString));
						}
					}
				}
				else
				{
					SendReply(player, lang.GetMessage("EntityNotFound", this, player.UserIDString));
				}				
			}
			else
			{
				SendReply(player, lang.GetMessage("EntityNotFound", this, player.UserIDString));
			}
		}
		[ChatCommand("checkit")]
        void CheckBP(BasePlayer player)
        {
		    if (UsePermission && !permission.UserHasPermission(player.UserIDString, PLPerm)) 
			{
				SendReply(player, lang.GetMessage("NoPermission", this, player.UserIDString));
				return;
			}			
			object success;
			if (FindEntityFromRay(player, out success))			
			{			
				if (success is StorageContainer)
				{
					BaseEntity entity = success as BaseEntity;
					entity = CheckParent(entity);
					if(entity.OwnerID != player.userID && (!player.IsAdmin || (player.IsAdmin &&!AdminCanLoot)))
					{
						SendReply(player, lang.GetMessage("NoAccess", this, player.UserIDString));
						return;
					}
					if(UseOnlyInCupboardRange)
					{
						BuildingPrivlidge bprev = player.GetBuildingPrivilege(new OBB(entity.transform.position, entity.transform.rotation, entity.bounds));
						if(bprev == null) SendReply(player, "<color=#FF0000>"+lang.GetMessage("EntNoPrevent", this, player.UserIDString)+"</color>\n");
						else SendReply(player, "<color=#CCFF00>"+lang.GetMessage("EntPrevent", this, player.UserIDString)+"</color>\n");		
					}	
					else SendReply(player, "<color=#CCFF00>"+lang.GetMessage("EntPrevent", this, player.UserIDString)+"</color>\n");	
				}
			}
			else
			{
				SendReply(player, lang.GetMessage("EntityNotFound", this, player.UserIDString));
			}
		}
		#endregion
		#region Helpers
		T GetConfig<T>(string name, T defaultValue) => Config[name] == null ? defaultValue : (T) Convert.ChangeType(Config[name], typeof(T)); 
		#endregion
    }
}

❤️ thank you so much

Awesome thank you so much!

Fixed in new version 1.12.2

 
 

 

 

Locked automatically