Question about a reset option for wipe?

What are my options for resetting players backpacks on wipe?

Is there a fix to make it so I can reset the backpacks at wipe?

Merged post

I think I got it!

 

        private void OnNewSave(string filename)
        {
            Puts("Backpacks Have Been Reverted Back To Standard Size!");

            foreach (IPlayer player in players.All)
            {
                for (var row = 1; row <= BACKPACKS_ROWS; row++)
                {
                    string perm = GetPermissionFromLevel(row);
                    if (player.HasPermission(perm))
                    {
                        permission.RevokeUserPermission(player.Id, perm);
                        Puts($"Revoked {perm} from {player.Name} ({player.Id})");
                    }
                }
            }
        }


Merged post

This is the whole file:

 

using System.Collections.Generic;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Core;

namespace Oxide.Plugins
{
    [Info("Backpack Upgrader", "waayne", "1.0.2")]
    [Description("Allows players to upgrade their backpacks.")]
    internal class BackpackUpgrader : CovalencePlugin
    {
        private const string UPGRADE_PERMISSION = "backpackupgrader.upgrade";
        private const string SET_PERMISSION = "backpackupgrader.set";
        private const string BACKPACKS_PERMISSION = "backpacks.use";
        
        private const string UPGRADE_COMMAND = "bpupgrade";
        private const string SET_COMMAND = "bpset";
        
        private const int BACKPACKS_ROWS = 8;

        [PluginReference] private Plugin Backpacks;

        private Dictionary<string, int> playerBackpackData;

        private void Init()
        {
            permission.RegisterPermission(UPGRADE_PERMISSION, this);
            permission.RegisterPermission(SET_PERMISSION, this);

            AddCovalenceCommand(UPGRADE_COMMAND, nameof(UpgradeCommand), UPGRADE_PERMISSION);
            AddCovalenceCommand(SET_COMMAND, nameof(SetCommand), SET_PERMISSION);

            LoadData();
        }

        private void OnServerInitialized(bool initial)
        {
            if (Backpacks == null || !Backpacks.IsLoaded)
                LogError(lang.GetMessage("BackpacksNotFound", this));
        }

        protected override void LoadDefaultMessages()
        {
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["BackpacksNotFound"] = "Backpacks is not loaded, get it at https://umod.org/plugins/backpacks",
                ["HelpSet"] = "Use backpackupgrader.set <name/id> <rows> to set a player's backpack to x rows.",
                ["HelpUpgrade"] = "Use backpackupgrader.upgrade <name/id> to upgrade a player's backpack.",
                ["Set"] = "Set {0}'s backpack to {1}x rows.",
                ["Upgraded"] = "Upgraded {0}'s backpack to {1}x rows."
            }, this);
        }

        private void OnNewSave(string filename)
        {
            Puts("OnNewSave works!");

            foreach (IPlayer player in players.All)
            {
                for (var row = 1; row <= BACKPACKS_ROWS; row++)
                {
                    string perm = GetPermissionFromLevel(row);
                    if (player.HasPermission(perm))
                    {
                        permission.RevokeUserPermission(player.Id, perm);
                        Puts($"Revoked {perm} from {player.Name} ({player.Id})");
                    }
                }
            }

            // Clear all saved upgrade data on wipe
            playerBackpackData.Clear();
            SaveData();
        }

        private void UpgradeCommand(IPlayer player, string command, string[] args)
        {
            if (args.Length <= 0)
            {
                player.Reply(lang.GetMessage("HelpUpgrade", this, player.Id));
                return;
            }

            IPlayer target = players.FindPlayer(args[0]);

            if (target == null)
                return;

            for (var row = 1; row <= BACKPACKS_ROWS; row++)
            {
                string perm = GetPermissionFromLevel(row);
                if (!target.HasPermission(perm))
                {
                    target.GrantPermission(perm);
                    playerBackpackData[target.Id] = row;
                    SaveData();
                    player.Reply(string.Format(lang.GetMessage("Upgraded", this, player.Id), target.Name, row));
                    return;
                }
            }
        }

        private void SetCommand(IPlayer player, string command, string[] args)
        {
            if (args.Length <= 1)
            {
                player.Reply(lang.GetMessage("HelpSet", this, player.Id));
                return;
            }

            IPlayer target = players.FindPlayer(args[0]);

            if (target == null)
                return;

            int newRows = int.Parse(args[1]);

            for (var row = 1; row <= BACKPACKS_ROWS; row++)
            {
                string perm = GetPermissionFromLevel(row);
                if (row <= newRows)
                {
                    if (!target.HasPermission(perm))
                        target.GrantPermission(perm);
                }
                else
                {
                    if (target.HasPermission(perm))
                        target.RevokePermission(perm);
                }
            }

            playerBackpackData[target.Id] = newRows;
            SaveData();

            player.Reply(string.Format(lang.GetMessage("Set", this, player.Id), target.Name, newRows));
        }

        private static string GetPermissionFromLevel(int row)
        {
            return row == 1 ? BACKPACKS_PERMISSION : BACKPACKS_PERMISSION + "." + row;
        }

        private void LoadData()
        {
            playerBackpackData = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<string, int>>("BackpackUpgraderData") ?? new Dictionary<string, int>();
        }

        private void SaveData()
        {
            Interface.Oxide.DataFileSystem.WriteObject("BackpackUpgraderData", playerBackpackData);
        }
    }
}


