Not sure if I'm using the plugin wrong, but the plugin just didn't work for me at all. Using the pre-made initial config of the plugin, I gave myself the "chatprefix.vip" permission. Then, when chatting, I did not have the expected prefix ([VIP]).

Upon digging into the code a little bit, I noticed the plugin checks the permission/group name only (without "chatprefix." in it). So in order to have the prefix work, I would need to have the permission "vip", not "chatprefix.vip".

I fixed it by changing this:

private object ReloadPrefix(BasePlayer player)
        {
            if (config.debug) Puts("ReloadPrefix for " + player.displayName);
            if (!player.IsValid()) return false;

            playerPrefixData.Remove(player.userID);

            bool foundPrefixForPly = false;
            foreach (var p in config.Prefixes.OrderBy(x => x.Value.Priority))
            {
                if (foundPrefixForPly) return true;
                if (permission.UserHasPermission(player.UserIDString, p.Value.Permission) && !config.useGroup && !p.Value.Disabled || permission.UserHasGroup(player.UserIDString, p.Value.GroupName) && config.useGroup && !p.Value.Disabled)
                {
                    foundPrefixForPly = true;
                    if (config.debug) Puts("Found Prefix for " + player.displayName + " Prefix: " + p.Value.Prefix + " Prefixcolor" + p.Value.Color + " Permission:" + p.Value.Permission + " GroupName:" + p.Value.GroupName);
                    playerPrefixData.Add(player.userID, new PlayerPrefix { Prefix = p.Value.Prefix, Color = p.Value.Color, active = true });
                }
            }

            if (!foundPrefixForPly) playerPrefixData.Add(player.userID, new PlayerPrefix { Prefix = null, Color = null, active = false });
            return true;
        }​


to this (checks with "chatprefix."):
private object ReloadPrefix(BasePlayer player)
        {
            if (!player.IsValid()) return false;
            if (config.debug) Puts("ReloadPrefix for " + player.displayName);

            playerPrefixData.Remove(player.userID);

            bool foundPrefixForPly = false;
            foreach (var p in config.Prefixes.OrderBy(x => x.Value.Priority))
            {
                if (foundPrefixForPly) return true;

                var permissionName = "chatprefix." + p.Value.Permission;
                var groupName = "chatprefix." + p.Value.GroupName;

                if (permission.UserHasPermission(player.UserIDString, permissionName) && !config.useGroup && !p.Value.Disabled || permission.UserHasGroup(player.UserIDString, groupName) && config.useGroup && !p.Value.Disabled)
                {
                    foundPrefixForPly = true;
                    if (config.debug) Puts("Found Prefix for " + player.displayName + " Prefix: " + p.Value.Prefix + " Prefixcolor" + p.Value.Color + " Permission:" + permissionName + " GroupName:" + groupName);
                    playerPrefixData.Add(player.userID, new PlayerPrefix { Prefix = p.Value.Prefix, Color = p.Value.Color, active = true });
                }
            }

            if (!foundPrefixForPly) playerPrefixData.Add(player.userID, new PlayerPrefix { Prefix = null, Color = null, active = false });
            return true;
        }​