- Works With
Building Grades is an all-in-one plugin for upgrading, downgrading, skinning, and wallpapering building blocks. Players can grade single blocks or entire buildings through chat, a hammer HUD, or a settings panel, and pick their preferred building skin per grade tier and wallpaper per surface, applied automatically on every grade change. Compound walls and gates are also supported, swapping between configurable tiers like wood, adobe, stone, and ice. Also includes optional aura mode that grades blocks passively as players walk through their base.
Features
- Chat grading - Upgrade/downgrade single blocks or whole buildings via
/up,/down,/upall,/downall - Hammer HUD - Equip a hammer to get an on-screen grade picker with direction, scope, target grade, and undo buttons
- Auto-grade on placement - Newly placed blocks upgrade to the chosen tier automatically with an inactivity timer
- Aura mode - Walk through the base with a hammer and blocks within the radius grade themselves as you pass
- Resource cost preview - See exactly which resources are needed before confirming a whole-building upgrade
- Building skins - Set your favorite skin for each grade tier and have it applied automatically to every block you upgrade, downgrade, or auto-grade
- Container metal coloring - Color palette and randomize option for the Container metal skin
- Wallpapers - Pick a wallpaper for each surface type (walls, floors, ceilings) and have it applied automatically on every grade change
- Compound walls and gates - Swap high external walls and gates between configurable tiers like wood, adobe, stone, and ice with a hammer hit
- Block type filter - Choose which block types are included in bulk operations, like foundations, walls, stairs, or roofs
- Undo system - Reverse the last grade operation within a configurable time window
- Cost refunds on downgrade - Get a configurable percentage of resources back whenever you downgrade a block
- Raid/combat block integration - Optional integration with Better No Escape to block grading during raid or combat
- Access control - Decide who can grade whose base through TC auth, building ownership, teams, Friends, and Clans
- DLC ownership checks - Optional Player DLC API integration to gate skins and wallpapers behind DLC ownership
- Floating settings button - Always-visible on-screen button to open the settings panel without typing
- Per-player preferences - Skins, wallpapers, hammer direction/scope, block filter, and aura radius persist across sessions
Permissions
Core Permissions:buildinggrades.use-- Required for any plugin usage (chat commands, hammer, settings panel)buildinggrades.bulk-- Required for/upall,/downall, and Hammer Building scope modebuildinggrades.preview-- Required to use the cost preview button in the hammer HUDbuildinggrades.undo-- Required for the/undocommand and the HUD undo buttonbuildinggrades.nocost-- Skips resource costs on upgrades and skips refund payouts on downgradesbuildinggrades.skinbypass-- Bypasses DLC ownership checks for skins and wallpapersbuildinggrades.admin-- Full access to all features, bypasses TC auth, cooldowns, attack window, and all gate checks
Grade-Specific Permissions:
Players need permission for each individual grade tier they want to reach. Grant either the specific grade permission or the "all" wildcard.
buildinggrades.up.<grade>-- Allows upgrading to a specific grade (e.g.,buildinggrades.up.2for Stone)buildinggrades.down.<grade>-- Allows downgrading to a specific grade (e.g.,buildinggrades.down.1for Wood)buildinggrades.up.all-- Allows upgrading to any gradebuildinggrades.down.all-- Allows downgrading to any grade
1 = Wood, 2 = Stone, 3 = Metal, 4 = Armored (HQM).Section Permissions (VIP Gating):
These permissions are configured under
Section Permissions in the config. By default the auto-grade, aura, block filter, skins, and wallpapers sections are open to everyone (blank perm string), but externals is gated behind buildinggrades.vip.externals. Set any section's permission string in the config to lock it behind that permission. See Section Permissions Settings.Players without a section's required permission see a "Premium feature" overlay on that section in the UI.
Commands
Main Commands
The main chat command defaults to/bg and is configurable (see Chat Command Settings)./bg-- Shows the help screen/bg help-- Shows the help screen/bg up [grade]-- Upgrades the block you're looking at. Omit[grade]to step up one tier/bg down [grade]-- Downgrades the block you're looking at. Omit[grade]to step down one tier/bg upall [grade]-- Upgrades every block in the building you're looking at/bg downall [grade]-- Downgrades every block in the building you're looking at/bg undo-- Reverses the last grade operation within the undo time window/bg hammer [up/down]-- Toggles the hammer tool. Optional argument sets direction/bg settings-- Opens the settings panel
0/twigs, 1/wood, 2/stone, 3/metal, 4/hqm/toptier/armored.Shortcut Aliases
These aliases work as standalone chat commands without the /bg prefix. All aliases are configurable./up,/upgrade-- Same as/bg up/down,/downgrade-- Same as/bg down/upall,/upgradeall-- Same as/bg upall/downall,/downgradeall-- Same as/bg downall/undo-- Same as/bg undo/hammer-- Same as/bg hammer
Console Commands & Keybinds
These console commands are designed to be bound to keys via the F1 console.bg.hammer-- Toggles hammer modebg.hammerdir-- Toggles hammer direction between Upgrade and Downgrade. Also clears the target grade if one is lockedbg.hammermode-- Cycles hammer scope between Single block and whole Buildingbg.undo-- Triggers the undobg.off-- Disables auto-gradebg.settings-- Opens/closes the settings panelbg.aura <off/wood/stone/metal/hqm>-- Toggles aura mode at the specified gradebg.aura radius <int>-- Sets the aura radius in meters
Code:
bind mouse2 bg.hammerdir
bind mouse3 bg.hammermode
bind b bg.undo
Configuration
General Settings
JSON:
"General Settings": {
"Skip Grade On Recently-Damaged Blocks": true,
"Recently-Damaged Window Seconds": 30.0,
"Play Upgrade/Downgrade Effects On Grade Change": true,
"Remember Player Preferences (UI choices, hammer, skins, etc.)": true,
"Chat Command Cooldown Seconds (0 = disabled)": 0.0
}
Skip Grade On Recently-Damaged Blocks-- Refuses to grade blocks that were attacked within the recently-damaged window. Prevents grading during active raidsRecently-Damaged Window Seconds-- How long after an attack a block stays "recently damaged"Play Upgrade/Downgrade Effects On Grade Change-- Plays the standard upgrade particle effect on each grade changeRemember Player Preferences-- Persists per-player settings to disk so they survive disconnects and server restartsChat Command Cooldown Seconds-- Global cooldown applied to single-block and bulk chat commands. Admins bypass
Auto-Grade Settings
JSON:
"Auto Grade Settings (auto-upgrade newly placed blocks)": {
"Enabled (off = feature fully disabled, hidden from UI)": true,
"Auto-Disable Timer Enabled (off = auto-grade stays on until player turns it off)": true,
"Default Auto-Disable Duration Seconds": 300,
"Maximum Allowed Timer Duration Seconds": 1800,
"Allow Players To Edit Timer In Settings UI": true
}
Enabled-- Master switch. Whenfalse, the entire auto-grade section is hidden from the UI and the placement hook is unsubscribedAuto-Disable Timer Enabled-- Whenfalse, auto-grade stays on indefinitely. When true, it shuts off after the timer expires to stop accidental resource drainDefault Auto-Disable Duration Seconds-- Timer used when a player hasn't set their own durationMaximum Allowed Timer Duration Seconds-- Hard cap on the timer duration players can set in the UIAllow Players To Edit Timer In Settings UI-- Whenfalse, players see the timer value but can't type a new one
Bulk Operation Settings
JSON:
"Bulk Operation Settings (whole-base upgrade/downgrade jobs)": {
"Blocks Processed Per Frame (lower = smoother, higher = faster)": 10,
"Show Progress Messages During Long Operations": true,
"Progress Message Interval (every N blocks)": 50
}
Blocks Processed Per Frame-- How many blocks the coroutine handles before yielding to the next frame. Lower values keep TPS smooth on large bases at the cost of total completion timeShow Progress Messages During Long Operations-- Sends "Processing X/Y blocks" chat messages while a bulk job runsProgress Message Interval-- How often progress messages are sent
Hammer Tool Settings
JSON:
"Hammer Tool Settings": {
"Enabled (off = feature fully disabled, hidden from UI)": true,
"Auto-Activate When Hammer Equipped": true,
"Custom Hammer Skin Id (0 = any hammer)": 0,
"Custom Hammer Display Name (blank = skip name check)": "",
"Hold Button To Grade (blank = always grade on hit)": "SPRINT"
}
Enabled-- Master switch for the hammer featureAuto-Activate When Hammer Equipped-- Automatically turns on hammer mode when a player equips a hammerCustom Hammer Skin Id-- Restricts plugin behavior to hammers with this specific skin ID. Set to0to accept any hammerCustom Hammer Display Name-- Restricts plugin behavior to hammers with this exact custom nameHold Button To Grade-- When set, hits only grade while this button is held. Other hits pass through to vanilla repair. Accepts standard Rust button names likeSPRINT,DUCK,RELOAD,USE. Set to blank to always grade on every hit
Floating Settings Button
JSON:
"Floating Settings Button": {
"Enabled (off = button never appears)": true,
"Hide While Hammer HUD Is Visible": true,
"Anchor Minimum (0 0 = bottom-left)": "0 0",
"Anchor Maximum (1 1 = top-right)": "0 0",
"Offset Minimum Pixels (X Y from anchor)": "28 27",
"Offset Maximum Pixels (X Y from anchor)": "78 77",
"Icon Sprite Path": "assets/icons/level_stone.png",
"Background Color (Hex)": "#000000C7"
}
Enabled-- Shows a persistent on-screen button that opens the settings panelHide While Hammer HUD Is Visible-- Hides the floating button when the hammer HUD is showing to avoid clutterAnchor Minimum/Anchor Maximum-- Standard Rust CUI anchor coordinates.0 0= bottom-left of screen,1 1= top-rightOffset Minimum Pixels/Offset Maximum Pixels-- Pixel offset from the anchor point. The defaults place a 50x50px button near the bottom-leftIcon Sprite Path-- Any in-game sprite path.Background Color-- Hex color with optional alpha channel.
Building Skin Settings
JSON:
"Building Skin Settings": {
"Enabled (off = feature fully disabled, hidden from UI)": true,
"Available Skins (keyed by grade: 1=Wood, 2=Stone, 3=Metal, 4=TopTier)": {
"1": [ { "Display Name": "Default", "Skin Id (Steam Workshop ID, 0 = default)": 0, "Icon URL (blank = use Display Name as text label)": "https://..." } ],
"2": [ ... ],
"3": [ ... ],
"4": [ ... ]
},
"Apply Player's Skin On Vanilla Upgrade": true,
"Require Skin Ownership (via PlayerDLCAPI plugin)": true,
"Container Skin Color Palette (only used when player picks the Container metal skin)": {
"Default": 0, "Blue": 1, "Green": 2, "Purple": 3, "Dark Brown": 4, ...
}
}
Enabled-- Master switch for the skins sectionAvailable Skins-- Dictionary keyed by grade integer (1-4). Each entry is a list of skins available for that grade- Display Name -- Label shown in the skin dropdown
- Skin Id -- Steam Workshop skin ID.
0means vanilla/default - Icon URL -- HTTP(S) URL to a PNG that becomes the dropdown thumbnail. The plugin downloads, center-crops, and caches the image on server start. Leave blank to fall back to a text label
Apply Player's Skin On Vanilla Upgrade-- Whentrue, the player's preferred skin is also applied when they upgrade through the vanilla hammer UI (not just plugin commands)Require Skin Ownership-- Whentrueand PlayerDLCAPI is loaded, only skins the player actually owns are selectable. Locked skins display a lock iconContainer Skin Color Palette-- Maps display names to Rust's internal color ids (0-16). Only used when the player picks the Container skin (ID 10221) for the Metal grade
Wallpaper Settings
JSON:
"Wallpaper Settings": {
"Enabled (off = feature fully disabled, hidden from UI)": true,
"Re-Apply Wallpaper When Grading A Block": true,
"Show Ceiling Wallpaper On Underside Of Floors": true,
"Wallpapers Damageable (off = invulnerable, can't be shot off)": true,
"Play Wallpaper Placement Sound/Effect": true,
"Require Wallpaper Ownership (via PlayerDLCAPI plugin)": true,
"Auto-Populate Wallpaper List From Game Items On Load": true,
"Available Wallpapers (1=Wall, 2=Floor, 3=Ceiling)": {
"1": [ { "Display Name": "None", "Skin Id (Steam Workshop ID, 0 = default)": 0 }, { "Display Name": "Remove", "Skin Id (Steam Workshop ID, 0 = default)": 1 } ],
"2": [ ... ],
"3": [ ... ]
}
}
Enabled-- Master switch for the wallpapers sectionRe-Apply Wallpaper When Grading A Block-- When a block is graded, the plugin re-runs the wallpaper logic so the player's wallpaper sticksShow Ceiling Wallpaper On Underside Of Floors-- When enabled, floors get both a floor wallpaper (top) and a ceiling wallpaper (underside)Wallpapers Damageable-- Whenfalse, applied wallpapers become invulnerable (can't be shot off). When true, vanilla damage behavior appliesPlay Wallpaper Placement Sound/Effect-- Plays the standard wallpaper placement effect on each applicationRequire Wallpaper Ownership-- When true, players need to own the wallpaper skin (checked via PlayerDLCAPI or their Steam inventory) to use itAuto-Populate Wallpaper List From Game Items On Load-- On plugin load, scans Rust's wallpaper item definitions and adds any missing skins to the dropdown lists. Useful so new wallpapers from updates appear automaticallyAvailable Wallpapers-- Dictionary keyed by category (1=Wall, 2=Floor, 3=Ceiling). Skin id0is the "None" sentinel (no change), skin id`1` is the "Remove" sentinel (strip existing wallpaper)
External Walls and Gates Settings
JSON:
"External Walls & Gates Settings": {
"Enabled (off = feature fully disabled, hidden from UI)": true,
"Allow Hammer Hits To Step Tiers (up or down per direction)": true,
"Allow Auto-Upgrade On Placement (off = locks the per-player toggle in UI)": false,
"Wall Tiers (in upgrade order; index 0 = base placement tier)": [
{ "Display Name (shown in UI dropdown)": "Legacy", "Prefab Path": "assets/prefabs/building/wall.external.high.legacy/wall.external.high.legacy.prefab" },
{ "Item Shortname": "wall.external.high", "Display Name (shown in UI dropdown)": "Wood", "Prefab Path": "assets/prefabs/building/wall.external.high.wood/wall.external.high.wood.prefab" },
{ "Display Name (shown in UI dropdown)": "Adobe", "Prefab Path": "assets/prefabs/building/wall.external.high.adobe/wall.external.high.adobe.prefab" },
{ "Display Name (shown in UI dropdown)": "Stone", "Prefab Path": "assets/prefabs/building/wall.external.high.stone/wall.external.high.stone.prefab" },
{ "Display Name (shown in UI dropdown)": "Ice", "Prefab Path": "assets/prefabs/misc/xmas/icewalls/wall.external.high.ice.prefab" }
],
"Gate Tiers (in upgrade order; index 0 = base placement tier)": [ ... ]
}
Enabled-- Master switch for the externals sectionAllow Hammer Hits To Step Tiers-- Whentrue, hitting an external wall or gate with the plugin's hammer mode swaps it for the next/previous tier in the ladder (direction follows the hammer's Upgrade/Downgrade setting)Allow Auto-Upgrade On Placement-- Whentrue, newly placed externals are tier-stepped toward the player's target tier on placement. Whenfalse, the per-player toggle is greyed out in the UIWall Tiers/Gate Tiers-- Ordered list of tiers. Index `0`is the base tier that gets placed by defaultDisplay Name-- Label shown in the UI dropdownPrefab Path-- Full prefab asset path that gets spawned when stepping to this tierItem Shortname-- Optional override for which item's blueprint cost is charged when stepping to this tier. If omitted, the cost is derived from the prefab's shortname
Aura Settings
JSON:
"Aura Settings (passive walk-by grading)": {
"Enabled (off = feature fully disabled, hidden from UI)": true,
"Default Aura Radius": 1.0,
"Maximum Allowed Aura Radius": 30.0,
"Scan Interval Seconds (how often aura ticks)": 0.5,
"Blocks Processed Per Scan (caps single-tick cost)": 20,
"Aura Requires Player Resources (off = free)": true,
"Sphere Opacity (1-5)": 2
}
Enabled-- Master switch for the aura sectionDefault Aura Radius-- Radius used when a player first turns on aura modeMaximum Allowed Aura Radius-- Hard cap on the radius players can set in the UI sliderScan Interval Seconds-- How often the aura tick fires. Lower values feel more responsive but cost more performanceBlocks Processed Per Scan-- Caps how many blocks can be processed in a single tick to prevent stallsAura Requires Player Resources-- Whenfalse, aura upgrades are free regardless ofbuildinggrades.nocostpermissionSphere Opacity-- How many overlapping visual spheres are stacked to represent the aura range. More spheres = more opaque
Chat Command Settings
JSON:
"Chat Command Settings": {
"Main Chat Command (without slash)": "bg",
"Aliases For \"/up\" Shortcut": [ "up", "upgrade" ],
"Aliases For \"/down\" Shortcut": [ "down", "downgrade" ],
"Aliases For \"/upall\" Shortcut": [ "upall", "upgradeall" ],
"Aliases For \"/downall\" Shortcut": [ "downall", "downgradeall" ],
"Aliases For \"/undo\" Shortcut": [ "undo" ],
"Aliases For \"/hammer\" Shortcut": [ "hammer" ],
"Chat Message Prefix": "[BuildingGrades]: "
}
Main Chat Command-- The root chat command (defaults tobg, so players type/bg)Aliases For "/up" Shortcut-- Standalone shortcut commands that act like/bg up. Add or remove to tasteAliases For "/down" Shortcut-- Standalone aliases for/bg downAliases For "/upall" Shortcut-- Standalone aliases for/bg upallAliases For "/downall" Shortcut-- Standalone aliases for/bg downallAliases For "/undo" Shortcut-- Standalone aliases for/bg undoAliases For "/hammer" Shortcut-- Standalone aliases for/bg hammerChat Message Prefix-- Prepended to the help screen output
Resource Settings
JSON:
"Resource Settings (cost/refund behavior)": {
"Refund Resources When Downgrading": true,
"Downgrade Refund Percentage (0-100)": 50
}
Refund Resources When Downgrading-- Whentrue, downgrades refund a portion of the original construction costDowngrade Refund Percentage-- Percentage of the original cost that gets refunded.50refunds half,100refunds full cost,0disables refunds without touching the toggle above
Undo Settings
JSON:
"Undo Settings (revert recent grade actions)": {
"Enabled (off = no undo tracking)": true,
"Undo Time Window Seconds (after this, undo expires)": 60,
"Maximum Blocks Tracked Per Undo Batch": 500
}
Enabled-- Whenfalse, no undo records are tracked at all and the undo button is non-functionalUndo Time Window Seconds-- After this many seconds from the last operation, undo data expires and can't be appliedMaximum Blocks Tracked Per Undo Batch-- Caps memory usage on very large bulk operations. Blocks past the cap can't be undone
Access Control Settings
JSON:
"Access Control Settings (who can grade whose base)": {
"Authed Players Can Grade (TC auth at the base)": true,
"Building Owner And Allies Can Grade": true,
"Allow Owner's Friends (Friends plugin)": true,
"Allow Owner's Teammates (Rust Team)": true,
"Allow Owner's Clanmates (Clans plugin)": true
}
Authed Players Can Grade-- Players authed on the dominating tool cupboard can grade. This is the most common access path- `Building Owner And Allies Can Grade -- The original block owner and their allies (per the toggles below) can grade even without TC auth
Allow Owner's Friends-- Allies includes Friends-linked friends of the ownerAllow Owner's Teammates-- Allies includes Rust team members of the ownerAllow Owner's Clanmates-- Allies includes Clans clanmates of the owner
buildinggrades.admin) bypass all access checks.BetterNoEscape Settings
JSON:
"BetterNoEscape Settings (raid/combat block lockout)": {
"Deny Grade/Skin/Wallpaper Actions While Raid-Blocked": true,
"Deny Grade/Skin/Wallpaper Actions While Combat-Blocked": true
}
Deny Grade/Skin/Wallpaper Actions While Raid-Blocked-- Refuses all grade, skin, and wallpaper actions when the player is raid-blocked. The HUD shows a countdownDeny Grade/Skin/Wallpaper Actions While Combat-Blocked-- Same but for combat block
Section Permissions
JSON:
"Section Permissions (lock UI sections behind perms)": {
"Auto-Grade Permission (e.g. buildinggrades.vip.auto, blank = open to all)": "",
"Aura Permission (e.g. buildinggrades.vip.aura, blank = open to all)": "",
"Block Filter Permission (e.g. buildinggrades.vip.filter, blank = open to all)": "",
"Building Skins Permission (e.g. buildinggrades.vip.skins, blank = open to all)": "",
"Wallpapers Permission (e.g. buildinggrades.vip.wallpapers, blank = open to all)": "",
"External Walls Permission (e.g. buildinggrades.vip.externals, blank = open to all)": "buildinggrades.vip.externals"
}
buildinggrades.use. Set a non-empty string and the plugin auto-registers the permission and locks the section behind it. Strings without a . are prefixed with buildinggrades. automatically.Auto-Grade Permission-- Locks the auto-grade UI sectionAura Permission-- Locks aura modeBlock Filter Permission-- Locks the block type filterBuilding Skins Permission-- Locks all skin selection and the per-grade skin dropdownsWallpapers Permission-- Locks all wallpaper selectionExternal Walls Permission-- Locks tier stepping on high external walls and gates. Defaults to buildinggrades.vip.externals
buildinggrades.admin) bypasses all section permissions.Block Type Filter Settings
JSON:
"Block Type Filter Settings": {
"Block Types (shortname to sprite path)": {
"foundation": "assets/prefabs/building core/foundation.triangle/foundation.triangle.png",
"foundation.triangle": "assets/prefabs/building core/foundation.triangle/foundation.triangle.png",
"floor": "assets/prefabs/building core/floor/floor.png",
"wall": "assets/prefabs/building core/wall/wall.png",
"wall.window": "assets/prefabs/building core/wall.window/wall.window.png",
"stairs.l": "assets/prefabs/building core/stairs.l/stairs_l.png",
"roof": "assets/prefabs/building core/roof/roof.png"
}
}
Block Types-- Dictionary mapping block prefab shortnames to icon sprite paths used in the block filter dropdown. Adding a new entry exposes that block type for filtering; removing one hides it from the UI
Stored Data
JSON:
{
"Player Preferences": {
"76561198000000000": {
"Auto Upgrade Target Grade": 2,
"Auto Disable Timer Seconds": 300,
"Hammer Tool Active": true,
"Hammer Tool Manually Disabled": false,
"Hammer Direction Is Upgrade": true,
"Hammer Scope Index": 0,
"Wood Grade Skin Id": 0,
"Stone Grade Skin Id": 10220,
"Metal Grade Skin Id": 10221,
"Top Tier Grade Skin Id": 0,
"Metal Container Color Id": 5,
"Use Random Metal Color": false,
"Wall Surface Wallpaper Id": 0,
"Floor Surface Wallpaper Id": 0,
"Ceiling Surface Wallpaper Id": 0,
"Disabled Block Types": [ "stairs.l", "stairs.u" ],
"Auto Disable Timer Enabled": true,
"Cursor Free Movement": false,
"External Wall Target Tier Index": -1,
"External Gate Target Tier Index": -1,
"Auto Upgrade Externals On Placement": false
}
}
}
Localization
JSON:
{
"Error.NoPermission": "<color=#E07070>No permission.</color>",
"Error.NoPermissionUse": "<color=#E07070>No access. Missing: buildinggrades.use</color>",
"Error.NoResources": "<color=#E07070>Not enough resources.</color>",
"Error.NotLookingAt": "<color=#E07070>Not looking at a building block.</color>",
"Error.RaidBlocked": "<color=#E07070>Raid blocked.</color>",
"Error.CombatBlocked": "<color=#E07070>Combat blocked.</color>",
"Auto.SetGrade": "Auto-upgrade: {0}. Timer: {1}s.",
"Auto.Disabled": "Auto-upgrade off.",
"Auto.DisabledAuto": "Auto-upgrade off (timer expired).",
"Bulk.StartUpgrade": "Starting upgrade...",
"Bulk.FinishedUpgrade": "{0} blocks upgraded.",
"Bulk.Progress": "Processing {0}/{1} blocks",
"Single.Upgraded": "Upgraded to {0}",
"Single.Downgraded": "Downgraded to {0}",
"Undo.Complete": "{0} blocks restored.",
"Undo.NothingToUndo": "Nothing to undo.",
"Undo.Expired": "Undo window expired.",
"Hammer.Enabled": "Hammer tool on ({0}, {1}).",
"Hammer.Disabled": "Hammer tool off.",
"Aura.Activated": "Aura on. Target {0}, radius {1}m.",
"Aura.Deactivated": "Aura off ({0} blocks graded).",
"Aura.NeedHammer": "Aura needs hammer equipped.",
"Notify.HammerEnabled": "Hammer tool ON. Hit blocks to change grade.",
"Notify.SectionLocked": "{0} is a VIP perk on this server. Rank up by playing, or grab VIP from the store to unlock it.",
"Notify.NoAccessToBuilding": "No access to this building.",
"Notify.SkinNotOwned": "You don't own this skin.",
"Notify.WallpapersApplied": "Wallpapers applied to {0}.",
"Notify.WallpapersStripped": "Wallpapers stripped from {0}.",
"Notify.ExternalApplied": "Tiered up {0} toward target.",
"Notify.ExternalNoTarget": "Set a wall or gate target tier first.",
"Notify.HudNoAuth": "No auth on this base, can't grade it",
"Notify.HudGradingInProgress": "Grading in progress..."
}
Developer API
API_TryChangeBlockGrade
C#:
bool API_TryChangeBlockGrade(BasePlayer player, BuildingBlock block, int targetGrade)
targetGrade. Respects all access, cost, and refund logic. Returns true on success.API_TryApplyBlockSkin
C#:
bool API_TryApplyBlockSkin(BasePlayer player, BuildingBlock block, ulong skinId)
CanBuildingGradesApplySkin hook. Returns true on success.API_TryApplyBlockWallpaper
C#:
bool API_TryApplyBlockWallpaper(BasePlayer player, BuildingBlock block, int side, ulong wallpaperId)
side is 0 (soft) or 1 (hard). Skin id0 or 1 strips existing wallpaper. Returns true on success.API_TryGradeBuilding
C#:
int API_TryGradeBuilding(BasePlayer player, BuildingBlock anchorBlock, int targetGrade, bool isUpgrade)
anchorBlock toward targetGrade. Returns the number of blocks successfully graded.API_GetGradeUpgradeCost
C#:
Dictionary<int, int> API_GetGradeUpgradeCost(BuildingBlock block, int targetGrade)
targetGrade, keyed by item ID. Returns an empty dictionary on invalid input.Developer Hooks
CanBuildingGradesChangeGrade
C#:
object CanBuildingGradesChangeGrade(BasePlayer player, BuildingBlock block, BuildingGrade.Enum fromGrade, BuildingGrade.Enum toGrade)
null to allow it.CanBuildingGradesApplySkin
C#:
object CanBuildingGradesApplySkin(BasePlayer player, BuildingBlock block, ulong skinId)
null to allow it.CanBuildingGradesApplyWallpaper
C#:
object CanBuildingGradesApplyWallpaper(BasePlayer player, BuildingBlock block, int side, ulong wallpaperId)
side is 0 for soft side, 1 for hard side). Return any non-null value to block the wallpaper application, or null to allow it.OnBuildingGradesGradeChanged
C#:
void OnBuildingGradesGradeChanged(BasePlayer player, BuildingBlock block, BuildingGrade.Enum fromGrade, BuildingGrade.Enum toGrade)
OnBuildingGradesBulkCompleted
C#:
void OnBuildingGradesBulkCompleted(BasePlayer player, bool isUpgrade, int successCount, int totalCount)