Merged post

This is the ne whole file:

using System.Collections.Generic;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Core;

namespace Oxide.Plugins
{
    [Info("Backpack Upgrader", "waayne", "1.0.2")]
    [Description("Allows players to upgrade their backpacks.")]
    internal class BackpackUpgrader : CovalencePlugin
    {
        private const string UPGRADE_PERMISSION = "backpackupgrader.upgrade";
        private const string SET_PERMISSION = "backpackupgrader.set";
        private const string BACKPACKS_PERMISSION = "backpacks.use";
        
        private const string UPGRADE_COMMAND = "bpupgrade";
        private const string SET_COMMAND = "bpset";
        
        private const int BACKPACKS_ROWS = 8;

        [PluginReference] private Plugin Backpacks;

        private Dictionary<string, int> playerBackpackData;

        private void Init()
        {
            permission.RegisterPermission(UPGRADE_PERMISSION, this);
            permission.RegisterPermission(SET_PERMISSION, this);

            AddCovalenceCommand(UPGRADE_COMMAND, nameof(UpgradeCommand), UPGRADE_PERMISSION);
            AddCovalenceCommand(SET_COMMAND, nameof(SetCommand), SET_PERMISSION);

            LoadData();
        }

        private void OnServerInitialized(bool initial)
        {
            if (Backpacks == null || !Backpacks.IsLoaded)
                LogError(lang.GetMessage("BackpacksNotFound", this));
        }

        protected override void LoadDefaultMessages()
        {
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["BackpacksNotFound"] = "Backpacks is not loaded, get it at https://umod.org/plugins/backpacks",
                ["HelpSet"] = "Use backpackupgrader.set <name/id> <rows> to set a player's backpack to x rows.",
                ["HelpUpgrade"] = "Use backpackupgrader.upgrade <name/id> to upgrade a player's backpack.",
                ["Set"] = "Set {0}'s backpack to {1}x rows.",
                ["Upgraded"] = "Upgraded {0}'s backpack to {1}x rows."
            }, this);
        }

        private void OnNewSave(string filename)
        {
            Puts("OnNewSave works!");

            foreach (IPlayer player in players.All)
            {
                for (var row = 1; row <= BACKPACKS_ROWS; row++)
                {
                    string perm = GetPermissionFromLevel(row);
                    if (player.HasPermission(perm))
                    {
                        permission.RevokeUserPermission(player.Id, perm);
                        Puts($"Revoked {perm} from {player.Name} ({player.Id})");
                    }
                }
            }

            // Clear all saved upgrade data on wipe
            playerBackpackData.Clear();
            SaveData();
        }

        private void UpgradeCommand(IPlayer player, string command, string[] args)
        {
            if (args.Length <= 0)
            {
                player.Reply(lang.GetMessage("HelpUpgrade", this, player.Id));
                return;
            }

            IPlayer target = players.FindPlayer(args[0]);

            if (target == null)
                return;

            for (var row = 1; row <= BACKPACKS_ROWS; row++)
            {
                string perm = GetPermissionFromLevel(row);
                if (!target.HasPermission(perm))
                {
                    target.GrantPermission(perm);
                    playerBackpackData[target.Id] = row;
                    SaveData();
                    player.Reply(string.Format(lang.GetMessage("Upgraded", this, player.Id), target.Name, row));
                    return;
                }
            }
        }

        private void SetCommand(IPlayer player, string command, string[] args)
        {
            if (args.Length <= 1)
            {
                player.Reply(lang.GetMessage("HelpSet", this, player.Id));
                return;
            }

            IPlayer target = players.FindPlayer(args[0]);

            if (target == null)
                return;

            int newRows = int.Parse(args[1]);

            for (var row = 1; row <= BACKPACKS_ROWS; row++)
            {
                string perm = GetPermissionFromLevel(row);
                if (row <= newRows)
                {
                    if (!target.HasPermission(perm))
                        target.GrantPermission(perm);
                }
                else
                {
                    if (target.HasPermission(perm))
                        target.RevokePermission(perm);
                }
            }

            playerBackpackData[target.Id] = newRows;
            SaveData();

            player.Reply(string.Format(lang.GetMessage("Set", this, player.Id), target.Name, newRows));
        }

        private static string GetPermissionFromLevel(int row)
        {
            return row == 1 ? BACKPACKS_PERMISSION : BACKPACKS_PERMISSION + "." + row;
        }

        private void LoadData()
        {
            playerBackpackData = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<string, int>>("BackpackUpgraderData/playerBackpackData") ?? new Dictionary<string, int>();
        }

        private void SaveData()
        {
            Interface.Oxide.DataFileSystem.WriteObject("BackpackUpgraderData/playerBackpackData", playerBackpackData);
        }
    }
}​


Merged post

Bottom one is the new one, puts a data file also to keep track of all the new backback Upgrades.