Death's Wishlist
-
Skinner
By Whispers88 in Plugins
Live Skinning - Skin items in place without moving them Auto import - Automatically import and use all game approved skins Skin Sets - Create a variety of different skin sets for any item Skin Requests - Allows players to request and Admins to accept new skins in game Auto Skins - Automatically apply selected skins to every item that enters your inventory
Skinner 2.0 offeres unrivaled performance in plugin efficiency. Our standard testing shows runtime results were 60x faster and memory usage was 200x more efficient than the closest peforming plugin.
SkinMenu Commands:
/Skin or /S - Live skin any item in your inventory by selecting a skin you wish to apply /SkinCraft or /Sc - Create multiple skin sets for use in other functions such as skinauto or skinteam /Skinitem or /Si - Skin a deployable item you are looking at ingame. Args - Spectify 1, 2 or 3 to automatically use a skin set. Automatic Commands:
/Skincon or /scon - sets all items in a container you are looking at to your default craft set Args - Optional, spectify 1, 2 or 3 to automatically use a skin set.
/Skininv or /sinv - sets all items in your inventory to your default craft set Args - Optional, spectify 1, 2 or 3 to automatically use a skin set.
/Skinteam or /st - sets all items in your inventory and your teams to your default craft set Args - Optional, spectify 1, 2 or 3 to automatically use a skin set. Toggle - Use /skinteam toggle to opt in or out of the team skin set
/SkinBase - Allows you to skin all deployables in your base to your default skincraft skins. Args - Optional, specify item name to filter items being skinned example: /Skinbase sleepingbag to only skin sleeping bags.
/SkinAll Command - Skin all the items in all the containers in your base. Args - Optional, specify item by shortname example: /SkinAll rifle.ak to only skin ak47's. Skin Import Commands:
/Skinimport or /sip - Import custom workshop skins Args - WorkshopID example: /Skinimport 2397648701
/Colimport or /cip - Import custom workshop collection using /skinimport collectionID Args - Collection ID example: /Colimport 2921147807
/Skinrequest or /Sr - Request a skin to be added to skinner, requested skins will show in the /Skinrequests UI for approval Args - WorkshopID example: /Skinrequest 2397648701
/Skinrequests or /Srs - Opens the the skinner menu with a box of skins awating approval Button Usage - Select an option and remove the skin to enact the process
Try - Recieve a copy of an item with that skin
Approve - Adds the skin from the menu to the imported skins list
Deny - Removes the skin Note: All chat commands are universal meaning they can be used via the console, rcon(for import commands) and can be customized via the configuration.
Player Permissions:
Skinner.default - enables /skin command Skinner.items - enables /skinitem command Skinner.craft - enables /skincraft command Skinner.skincon - enables /skincon command Skinner.skininv - enables /skininv command Skinner.skinbase for use of the /skinbase command Skinner.skinall for the use of the /skinall command Skinner.skinrequest enables /skinrequest Cooldowns Permissions:
Cooldown settins can be adjusted via the plugin config. Applying the cooldown permission example skinner.default30 will enforce cooldowns on those with the permission. If no cooldown permission is applied no cooldowns will be enforced. If multiple cooldown perms are assigned to a single player they fastest cooldown will be used.
"Command based cooldowns ('permission' : 'command' seconds": { "Default30CD": { "skin": 30.0, "skinitem": 30.0, "skincraft": 30.0, "skincon": 30.0, "skininv": 30.0, "skinteam": 30.0, "skinbase": 60.0, "skinall": 60.0 } Admin Permissions:
Skinner.import – enables /Skinimport, /Colimport and /Skinrequests Skinner.bypassauth - bypasses the building auth requirement when using /Skinitem Skinner.permskintry - enables try feature when using /Skinrequests Warning: trying a skin will make a copy of that item. Only give this perm to admins who are allowed to spawn items.
Skinner offers multiple ways of importing skins including via the config and through commands:
Importing via the config:
To import skins via the config insert workshopIDs into the imported skins list as per the code snippet below, once finished reload skinner and the shortname and displayname fields will be automatically populated. You can add extra skins at any stage using this method.
"Imported Skins List": { "861142659": {}, "2617744110": {} },
Optionally entire workshop skin collections can be added to conifg, each item skin is automatically imported to your imported skins list on plugin load.
"Import Skin collections (steam workshop ID)": [496517795,2921147807],
Importing via commands:
Commands can be used to edit the config options for imported skins and collections via RCON, chat commands and the f1 console. Commands include:
/Skinimport WorkshopID /Colimport CollectionID Importing via Skin Requests:
Players can requests skins to be added to the game using the skinrequests feature. By using the command /skinrequest WorkshoID a skin gets automatically uploaded to the skin requests box. Admins with the skinner.import permission can open the requests box with the /skinrequests command.
Skins from the request box can then be "tried" approved or denied.
Each skin requested can be logged to discord using the webhook in the config.
Importing from other plugins:
Skinner now has a tool for windows to import data from skinbox, xskins and skincontroller. Simply select your json data file with imported skins into the tool and copy the new imported skins list into the skinner config.
https://github.com/Whispers88/SkinDataConverter/releases/tag/Main
Note: The "Imported Skins (skinid : 'shortnamestring', skinid2 : 'shortnamestring2'": {}" is now redundant and automatically converted to imported skins list.
{ "Skin Commands (skin items in you inventory": [ "skin", "s", "skinbox", "sb" ], "Skin Items Commands (skin items you have already placed": [ "skinitem", "si", "skindeployed", "sd" ], "Set default items to be skinned": [ "skincraft", "sc" ], "Automatically set all items in you inventory to your default skins": [ "skininv", "sinv" ], "Automatically set all items a container to your default skins": [ "skincon", "scon" ], "Automatically skin all deployables in your base": [ "skinbase", "skinbuilding" ], "Automatically skin all items in your base": [ "skinall", "sa" ], "Automatically skin all items that are moved into you inventory": [ "skinauto", "sauto" ], "Skin your teams inventories with your skin set": [ "skinteam", "st" ], "Request workshop skins via workshop ID": [ "skinrequest", "sr" ], "Approve workshop skin requests": [ "skinrequests", "srs" ], "Set your selected skin set": [ "skinset", "ss" ], "Import Custom Skins": [ "skinimport", "sip" ], "Import Workshop Collection Command": [ "colimport", "cip" ], "Skin Request Notification Discord Webhook": "", "Custom Page Change UI Positon anchor/offset 'min x, min y', 'max x', max y'": [ "0.5 0.0", "0.5 0.0", "198 60", "400 97" ], "Custom Searchbar UI Positon anchor/offset 'min x, min y', 'max x', max y'": [ "0.5 0.0", "0.5 0.0", "410 635", "572 660" ], "Custom Set Selection UI Positon anchor/offset 'min x, min y', 'max x', max y'": [ "0.5 0.0", "0.5 0.0", "250 610", "573 633" ], "Auto import approved skins": true, "Remove player data after inactivity (days)": 14, "Apply names of skins to skinned items": true, "Add Search Bar UI": true, "Use on itemcraft hook (skin items after crafting - not required when using skinauto)": false, "Override spraycan behaviour": false, "Use spraycan effect when holding spraycan and skinning deployables": true, "Blacklisted Skins (skinID)": [], "Blacklisted Itemms (itemID)": [], "Import Skin collections (steam workshop ID)": [], "Command based cooldowns ('permission' : 'command' seconds": { "Default30CD": { "skin": 30.0, "skinitem": 30.0, "skincraft": 30.0, "skincon": 30.0, "skininv": 30.0, "skinteam": 30.0, "skinbase": 60.0, "skinall": 60.0 } }, "Imported Skins List": {} }
//Get all Cached skins public Dictionary<int, List<ulong>> GetAllCachedSkins() { return _cachedSkins; } //Check if skin is a Redirect item public bool IsRedirectID(ulong uID) { return HasMask(uID); } //Convert Redirect ID to item ID public int RedirectIDtoItemID(ulong uID) { return (int)UnsetMask(uID); } //Get a list of skins for a particular item public List<ulong>? GetSkinsItemList(int itemid) { _cachedSkins.TryGetValue(itemid, out List<ulong>? cachedSkins); return cachedSkins; }