Thanks @LaserHydra, unfortunately I'm not on GitHub at the moment (I know).
It's just 2 changes with a single if statement for each. The Backpack.Get just creates backpacks for non-perm players in 2 situations:
#1 - Added
if (permission.UserHasPermission(userIdString, UsagePermission)) private void OnUsagePermissionChanged(string userIdString)
{
if (permission.UserHasPermission(userIdString, UsagePermission))
{
var userId = ulong.Parse(userIdString);
Backpack.Get(userId).Initialize();
}
}
#2 - Added if (_backpacks.ContainsKey(player.userID))
private void OnEntityDeath(BaseCombatEntity victim, HitInfo info)
{
if (victim is BasePlayer && !(victim is NPCPlayer) && !(victim is HTNPlayer))
{
var player = (BasePlayer) victim;
if (_backpacks.ContainsKey(player.userID))
{
var backpack = Backpack.Get(player.userID);
backpack.ForceClose();
if (_config.EraseOnDeath)
backpack.EraseContents();
else if (_config.DropOnDeath)
backpack.Drop(player.transform.position);
}
}
}
In the first situation it gates the OnUsagePermissionChanged hook to make sure it only gets a backpack if the player has permissions. This hook might be called for something completely unrelated.
In OnEntityDeath, Backpack.Get should only be called if a backpack already exists. This way it stops on initialising a new backpack everytime a fresh player has their first death.