{"title":"Best Selling","description":"","products":[{"product_id":"payback","title":"Payback","description":"\u003cp\u003e\u003cstrong\u003e60 creative ways to deal with cheaters — 12 brand new.\u003c\/strong\u003e Payback gives admins an arsenal of punishment cards — from butterfingers that make cheaters drop their gun, to bee swarms that chase them across the map, to loading them into a cannon and launching them into the ocean. Stack multiple cards on one player. Apply to their entire team. All from an in-game admin panel.\u003c\/p\u003e\n\n\u003cp\u003eBattle-tested on Mango, Vortex, and Rustopia. Rust devs confirmed this plugin is allowed on \u003cstrong\u003eCommunity and Official\u003c\/strong\u003e servers.\u003c\/p\u003e\n\n\u003cdiv style=\"position: relative; width: 100%; padding-bottom: 56.25%; height: 0; overflow: hidden;\"\u003e\n\u003ciframe style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" src=\"https:\/\/www.youtube.com\/embed\/SQC3o9Ibyf0?start=236\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"\u003e\u003c\/iframe\u003e\n\u003c\/div\u003e\n\n\u003ch3\u003eHow It Works\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eLook at a player and run a command\u003c\/strong\u003e — or target by name or SteamID\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCards stack\u003c\/strong\u003e — Drunk + Spinbot + Swarm on the same player. Maximum chaos.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eTeam mode\u003c\/strong\u003e — add \u003ccode\u003eteam\u003c\/code\u003e after any command to hit the whole squad\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003ePersist across restarts\u003c\/strong\u003e — cards survive server restarts and plugin reloads (configurable)\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eZero dependencies\u003c\/strong\u003e — drop it in and go\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eAll 60 Cards (12 New)\u003c\/h3\u003e\n\n\u003ch4\u003eCombat\u003c\/h4\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eCard\u003c\/th\u003e\n\u003cth\u003eAlias\u003c\/th\u003e\n\u003cth\u003eWhat It Does\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ePacifism\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003epf\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eTarget deals zero player damage. Attacked players get notified that a known cheater can't hurt them.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eButterfingers\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003ebf\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003e% chance to drop weapon when shooting. Scales with magazine size.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eInstantKarma\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003ein\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eZero damage output + 35% of damage reflected back to them.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eDud\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003c\/td\u003e\n\u003ctd\u003eZero damage to non-player entities. No farming, no raiding, no tool use.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eOverCompensation\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003erecoil\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eMassive recoil on every shot.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eBlowback\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003ebb\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eTarget is flung backwards when they damage another player. Add \u003ccode\u003ekill\u003c\/code\u003e for lethal force.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eBuggedGun\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003ebug\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eWeapons randomly malfunction and unequip.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eDrNo\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003edr\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eTarget can no longer heal from any source.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eMasochist\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003ems\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ePrevent F1 kill — no easy escape.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cstrong\u003eTaxman\u003c\/strong\u003e \u003cspan style=\"color: #4CAF50; font-weight: bold; font-size: 0.8em;\"\u003eNEW\u003c\/span\u003e\n\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003etax\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eSilently deletes a % of all resources gathered. Add 1-100 to set the tax rate.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch4\u003eCaptures\u003c\/h4\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eCard\u003c\/th\u003e\n\u003cth\u003eAlias\u003c\/th\u003e\n\u003cth\u003eWhat It Does\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eSit\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003c\/td\u003e\n\u003ctd\u003eSpawn a chair, force them to sit. They respawn back into it. Add \u003ccode\u003ebeach\u003c\/code\u003e or \u003ccode\u003egamer\u003c\/code\u003e for chair variants.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eHogwild\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003ehog\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eAdmin mounts and rides the cheater around like a pig.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eSpitroast\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003eroast\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ePin target to a rotisserie spit over a fire. Add \u003ccode\u003efast\u003c\/code\u003e for extra spin.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eTrain\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003etr\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eHogtie target to the ground, then run them over with a train.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eRecyclePlayer\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003ere\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eFeed the cheater into a recycler.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eInterrogate\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003esack\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eHood over their head — they can't see unless they speak. Supports spectate mode.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cstrong\u003eCannonball\u003c\/strong\u003e \u003cspan style=\"color: #4CAF50; font-weight: bold; font-size: 0.8em;\"\u003eNEW\u003c\/span\u003e\n\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003ecb\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eLoad target into a cannon. Admin mounts to aim, lights the fuse, fires. Add \u003ccode\u003ekill\u003c\/code\u003e for lethal landing.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cstrong\u003eCatapultLaunch\u003c\/strong\u003e \u003cspan style=\"color: #4CAF50; font-weight: bold; font-size: 0.8em;\"\u003eNEW\u003c\/span\u003e\n\u003c\/td\u003e\n\u003ctd\u003e\n\u003ccode\u003ecat\u003c\/code\u003e \/ \u003ccode\u003eyeet\u003c\/code\u003e\n\u003c\/td\u003e\n\u003ctd\u003eLoad target into a catapult. Admin aims and fires.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch4\u003eLaunches\u003c\/h4\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eCard\u003c\/th\u003e\n\u003cth\u003eAlias\u003c\/th\u003e\n\u003cth\u003eWhat It Does\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eRocketman\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003erm\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eStrap a rocket to them and launch.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ePoopRocket\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\n\u003ccode\u003epoop\u003c\/code\u003e \/ \u003ccode\u003epr\u003c\/code\u003e\n\u003c\/td\u003e\n\u003ctd\u003ePropelled through the air using organic fuel systems.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eHigherGround\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003ehg\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eTeleported 100m into the air.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eAirStrike\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003eas\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eF-15 fighter jet annihilates the target. Add \u003ccode\u003eprecision\u003c\/code\u003e to target what you're looking at.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eBonk\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003ebk\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eTarget is bonked into the ground.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eFingerbang\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003c\/td\u003e\n\u003ctd\u003eFinger gun — ragdolls the target on hit. Add \u003ccode\u003ekill\u003c\/code\u003e for lethal shots.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch4\u003eCreatures\u003c\/h4\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eCard\u003c\/th\u003e\n\u003cth\u003eAlias\u003c\/th\u003e\n\u003cth\u003eWhat It Does\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eChickenChaser\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003ech\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eHorde of super-speed animals that only attack the target. Supports: chicken, bear, wolf, boar, stag, tiger, panther, croc, zombie, or \u003ccode\u003eall\u003c\/code\u003e. Add \u003ccode\u003einvincible\u003c\/code\u003e.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eShark\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003ejaws\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eA shark swims in and drags the target underwater.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cstrong\u003eSwarm\u003c\/strong\u003e \u003cspan style=\"color: #4CAF50; font-weight: bold; font-size: 0.8em;\"\u003eNEW\u003c\/span\u003e\n\u003c\/td\u003e\n\u003ctd\u003e\n\u003ccode\u003esw\u003c\/code\u003e \/ \u003ccode\u003ebees\u003c\/code\u003e\n\u003c\/td\u003e\n\u003ctd\u003eAngry bee swarms chase the target. Add 1-50 for count. Bees die in water, smoke, or fire.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eWoods\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003ebear\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eA bear attacks when target farms wood or stone. Add \u003ccode\u003elandmine\u003c\/code\u003e to strap mines to the bear's face.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch4\u003eDisorientation\u003c\/h4\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eCard\u003c\/th\u003e\n\u003cth\u003eAlias\u003c\/th\u003e\n\u003cth\u003eWhat It Does\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eBSOD\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003ebs\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eFake blue-screen-of-death. Add \u003ccode\u003epublic\u003c\/code\u003e to show it to everyone.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ePotatoMode\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003epotato\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eFrame rate crashes over time. Add 1-100 to control speed.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eLagSwitch\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003elag\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eConstant rubberbanding. Add a number to change simulated ping.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eFlash\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003efl\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eFlashbanged repeatedly.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cstrong\u003eSpinbot\u003c\/strong\u003e \u003cspan style=\"color: #4CAF50; font-weight: bold; font-size: 0.8em;\"\u003eNEW\u003c\/span\u003e\n\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003espin\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eCamera spins with escalating intensity — 30 deg\/s to 360+ deg\/s over 60 seconds.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cstrong\u003eEarthquake\u003c\/strong\u003e \u003cspan style=\"color: #4CAF50; font-weight: bold; font-size: 0.8em;\"\u003eNEW\u003c\/span\u003e\n\u003c\/td\u003e\n\u003ctd\u003e\n\u003ccode\u003eeq\u003c\/code\u003e \/ \u003ccode\u003equake\u003c\/code\u003e\n\u003c\/td\u003e\n\u003ctd\u003eEscalating screen shake and rumble. Gets more intense over time.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cstrong\u003eDrunk\u003c\/strong\u003e \u003cspan style=\"color: #4CAF50; font-weight: bold; font-size: 0.8em;\"\u003eNEW\u003c\/span\u003e\n\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003edk\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eScreen blur + view wobble + stumble + vomit FX. Hydration zeroed out.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch4\u003eHumiliation\u003c\/h4\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eCard\u003c\/th\u003e\n\u003cth\u003eAlias\u003c\/th\u003e\n\u003cth\u003eWhat It Does\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eNaked\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003enk\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eForce drop entire inventory.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ePinyata\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003epin\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eInventory explodes out of them on death.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cstrong\u003eSnitch\u003c\/strong\u003e \u003cspan style=\"color: #4CAF50; font-weight: bold; font-size: 0.8em;\"\u003eNEW\u003c\/span\u003e\n\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003esn\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eBroadcasts grid position + loadout to all players every 30 seconds. Red 3D marker above their head. The whole server hunts them.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eVerbalDiarrhea\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\n\u003ccode\u003evd\u003c\/code\u003e \/ \u003ccode\u003eshitter\u003c\/code\u003e\n\u003c\/td\u003e\n\u003ctd\u003eWhen target uses voice chat, they spew increasing amounts of horse dung.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cstrong\u003eLoudfoot\u003c\/strong\u003e \u003cspan style=\"color: #4CAF50; font-weight: bold; font-size: 0.8em;\"\u003eNEW\u003c\/span\u003e\n\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003elf\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eTin can alarm triggers whenever they crouch-move.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eEmote\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003eem\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eForce target to perform an emote. Add emote name or \u003ccode\u003elist\u003c\/code\u003e to see options.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cstrong\u003eCarrot\u003c\/strong\u003e \u003cspan style=\"color: #4CAF50; font-weight: bold; font-size: 0.8em;\"\u003eNEW\u003c\/span\u003e\n\u003c\/td\u003e\n\u003ctd\u003e\u003c\/td\u003e\n\u003ctd\u003eA floating item dances just out of reach ahead of the player. Perpetually unreachable.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cstrong\u003eSkibidi\u003c\/strong\u003e \u003cspan style=\"color: #4CAF50; font-weight: bold; font-size: 0.8em;\"\u003eNEW\u003c\/span\u003e\n\u003c\/td\u003e\n\u003ctd\u003e\u003c\/td\u003e\n\u003ctd\u003eMount player in a toilet with continuous rotation. Yes, really.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch4\u003eTraps \u0026amp; Hazards\u003c\/h4\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eCard\u003c\/th\u003e\n\u003cth\u003eAlias\u003c\/th\u003e\n\u003cth\u003eWhat It Does\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eDogDoo\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003edog\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eLandmine spawns under them when they access a stash.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eMinefield\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003emine\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eContinuous minefield generated around target (only hurts them). Add 1-100 for density.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eShocker\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003esh\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eTesla coil mounted to target. Shocked to death. Affects nearby — disable after use.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eRadiation\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003erad\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eMassive radiation damage.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eSlowBurn\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003esb\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eBurned slowly over time.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eThirsty\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003eth\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eDehydrates rapidly.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cstrong\u003eButterhooves\u003c\/strong\u003e \u003cspan style=\"color: #4CAF50; font-weight: bold; font-size: 0.8em;\"\u003eNEW\u003c\/span\u003e\n\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003ebh\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eInverts vehicle controls. Add \u003ccode\u003eforward too\u003c\/code\u003e to also reverse movement.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eStickyBomb\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003c\/td\u003e\n\u003ctd\u003eAttach C4 to target player. Detonate at will.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eNoPickup\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003c\/td\u003e\n\u003ctd\u003eTarget always drops items when they try to pick them up.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch4\u003eAdmin Tools\u003c\/h4\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eCard\u003c\/th\u003e\n\u003cth\u003eAlias\u003c\/th\u003e\n\u003cth\u003eWhat It Does\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eDana\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003esteal\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eSteal target's entire inventory into yours.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eViewLoot\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003eloot\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eView target's full inventory in real time.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eHammer\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003eham\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eDestroy all entities owned by whoever you hit. Add \u003ccode\u003e-noloot\u003c\/code\u003e to delete loot too. Add 10-200 for radius.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eBag\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003ebg\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ePrint all players who bagged the target in, and all players they bagged. Add \u003ccode\u003ediscord\u003c\/code\u003e to log.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eBatman\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003ebat\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eAdmin gets a bat. Sprint to triple power. Headshots kill.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eBurn\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003ebu\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eAdmin gets a flamethrower.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eNoRest\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003enr\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eForce respawn on death. No rest for the wicked.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eListen\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003c\/td\u003e\n\u003ctd\u003eCycle through players using voice chat. Great for catching mic spam.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003eAdmin Panel\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eIn-game UI\u003c\/strong\u003e — browse all 60 cards by category, search, apply with one click\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eLive status display\u003c\/strong\u003e — see all active cards on screen with animations\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCard categories\u003c\/strong\u003e — Combat, Pain, Capture, Damage, Investigate, Status, New, Misc\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eFavorites\u003c\/strong\u003e — save your go-to cards for quick access\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eSound effects\u003c\/strong\u003e — audio feedback on every action\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eTargeting\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c\/th\u003e\n\u003cth\u003eExample\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eLook at player\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003e\/sit\u003c\/code\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eBy name\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003e\/sit PlayerName\u003c\/code\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eBy SteamID\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003e\/sit 76561198012345678\u003c\/code\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eEntire team\u003c\/td\u003e\n\u003ctd\u003e\u003ccode\u003e\/sit PlayerName team\u003c\/code\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003eDiscord Integration\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eCommand logging\u003c\/strong\u003e — log every payback action to a Discord webhook with admin name, card, and target\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eGame ban detection\u003c\/strong\u003e — get notified the moment a player on your server receives a game ban\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eTeam logging\u003c\/strong\u003e — log the teammates of banned players\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eCard Persistence\u003c\/h3\u003e\n\u003cp\u003eCards can survive server restarts and plugin reloads. Toggle persistence in config. Active cards are saved and automatically reapplied when the target reconnects. A cheater logging off doesn't save them.\u003c\/p\u003e\n\n\u003chr\u003e\n\u003ch3\u003ePermissions\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003ePermission\u003c\/th\u003e\n\u003cth\u003eDefault\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003epayback3.admin\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eManual grant\u003c\/td\u003e\n\u003ctd\u003eAccess to all payback commands and admin panel\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003eCommands\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eCommand\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/payback\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eOpen admin panel\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/payback show\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eList all active cards on all players\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/payback clear\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eRemove all cards from all players\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/\u0026lt;card\u0026gt; \u0026lt;target\u0026gt;\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eApply a card (e.g. \u003ccode\u003e\/sit PlayerName\u003c\/code\u003e)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/\u0026lt;card\u0026gt; \u0026lt;target\u0026gt; team\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eApply to target and their entire team\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003cdiv style=\"position: relative; width: 100%; padding-bottom: 56.25%; height: 0; overflow: hidden;\"\u003e\n\u003ciframe style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" src=\"https:\/\/www.youtube.com\/embed\/U16h4QtGjHQ\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"\u003e\u003c\/iframe\u003e\n\u003c\/div\u003e\n\n\u003cdiv style=\"position: relative; width: 100%; padding-bottom: 56.25%; height: 0; overflow: hidden; margin-top: 20px;\"\u003e\n\u003ciframe style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" src=\"https:\/\/www.youtube.com\/embed\/eePLwrv9xEI\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"\u003e\u003c\/iframe\u003e\n\u003c\/div\u003e\n\n\u003cdiv style=\"position: relative; width: 100%; padding-bottom: 56.25%; height: 0; overflow: hidden; margin-top: 20px;\"\u003e\n\u003ciframe style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" src=\"https:\/\/www.youtube.com\/embed\/M3iFdfFUBrE\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"\u003e\u003c\/iframe\u003e\n\u003c\/div\u003e\n\n\u003cdiv style=\"position: relative; width: 100%; padding-bottom: 56.25%; height: 0; overflow: hidden; margin-top: 20px;\"\u003e\n\u003ciframe style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" src=\"https:\/\/www.youtube.com\/embed\/7z8V9cJWt5s\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"\u003e\u003c\/iframe\u003e\n\u003c\/div\u003e\n\n\u003cdiv style=\"position: relative; width: 100%; padding-bottom: 56.25%; height: 0; overflow: hidden; margin-top: 20px;\"\u003e\n\u003ciframe style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" src=\"https:\/\/www.youtube.com\/embed\/K6xVMrjusr0\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"\u003e\u003c\/iframe\u003e\n\u003c\/div\u003e\n\n\u003cdiv style=\"position: relative; width: 100%; padding-bottom: 56.25%; height: 0; overflow: hidden; margin-top: 20px;\"\u003e\n\u003ciframe style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" src=\"https:\/\/www.youtube.com\/embed\/CYmLr5FznZE\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"\u003e\u003c\/iframe\u003e\n\u003c\/div\u003e\n\n\u003cp\u003e\u003cstrong\u003eSupport\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eFor all questions and feedback, dm me (1928tommygun) on my discord at \u003ca href=\"https:\/\/discord.fragmod.com\"\u003ediscord.fragmod.com\u003c\/a\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003e\u003cstrong\u003eLicense\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eTOMMYGUN'S EULA – BY USING THIS PLUGIN YOU AGREE TO THE FOLLOWING!\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eCode contained in this file is not licensed to be copied, shared, resold, or modified in any way.\u003c\/li\u003e\n\u003cli\u003eYou may copy the plugin freely to each server instance that your organization \u003cstrong\u003eowns\u003c\/strong\u003e.\u003c\/li\u003e\n\u003cli\u003eDo not share this plugin with other server organizations — they must purchase their own licenses.\u003c\/li\u003e\n\u003c\/ul\u003e\n","brand":"1928tommygun","offers":[{"title":"Default Title","offer_id":42151324287228,"sku":"1","price":30.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0613\/6079\/9996\/files\/01_image_47aaec15-ea0a-4640-8030-fac0c9b6c0e7.jpg?v=1775867867"},{"product_id":"monumental-signs","title":"Monumental Signs","description":"\u003cp\u003e\u003cstrong\u003eCustom signage at every monument. On every wipe.\u003c\/strong\u003e Monumental Signs pins custom image-URL signs to any monument and keeps them there forever — through wipes, map changes, server restarts. Server branding, sponsor banners, event ads, live leaderboards. Set once, forget.\u003c\/p\u003e\n\n\u003cdiv style=\"position: relative; width: 100%; padding-bottom: 56.25%; height: 0; overflow: hidden;\"\u003e\n\u003ciframe style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" src=\"https:\/\/www.youtube.com\/embed\/wnV7p689_-s\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"\u003e\u003c\/iframe\u003e\n\u003c\/div\u003e\n\n\u003ch3\u003eWhy This Is Different\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eWipe-proof\u003c\/strong\u003e — signs persist through wipes, map changes, and server restarts. Set once, never re-place.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003ePer-monument-type\u003c\/strong\u003e — place a sign at one Oxum's Gas Station, every Oxum's on the map gets it. No per-spawn re-work.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eIndestructible\u003c\/strong\u003e — players can't break, grief, or move them. Signs survive raids, explosions, anything.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eAuto-refreshing\u003c\/strong\u003e — set a per-URL refresh timer. Live leaderboards, sponsor rotations, dynamic event content all update on schedule.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom map support\u003c\/strong\u003e — works with any custom map that uses MonumentInfo objects (most do).\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eUse Cases\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eServer branding\u003c\/strong\u003e — your server logo and Discord link at every major monument\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eSponsor banners\u003c\/strong\u003e — sell monument-billboard slots to community members or external sponsors\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eEvent ads\u003c\/strong\u003e — Halloween server, weekend double-XP, wipe schedule announcements\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eLive leaderboards\u003c\/strong\u003e — built-in support for \u003ca href=\"https:\/\/leaderboard.chadius.io\"\u003eleaderboard.chadius.io\u003c\/a\u003e, auto-refreshes for in-world competitive standings\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eDynamic content\u003c\/strong\u003e — point at any image URL that changes server-side, set the refresh interval, done\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eFeatures\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePlace multiple signs per monument type, all positions remembered across wipes\u003c\/li\u003e\n\u003cli\u003eIndestructible — immune to player damage and entity removal\u003c\/li\u003e\n\u003cli\u003ePer-URL refresh timer in seconds, unlimited URLs\u003c\/li\u003e\n\u003cli\u003eAuto-detection of \u003ccode\u003eleaderboard.chadius.io\u003c\/code\u003e URLs with sensible 10-minute default refresh\u003c\/li\u003e\n\u003cli\u003eIn-game \u003ccode\u003e\/sign\u003c\/code\u003e command for placement, editing, refresh config\u003c\/li\u003e\n\u003cli\u003eSign data persists in plugin storage, not entity save — survives full map regen\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003chr\u003e\n\u003ch3\u003eDependencies\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eRequired:\u003c\/strong\u003e \u003ca href=\"https:\/\/umod.org\/plugins\/sign-artist\"\u003eSignArtist\u003c\/a\u003e (free, uMod) — handles sign image rendering\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eRecommended:\u003c\/strong\u003e \u003ca href=\"https:\/\/umod.org\/plugins\/telekinesis\"\u003eTelekinesis\u003c\/a\u003e (free, uMod) — makes positioning signs in-world easier\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eTutorial\u003c\/h3\u003e\n\u003cp\u003eUse \u003ccode\u003e\/sign\u003c\/code\u003e in-game for the full command list and a built-in step-by-step tutorial.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eSupport\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eFor all questions and feedback, dm me (1928tommygun) on my discord at \u003ca href=\"https:\/\/discord.fragmod.com\"\u003ediscord.fragmod.com\u003c\/a\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003e\u003cstrong\u003eLicense\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eTOMMYGUN'S EULA – BY USING THIS PLUGIN YOU AGREE TO THE FOLLOWING!\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eCode contained in this file is not licensed to be copied, shared, resold, or modified in any way.\u003c\/li\u003e\n\u003cli\u003eYou must purchase another copy of the plugin for each server instance you would like to deploy on. Migration is allowed.\u003c\/li\u003e\n\u003cli\u003eDo not share this plugin with other server organizations — they must purchase their own licenses.\u003c\/li\u003e\n\u003c\/ul\u003e\n","brand":"1928tommygun","offers":[{"title":"Default Title","offer_id":42152165146876,"sku":"MS01","price":15.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0613\/6079\/9996\/files\/01_image.jpg?v=1772846912"},{"product_id":"pickups","title":"Pickups","description":"\u003cp\u003ePlace pickups that levitate and can be picked up by players!  You can create pickups for anything, weapons, ammo, scrap, whatever you like!  Great for role-play items in a safe zone.  Inspired by the floating coins in Mario!  Items respawn after a delay when there are no players nearby!\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cdiv style=\"position: relative; width: 100%; padding-bottom: 56.25%; height: 0; overflow: hidden;\"\u003e\n\u003ciframe style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" src=\"https:\/\/www.youtube.com\/embed\/MVnz3Q2ONHo\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"\u003e\u003c\/iframe\u003e\n\u003c\/div\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003eYou need permission to use this plugin:\u003c\/p\u003e\n\u003cp\u003eoxide.grant group admin \u003cstrong\u003epickups.admin\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003ePut the command \u003cem\u003e\u003cstrong\u003epickup\u003c\/strong\u003e \u003c\/em\u003einto the F1 console to see and use the commands\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003epickup add \u0026lt;amount\u0026gt; \u0026lt;itemid\u0026gt;\u003c\/strong\u003e | add a pickup at your location | -rotate changes the default orientation -axis changes the rotation axis (play with these if it doesn't look right)\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003epickup kill\u003c\/strong\u003e | kill the nearest pickup | -all kills all pickups\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003epickup respawn\u003c\/strong\u003e | respawns all the pickups immediately\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003epickup cooldown \u0026lt;duration\u0026gt;\u003c\/strong\u003e | set the respawn cooldown for the nearest pickup | -all applies to all pickups\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003epickup save\u003c\/strong\u003e | Save the current config\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eFind itemids at https:\/\/umod.org\/documentation\/games\/rust\/definitions#items\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003eFor support, contact tommygun directly at discord.fragmod.com\u003c\/p\u003e","brand":"1928tommygun","offers":[{"title":"Default Title","offer_id":42837941027068,"sku":"Pickups01","price":5.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0613\/6079\/9996\/products\/pickups.png?v=1648758360"},{"product_id":"forcesaber","title":"Force Saber","description":"\u003cp\u003e\u003cstrong\u003eCross sabers. Push, pull, parry. Win the duel.\u003c\/strong\u003e Force Saber adds energy sabers, telekinetic powers, and a skill-based melee combat system to Rust — block, parry, clash, push, pull, double-jump-flip. Every duel is a timing fight, not a damage-trade.\u003c\/p\u003e\n\n\u003cdiv style=\"position: relative; width: 100%; padding-bottom: 56.25%; height: 0; overflow: hidden;\"\u003e\n\u003ciframe style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" src=\"https:\/\/www.youtube.com\/embed\/Mu8idlNHuvA\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen=\"\"\u003e\u003c\/iframe\u003e\n\u003c\/div\u003e\n\n\u003ch3\u003eWhy This Is Different\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eSkill-based melee, not stat-based\u003c\/strong\u003e — block, parry, clash, and disarm are timing-based mechanics that reward reflexes over loadout\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eFull kinetic toolkit\u003c\/strong\u003e — push, pull, jump, and double-jump-flip in any direction. Real combat positioning, not just damage.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHeadshots are 1-hit kills\u003c\/strong\u003e — every duel is winnable from any HP disadvantage. The skill ceiling is the only ceiling.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eFour saber skins included\u003c\/strong\u003e — pick your blade. All four share the same mechanics — pure cosmetic choice.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eKit support\u003c\/strong\u003e — any LONGSWORD with a supported skin becomes an energy saber. Drop sabers in your kit system and players unlock them as VIP perks.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003ePermission-tunable\u003c\/strong\u003e — gate saber powers behind specific perms. VIPs only, server-wide, or fine-grained control over who's empowered and who's affected.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eCombat System\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eBLOCK\u003c\/strong\u003e — hold right-click to block incoming saber attacks\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003ePARRY\u003c\/strong\u003e — hold right-click moments before impact to disable your opponent and block the strike\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCLASH\u003c\/strong\u003e — when two players strike at the same instant, both bounce back in an epic tie\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHEADSHOTS = 1HK\u003c\/strong\u003e — saber to the head is an instant kill\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eFOUR SKINS\u003c\/strong\u003e — four saber visuals included, all sharing the same combat mechanics\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eSaber Powers\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003ePush \/ Pull\u003c\/strong\u003e — send opponents flying in any direction. Knock an enemy off a cliff or yank them into your blade.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eJump \/ Double-Jump-Flip\u003c\/strong\u003e — leap, then flip mid-air for high-mobility combat positioning\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eTry Before You Buy\u003c\/h3\u003e\n\u003cp\u003eForce Saber is live on \u003cstrong\u003eTommygun's Frag\u003c\/strong\u003e. Connect to \u003ccode\u003ena.fragmod.com:28014\u003c\/code\u003e and test the combat system in-game before purchase.\u003c\/p\u003e\n\n\u003chr\u003e\n\u003ch3\u003ePermissions\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003ePermission\u003c\/th\u003e\n\u003cth\u003eDefault\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eForceSaber.spawner\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eManual grant\u003c\/td\u003e\n\u003ctd\u003eAllows spawning sabers via \u003ccode\u003e\/ForceSaber\u003c\/code\u003e command\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eForceSaber.user\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eManual grant\u003c\/td\u003e\n\u003ctd\u003eAllows wielding sabers and using saber powers. Configurable so only empowered players, only affected players, or any combination.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003eCommands\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eCommand\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/ForceSaber\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eSpawn a saber and pick from four colors\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003cp\u003e\u003cstrong\u003eSetup Note\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eIf commands aren't working, run this in console: \u003ccode\u003eoxide.grant group admin ForceSaber.spawner\u003c\/code\u003e\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eSupport\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eFor all questions and feedback, dm me (1928tommygun) on my discord at \u003ca href=\"https:\/\/discord.fragmod.com\"\u003ediscord.fragmod.com\u003c\/a\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003e\u003cstrong\u003eLicense\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eTOMMYGUN'S EULA – BY USING THIS PLUGIN YOU AGREE TO THE FOLLOWING!\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eCode contained in this file is not licensed to be copied, shared, resold, or modified in any way.\u003c\/li\u003e\n\u003cli\u003eYou may copy the plugin freely to each server instance that your organization \u003cstrong\u003eowns\u003c\/strong\u003e. I ask for an optional tip if you're a large server organization — suggested rate: one copy per 10 servers.\u003c\/li\u003e\n\u003cli\u003eDo not share this plugin with other server organizations — they must purchase their own licenses.\u003c\/li\u003e\n\u003c\/ul\u003e\n","brand":"1928tommygun","offers":[{"title":"Default Title","offer_id":44536781209852,"sku":"5","price":20.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0613\/6079\/9996\/files\/01_image_990531bc-9b66-404f-a7af-c59f897b87da.png?v=1777608496"},{"product_id":"tommygun-3d-health-bar","title":"Tommygun 3D Health Bar","description":"\u003cp\u003e\u003cstrong\u003eThe first world-space health bar for Rust.\u003c\/strong\u003e Floating 3D bars above every NPC's and player's head that move with them in the world — not a flat rectangle stuck in the corner of your screen.\u003c\/p\u003e\n\n\u003cp\u003eEvery other health bar plugin uses CUI. That means one bar at a time, screen-anchored, disconnected from the fight. Tommygun 3D Health Bar uses ddraw to render bars directly in world space. Fight 5 NPCs, see 5 bars. Each one tracks the target's head as they move. It looks like an MMO nameplate system because that's what it is.\u003c\/p\u003e\n\n\u003cp\u003eWorks on \u003cstrong\u003eNPCs and real players\u003c\/strong\u003e — toggle each independently. Use it PVE-only, PVP-only, or both.\u003c\/p\u003e\n\n\u003cdiv style=\"position: relative; width: 100%; padding-bottom: 56.25%; height: 0; overflow: hidden;\"\u003e\n\u003ciframe style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" src=\"https:\/\/www.youtube.com\/embed\/t2f9Hr23McI\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"\u003e\u003c\/iframe\u003e\n\u003c\/div\u003e\n\n\u003ch3\u003eWhy This Is Different\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eWorld-space rendering\u003c\/strong\u003e — bars float above the NPC's head in 3D, not anchored to your screen\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eMultiple bars simultaneously\u003c\/strong\u003e — every damaged NPC shows its own bar at the same time\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eZero dependencies\u003c\/strong\u003e — no ImageLibrary, no other plugins required. Just drop it in.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eLine-of-sight aware\u003c\/strong\u003e — bars only render when you can actually see the NPC\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eFacing detection\u003c\/strong\u003e — bars behind you don't render, keeping your view clean\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eFeatures\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003e8 built-in themes:\u003c\/strong\u003e Default, Neon, Blood, Military, Ice, Minimal, Gold, Retro\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003e5 bar styles:\u003c\/strong\u003e Solid (▓▒), Block (■□), Pipe (┃┏), Dots (●○), ASCII (#-), or set your own custom characters\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003e3 size presets:\u003c\/strong\u003e Small, Medium, Large\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHealth gradient:\u003c\/strong\u003e Green → Yellow → Red as health drops, fully configurable thresholds and colors\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom colors:\u003c\/strong\u003e Full HSVA color picker for fill, empty, and text — make it match your server's brand\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003ePer-player preferences:\u003c\/strong\u003e Players pick their own theme, style, and size via \u003ccode\u003e\/hb\u003c\/code\u003e settings panel\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eDeath linger:\u003c\/strong\u003e Bar stays visible briefly after a kill so you see the satisfying 0%\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eDamage window:\u003c\/strong\u003e Bars appear when you deal damage and fade after 16 seconds (configurable)\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eAttacker-only mode:\u003c\/strong\u003e Optionally only show bars to the player who dealt damage\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eSupports Everything\u003c\/h3\u003e\n\u003cp\u003eWorks with \u003cstrong\u003e17 built-in NPC types\u003c\/strong\u003e out of the box:\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eVanilla: Scientists, Tunnel Dwellers, Underwater Dwellers, Scarecrows, Gingerbread, Bandit Guards\u003c\/li\u003e\n\u003cli\u003eAnimals: Bears, Polar Bears, Wolves, Boars, Stags, Chickens, Zombies\u003c\/li\u003e\n\u003cli\u003ePlugin NPCs: Full support for BotReSpawn, BetterNPC, Raidable Bases, and any plugin that spawns HumanNPC or NPCPlayer entities\u003c\/li\u003e\n\u003cli\u003ePlayer health bars: optional, toggle on\/off independently\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eEach NPC type can be individually enabled\/disabled with custom display names and bar height offsets.\u003c\/p\u003e\n\n\u003ch3\u003ePerformance\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDistance culling — bars beyond 50m (configurable) don't render\u003c\/li\u003e\n\u003cli\u003eLine-of-sight raycasting — no bars through walls\u003c\/li\u003e\n\u003cli\u003ePer-player bar cap — max 10 simultaneous bars (configurable)\u003c\/li\u003e\n\u003cli\u003eConfigurable refresh rate (1-120 FPS tick)\u003c\/li\u003e\n\u003cli\u003eSmooth position interpolation — no jitter, no jumps\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eSettings Panel\u003c\/h3\u003e\n\u003cp\u003ePlayers open \u003ccode\u003e\/hb\u003c\/code\u003e to get a full in-game settings UI with 5 tabs:\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eGeneral:\u003c\/strong\u003e Toggle bars, HP display, percentage, line-of-sight, NPC\/player filtering\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eAppearance:\u003c\/strong\u003e Pick from 8 themes with live preview\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustomize:\u003c\/strong\u003e Choose bar style, size, and custom characters\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eColors:\u003c\/strong\u003e HSVA color pickers for fill, empty, and text colors\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eAdmin:\u003c\/strong\u003e Server-wide refresh rate, apply settings to all players, reload config\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003chr\u003e\n\u003ch3\u003ePermissions\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003ePermission\u003c\/th\u003e\n\u003cth\u003eDefault\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etommygun3dhb.use\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eAll players (auto-granted)\u003c\/td\u003e\n\u003ctd\u003eSee health bars on NPCs and entities\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etommygun3dhb.customize\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eManual grant\u003c\/td\u003e\n\u003ctd\u003eAccess theme, style, and size customization in the settings panel\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etommygun3dhb.customize.colors\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eManual grant\u003c\/td\u003e\n\u003ctd\u003eAccess HSVA color pickers for custom fill, empty, and text colors\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etommygun3dhb.admin\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eManual grant\u003c\/td\u003e\n\u003ctd\u003eAdmin tab in settings panel — server-wide refresh rate, apply to all, reload config\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003eChat Commands\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eCommand\u003c\/th\u003e\n\u003cth\u003ePermission\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/hb\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003etommygun3dhb.use\u003c\/td\u003e\n\u003ctd\u003eOpen the settings panel (5 tabs: General, Appearance, Customize, Colors, Admin)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/hbadmin reload\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003etommygun3dhb.admin\u003c\/td\u003e\n\u003ctd\u003eReload config from file\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/hbadmin reset\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003etommygun3dhb.admin\u003c\/td\u003e\n\u003ctd\u003eReset all settings to defaults\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/hbadmin stats\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003etommygun3dhb.admin\u003c\/td\u003e\n\u003ctd\u003eShow performance stats (active bars, tracked entities, refresh rate)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003ePlugin API (for developers)\u003c\/h3\u003e\n\u003cp\u003eOther plugins can register custom NPC types and control health bars at runtime:\u003c\/p\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c\/th\u003e\n\u003cth\u003eReturns\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_RegisterNPCType(string typeKey, string displayName, float barYOffset)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003evoid\u003c\/td\u003e\n\u003ctd\u003eRegister a custom NPC type with its own display name and bar positioning\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_ShowHealthBar(BaseEntity entity, string displayName, float duration)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003evoid\u003c\/td\u003e\n\u003ctd\u003eManually show a health bar on any entity\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_HideHealthBar(BaseEntity entity)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003evoid\u003c\/td\u003e\n\u003ctd\u003eManually hide a health bar\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_HasHealthBar(BaseEntity entity)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ebool\u003c\/td\u003e\n\u003ctd\u003eCheck if an entity currently has an active health bar\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\u003cp\u003e\u003cstrong\u003eHooks:\u003c\/strong\u003e\u003c\/p\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eHook\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOnHealthBarShow(BasePlayer player, BaseEntity entity, string npcType)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eCalled before a bar renders. Return non-null to block.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOnHealthBarHide(BaseEntity entity, string reason)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eCalled when a bar is removed. Reason: \"api\", \"died\", \"killed\".\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003cp\u003e\u003cstrong\u003eSupport\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eFor all questions and feedback, dm me (1928tommygun) on my discord at \u003ca href=\"https:\/\/discord.fragmod.com\"\u003ediscord.fragmod.com\u003c\/a\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003e\u003cstrong\u003eLicense\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eTOMMYGUN'S EULA – BY USING THIS PLUGIN YOU AGREE TO THE FOLLOWING!\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eCode contained in this file is not licensed to be copied, shared, resold, or modified in any way.\u003c\/li\u003e\n\u003cli\u003eYou may copy the plugin freely to each server instance that your organization \u003cstrong\u003eowns\u003c\/strong\u003e.\u003c\/li\u003e\n\u003cli\u003eDo not share this plugin with other server organizations — they must purchase their own licenses.\u003c\/li\u003e\n\u003c\/ul\u003e\n","brand":"1928tommygun","offers":[{"title":"Default Title","offer_id":48853188903164,"sku":null,"price":15.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0613\/6079\/9996\/files\/00_hero.jpg?v=1773460565"},{"product_id":"reportme","title":"ReportMe","description":"\u003cp\u003e\u003cstrong\u003e\"Go ahead. Report me.\"\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eReportMe started as a VIP perk built on Rust's F7 report system. It's now a \u003cstrong\u003eworking anti-cheat\u003c\/strong\u003e: it turns F7 reports and BattleMetrics data into \u003cstrong\u003eautomatic bans\u003c\/strong\u003e. It catches cheaters as they connect and shuts down the ones your players report, without banning your regulars.\u003c\/p\u003e\n\n\u003cp\u003eIt's still the only report plugin built for \u003cstrong\u003ethree audiences at once\u003c\/strong\u003e (VIPs, reporters, and admins), but now the admin side actually pulls the trigger.\u003c\/p\u003e\n\n\u003cdiv style=\"position: relative; width: 100%; padding-bottom: 56.25%; height: 0; overflow: hidden;\"\u003e\n\u003ciframe style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" src=\"https:\/\/www.youtube.com\/embed\/aU-NMFYW-aA\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"\u003e\u003c\/iframe\u003e\n\u003c\/div\u003e\n\n\u003ch3\u003eNow a Working Anti-Cheat\u003c\/h3\u003e\n\u003cp\u003eReportMe doesn't just surface reports anymore. It \u003cstrong\u003ebans cheaters automatically\u003c\/strong\u003e, on two independent fronts:\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eAt connect:\u003c\/strong\u003e known-bad accounts are caught and banned as they join. No admin online required.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eFrom reports:\u003c\/strong\u003e sustained F7 report pressure results in a ban, weighted by evidence so the clear cases go down fast.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eNo kernel driver, no client-side anti-cheat, nothing for players to install. It runs on the BattleMetrics API. A free API token gets you started, and connect-time detection is strongest on servers already running BattleMetrics RCON.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eIt gets stronger with your network.\u003c\/strong\u003e The more organizations you share player data with on BattleMetrics, the more alt accounts and ban history the system can see, and the more cheaters it catches the moment they connect.\u003c\/p\u003e\n\n\u003ch3\u003eWon't Ban Your Regulars\u003c\/h3\u003e\n\u003cp\u003eThe usual reason admins won't automate bans is fear of nuking legit players. ReportMe is tuned so your \u003cstrong\u003eestablished regulars are protected from false bans and report brigades\u003c\/strong\u003e. It's automated enforcement you can actually leave running.\u003c\/p\u003e\n\n\u003ch3\u003eShips Safe\u003c\/h3\u003e\n\u003cp\u003eInstalls inert and runs in \u003cstrong\u003eshadow mode\u003c\/strong\u003e by default, logging exactly what it \u003cem\u003ewould\u003c\/em\u003e ban, with the full evidence, without touching a soul. Watch it for a few days, then flip one setting to go live when you trust it.\u003c\/p\u003e\n\n\u003ch3\u003eBans, Alerts \u0026amp; Appeals\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eLocal + BattleMetrics ban\u003c\/strong\u003e in a single action, with the full evidence bundle on the ban record.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eDiscord alert on every ban.\u003c\/strong\u003e Searchable the moment an appeal lands.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eOne-command reversal.\u003c\/strong\u003e \u003ccode\u003ereportme unban \u0026lt;steamid\u0026gt;\u003c\/code\u003e clears the local and BattleMetrics ban together, so resolving a ticket is a single action.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eAppeal route in the ban message.\u003c\/strong\u003e Players are pointed to your Discord to contest it.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eFor VIP Players\u003c\/h3\u003e\n\u003cp\u003eWhen a VIP gets F7 reported, they get a styled in-game notification:\u003c\/p\u003e\n\u003cp\u003e\u003cem\u003e\"PlayerName reported you for cheating. Must be doing something right.\"\u003c\/em\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eReal-time CUI notification:\u003c\/strong\u003e color-coded banner by report type (red for cheating, orange for griefing, yellow for abuse)\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eSound effect alert:\u003c\/strong\u003e configurable sound on report\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eReport history panel:\u003c\/strong\u003e \u003ccode\u003e\/reportme\u003c\/code\u003e opens a full tabbed CUI with scrollable report list, timestamps, reporter names, and trust score\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eTrust score display:\u003c\/strong\u003e VIPs see their trust rating (High \/ Moderate \/ Below Average \/ Low), which gamifies good behavior\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eSell it as a VIP perk:\u003c\/strong\u003e grant \u003ccode\u003ereportme.vip\u003c\/code\u003e to your VIP group and you have a new perk that costs nothing to maintain\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eFor Reporters\u003c\/h3\u003e\n\u003cp\u003eWhen a player files an F7 report, they get instant feedback, not silence:\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e\"Thank you. This player has 2,400 hours in Rust and their account is 8 years old. We take all reports seriously.\"\u003c\/strong\u003e\u003c\/li\u003e\n\u003cli\u003eFeedback is \u003cstrong\u003epersonalized\u003c\/strong\u003e based on the reported player's trust data: hours, account age, server playtime, BattleMetrics cross-server hours\u003c\/li\u003e\n\u003cli\u003eIf no data is available, they still get acknowledgment: \u003cem\u003e\"We will review it.\"\u003c\/em\u003e\n\u003c\/li\u003e\n\u003cli\u003eLow-trust targets get flagged: \u003cem\u003e\"This player has been flagged and is under review.\"\u003c\/em\u003e\n\u003c\/li\u003e\n\u003cli\u003eDuplicate reports within 24 hours are quietly filtered: no spam, no false escalation\u003c\/li\u003e\n\u003cli\u003eOptional VIP transparency warning: \u003cem\u003e\"Note: the player you reported is a VIP and can see your report info.\"\u003c\/em\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eThis makes reporters feel heard. That's a player retention signal: \u003cstrong\u003e\"this server takes cheating seriously.\"\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003ch3\u003eFor Admins\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eAuto-ban pipeline:\u003c\/strong\u003e the connect gate and the report path both funnel through one unified ban flow with shared Discord and admin alerts\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eAuto-escalation alerts:\u003c\/strong\u003e NOTIFY \/ WARNING \/ CRITICAL tiers with @here pings on the high-pressure targets, even before a ban fires\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eDiscord webhooks:\u003c\/strong\u003e every report to one channel, escalations and bans to another, with formatted embeds showing trust data, Steam hours, alt evidence, and profile links\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eIn-game CUI dashboard:\u003c\/strong\u003e \u003ccode\u003e\/reportme \u0026lt;player\u0026gt;\u003c\/code\u003e opens a 5-tab panel (Overview, Reports, Trust breakdown, Info, and Settings)\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eConsole commands:\u003c\/strong\u003e \u003ccode\u003ereportme list\u003c\/code\u003e, \u003ccode\u003ereportme player\u003c\/code\u003e, \u003ccode\u003ereportme trust\u003c\/code\u003e, \u003ccode\u003ereportme why\u003c\/code\u003e, \u003ccode\u003ereportme check\u003c\/code\u003e, \u003ccode\u003ereportme ban\u003c\/code\u003e, \u003ccode\u003ereportme unban\u003c\/code\u003e, \u003ccode\u003ereportme clear\u003c\/code\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eIn-game settings panel:\u003c\/strong\u003e toggle data sources, Discord options, auto-ban switches, and the chat command directly from the CUI, no file editing\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eTrust Scoring Engine\u003c\/h3\u003e\n\u003cp\u003eReportMe computes a 0.0–1.0 trust score for every player using all available data:\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eServer playtime\u003c\/strong\u003e (always available, self-tracked or via PlaytimeTracker if installed)\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eSteam Rust hours\u003c\/strong\u003e and \u003cstrong\u003eaccount age\u003c\/strong\u003e (with Steam API key, free)\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eBattleMetrics hours\u003c\/strong\u003e across all servers (with BM API token, free tier)\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eReport density:\u003c\/strong\u003e reports per 100 hours played in a 30-day window\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003ePrivate profile\u003c\/strong\u003e as a negative signal\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eThe scoring algorithm dynamically rebalances weights based on which data sources are available. Works with zero configuration (server playtime + report density only), and gets smarter as you add API keys.\u003c\/p\u003e\n\n\u003ch3\u003eData Enrichment (Layered)\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eTier\u003c\/th\u003e\n\u003cth\u003eSource\u003c\/th\u003e\n\u003cth\u003eWhat You Get\u003c\/th\u003e\n\u003cth\u003eCost\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e0\u003c\/td\u003e\n\u003ctd\u003eBuilt-in\u003c\/td\u003e\n\u003ctd\u003eServer playtime, report density, first seen date\u003c\/td\u003e\n\u003ctd\u003eFree (always on)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e0.5\u003c\/td\u003e\n\u003ctd\u003ePlaytimeTracker\u003c\/td\u003e\n\u003ctd\u003eLifetime playtime (survives wipes), AFK filtering\u003c\/td\u003e\n\u003ctd\u003eFree plugin (optional)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e1\u003c\/td\u003e\n\u003ctd\u003eSteam Web API\u003c\/td\u003e\n\u003ctd\u003eRust hours, account age, profile visibility\u003c\/td\u003e\n\u003ctd\u003eFree API key\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e2\u003c\/td\u003e\n\u003ctd\u003eBattleMetrics\u003c\/td\u003e\n\u003ctd\u003eCross-server hours, Rust-ban history, server count\u003c\/td\u003e\n\u003ctd\u003eFree API token\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\u003cp\u003eEach tier is additive. The report side works with no APIs at all. The anti-cheat needs a BattleMetrics token for enrichment and ban issuance, and its connect-time alt detection is strongest on servers already running BattleMetrics RCON. The more you connect, the smarter the system gets.\u003c\/p\u003e\n\n\u003ch3\u003eFull CUI Panel\u003c\/h3\u003e\n\u003cp\u003eDark-themed, blurred background, tabbed interface with sidebar navigation:\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eOverview:\u003c\/strong\u003e Player avatar, name, total reports, trust score with progress bar, 24h stats, server playtime, first seen date, and enrichment data\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eReports:\u003c\/strong\u003e Scrollable history (up to 30 entries), color-coded accent stripe by type, subject, reporter name, relative timestamps, and report detail text\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eTrust (admin):\u003c\/strong\u003e Full score breakdown of positive factors (server time, Rust hours, account age, BM hours) and negative factors (report frequency, private profile), each with progress bars showing contribution\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eInfo (admin):\u003c\/strong\u003e Command reference, permission reference, and setup guide\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eSettings (admin):\u003c\/strong\u003e Live toggles for data sources, Discord options, and auto-ban switches, API key status, webhook status, chat command input, all editable in-game without touching config files\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eDiscord Webhooks\u003c\/h3\u003e\n\u003cp\u003eTwo configurable webhook URLs:\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eReport channel:\u003c\/strong\u003e Every F7 report gets a formatted embed with reporter, target, reason, subject, detail, trust score, Steam hours, account age, and playtime. Steam profile links included.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eEscalation channel:\u003c\/strong\u003e Threshold alerts and bans with color-coded severity, @here mentions on WARNING and CRITICAL, and the full ban evidence bundle on every auto-ban\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eSmart Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eDeduplication:\u003c\/strong\u003e Same reporter + same target within 24 hours = silently dropped. No duplicate notifications, no inflated escalation counts.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eSelf-report blocking:\u003c\/strong\u003e Players can't report themselves.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCrash-safe persistence:\u003c\/strong\u003e Async saves with atomic file writes. Session time flushed every 5 minutes. Max data loss on crash: 5 minutes.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eAuto-pruning:\u003c\/strong\u003e Reports older than 90 days (configurable) are automatically cleaned up on load.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHistory cap:\u003c\/strong\u003e 100 reports per player (configurable). Oldest entries trimmed automatically.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eConfigurable chat command:\u003c\/strong\u003e Change from \u003ccode\u003e\/reportme\u003c\/code\u003e to anything via config or the in-game settings panel.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003ePlugin API (for developers)\u003c\/h3\u003e\n\u003cp\u003eOther plugins can query trust scores, report counts, and playtime via \u003ccode\u003eplugins.Call()\u003c\/code\u003e:\u003c\/p\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c\/th\u003e\n\u003cth\u003eReturns\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_GetTrustScore(ulong steamid)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003eComputed trust score (0.0–1.0). Returns 0.5 (baseline) if no profile exists.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_GetTrustLabel(ulong steamid)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003estring\u003c\/td\u003e\n\u003ctd\u003eTrust label: \"High\", \"Moderate\", \"Below Average\", or \"Low\"\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_GetReportCount(ulong steamid)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eint\u003c\/td\u003e\n\u003ctd\u003eTotal deduplicated report count (lifetime)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_GetRecentReportCount(ulong steamid, int days)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eint\u003c\/td\u003e\n\u003ctd\u003eNumber of reports received in the last N days\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_GetUniqueReporterCount24h(ulong steamid)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eint\u003c\/td\u003e\n\u003ctd\u003eNumber of unique reporters in the last 24 hours\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_GetPlaytimeSeconds(ulong steamid)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003edouble\u003c\/td\u003e\n\u003ctd\u003eTotal tracked server playtime in seconds (PlaytimeTracker or self-tracked)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\u003cp\u003eUse cases: queue priority systems, loot table adjustments, VIP tier plugins, custom admin dashboards, third-party Discord bots.\u003c\/p\u003e\n\n\u003chr\u003e\n\u003ch3\u003ePermissions\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003ePermission\u003c\/th\u003e\n\u003cth\u003eDefault\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ereportme.vip\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eManual grant\u003c\/td\u003e\n\u003ctd\u003eReceive in-game notification when reported. Access \u003ccode\u003e\/reportme\u003c\/code\u003e to view own report history and trust score.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ereportme.admin\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eManual grant\u003c\/td\u003e\n\u003ctd\u003eFull access: view any player's reports, console commands (including ban\/unban), escalation alerts, admin CUI tabs (Trust breakdown, Info, Settings).\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ereportme.notify.reporter\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eAll players (auto-granted)\u003c\/td\u003e\n\u003ctd\u003eReporter receives acknowledgment CUI with data-backed feedback after filing an F7 report.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003eChat Commands\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eCommand\u003c\/th\u003e\n\u003cth\u003ePermission\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/reportme\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ereportme.vip or reportme.admin\u003c\/td\u003e\n\u003ctd\u003eOpen the report panel showing your own report history, trust score, and stats\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/reportme \u0026lt;name or steamid\u0026gt;\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ereportme.admin\u003c\/td\u003e\n\u003ctd\u003eOpen the report panel for any player: full admin view with trust breakdown, enrichment data, and settings\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003eConsole Commands\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eCommand\u003c\/th\u003e\n\u003cth\u003ePermission\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ereportme list\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ereportme.admin \/ server console\u003c\/td\u003e\n\u003ctd\u003eList top 20 most reported players, sorted by 24h report count then lifetime total.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ereportme player \u0026lt;steamid\u0026gt;\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ereportme.admin \/ server console\u003c\/td\u003e\n\u003ctd\u003eFull report history for a player: total received\/filed, 24h count, unique 24h reporters, recent reports with timestamps and details.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ereportme trust \u0026lt;steamid\u0026gt;\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ereportme.admin \/ server console\u003c\/td\u003e\n\u003ctd\u003eDetailed trust score breakdown: final score, baseline, each positive\/negative factor with its weight, data sources.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ereportme why \u0026lt;steamid\u0026gt;\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ereportme.admin \/ server console\u003c\/td\u003e\n\u003ctd\u003ePrint the full rationale behind a player's ban: every signal that contributed. The go-to for handling an appeal.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ereportme check \u0026lt;steamid\u0026gt;\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ereportme.admin \/ server console\u003c\/td\u003e\n\u003ctd\u003eRun the anti-cheat risk assessment for a player on demand and print the result.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ereportme ban \u0026lt;steamid\u0026gt; [reason]\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ereportme.admin \/ server console\u003c\/td\u003e\n\u003ctd\u003eManually issue a local + BattleMetrics ban with the same context bundle and Discord alert as an auto-ban.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ereportme unban \u0026lt;steamid\u0026gt;\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ereportme.admin \/ server console\u003c\/td\u003e\n\u003ctd\u003eClear the local ban and delete the BattleMetrics ban list entry. Single-action appeal reversal.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ereportme clear \u0026lt;steamid\u0026gt;\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ereportme.admin \/ server console\u003c\/td\u003e\n\u003ctd\u003eClear all reports for a player. Logged to server console.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003cp\u003e\u003cstrong\u003eSupport\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eFor all questions and feedback, dm me (1928tommygun) on my discord at \u003ca href=\"https:\/\/discord.fragmod.com\"\u003ediscord.fragmod.com\u003c\/a\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003e\u003cstrong\u003eLicense\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eTOMMYGUN'S EULA – BY USING THIS PLUGIN YOU AGREE TO THE FOLLOWING!\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eCode contained in this file is not licensed to be copied, shared, resold, or modified in any way.\u003c\/li\u003e\n\u003cli\u003eYou may copy the plugin freely to each server instance that your organization \u003cstrong\u003eowns\u003c\/strong\u003e.\u003c\/li\u003e\n\u003cli\u003eDo not share this plugin with other server organizations; they must purchase their own licenses.\u003c\/li\u003e\n\u003c\/ul\u003e\n","brand":"1928tommygun","offers":[{"title":"Default Title","offer_id":48853310013692,"sku":null,"price":20.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0613\/6079\/9996\/files\/reportme_hero_v4.jpg?v=1773481430"},{"product_id":"brad","title":"Brad","description":"\u003cp\u003e\u003cstrong\u003eDrive the Bradley.\u003c\/strong\u003e Climb into the most feared vehicle on the map, take the wheel, and turn it loose on everything. Cannon, coax MG, top gunner seat — the full package.\u003c\/p\u003e\n\n\u003cp\u003eBrad turns the Bradley APC from an AI roadblock into a player-controlled war machine. Spawn one, mount up, and drive it like a tank — because it is one. Bring a friend for the top gun or solo it with both weapons under your control.\u003c\/p\u003e\n\n\u003cdiv style=\"position: relative; width: 100%; padding-bottom: 56.25%; height: 0; overflow: hidden;\"\u003e\n\u003ciframe style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" src=\"https:\/\/www.youtube.com\/embed\/yr5UbAEIFUM\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"\u003e\u003c\/iframe\u003e\n\u003c\/div\u003e\n\n\u003ch3\u003eWhy This Is Different\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eActually drivable\u003c\/strong\u003e — real tank controls with differential steering, not a reskinned car\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eTwo-player crew\u003c\/strong\u003e — pilot drives and fires cannon + coax MG, top gunner runs an independent turret\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eFull weapon systems\u003c\/strong\u003e — magazine-fed cannon with reload mechanics, heat-based machine guns with overheat\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eZero dependencies\u003c\/strong\u003e — no other plugins required. Drop it in and go.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eIn-game config panel\u003c\/strong\u003e — full admin GUI to tune every setting without touching a JSON file\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eDriving\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eTank-style steering\u003c\/strong\u003e — independent track control, pivot turns, differential throttle on curves\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eMount from the rear\u003c\/strong\u003e — approach the back of the Bradley and press E to climb in\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eDismount behind\u003c\/strong\u003e — exit safely to the rear of the vehicle\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eLow health throttle\u003c\/strong\u003e — damaged Bradleys slow down, adding tension to retreats\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eImpact damage\u003c\/strong\u003e — ram things at speed and they feel it\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eWeapons\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eMain cannon (LMB)\u003c\/strong\u003e — 4-round magazine, shell-by-shell reload, configurable damage to players\/structures\/entities\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCoaxial MG (RMB)\u003c\/strong\u003e — pilot's secondary, heat-based overheat system, 300m hitscan range\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eTop turret MG\u003c\/strong\u003e — independent gunner with separate aim and overheat, vertical clamp prevents shooting through the hull\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eManual reload (R)\u003c\/strong\u003e — reload early or let it auto-reload on empty, cancel reload by firing with shells loaded\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003ePhysical recoil\u003c\/strong\u003e — cannon shots kick the Bradley's body, not just your screen\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eCrew System\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003ePilot + top gunner\u003c\/strong\u003e — two crew positions with independent weapons and aim\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eSprint to gun\u003c\/strong\u003e — hold Sprint while mounting to take the top gunner seat instead of pilot\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eTeam restriction\u003c\/strong\u003e — optionally require the gunner to be on the pilot's team\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eVoice relay\u003c\/strong\u003e — the tank becomes a loudspeaker for the driver's mic, broadcasting proximity voice from the Bradley itself\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCrew death on destruction\u003c\/strong\u003e — configurable, with gear preserved on corpse\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eHUD\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom crosshair\u003c\/strong\u003e — unique reticles for pilot and top gunner\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCannon ammo\u003c\/strong\u003e — visual shell indicators showing loaded vs empty\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eMG heat gauge\u003c\/strong\u003e — live percentage, turns red on overheat\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHull health\u003c\/strong\u003e — numeric HP display, turns red below 25%\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCrew list\u003c\/strong\u003e — see who's in what seat at a glance\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eAdmin Controls\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eIn-game config GUI\u003c\/strong\u003e — tabbed panel with sliders, toggles, and steppers across 5 categories\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eSpawn limits\u003c\/strong\u003e — per-player and server-wide caps\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCooldowns\u003c\/strong\u003e — configurable spawn cooldown (admins bypass)\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eAuto-despawn\u003c\/strong\u003e — unoccupied Bradleys despawn after a timer, delayed if players are nearby\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eLoot crates\u003c\/strong\u003e — configurable number of loot crates dropped on destruction\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eVanilla by default\u003c\/strong\u003e — all damage and health values match the real Bradley out of the box, fully tunable\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eAll weapon stats tunable\u003c\/strong\u003e — damage, fire rate, reload speed, aim cone, magazine size, overheat timers\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003chr\u003e\n\u003ch3\u003ePermissions\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003ePermission\u003c\/th\u003e\n\u003cth\u003eDefault\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ebrad.use\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eManual grant\u003c\/td\u003e\n\u003ctd\u003eSpawn and drive Bradleys\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ebrad.admin\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eManual grant\u003c\/td\u003e\n\u003ctd\u003eAccess in-game config panel, bypass cooldowns\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003eChat Commands\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eCommand\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/brad\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eShow help panel with controls and settings\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/brad spawn\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eSpawn a Bradley\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/brad despawn\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eDespawn your Bradley\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/brad config\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eOpen the admin config GUI (requires brad.admin)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003cp\u003e\u003cstrong\u003eSupport\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eFor all questions and feedback, dm me (1928tommygun) on my discord at \u003ca href=\"https:\/\/discord.fragmod.com\"\u003ediscord.fragmod.com\u003c\/a\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003e\u003cstrong\u003eLicense\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eTOMMYGUN'S EULA – BY USING THIS PLUGIN YOU AGREE TO THE FOLLOWING!\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eCode contained in this file is not licensed to be copied, shared, resold, or modified in any way.\u003c\/li\u003e\n\u003cli\u003eYou may copy the plugin freely to each server instance that your organization \u003cstrong\u003eowns\u003c\/strong\u003e.\u003c\/li\u003e\n\u003cli\u003eDo not share this plugin with other server organizations — they must purchase their own licenses.\u003c\/li\u003e\n\u003c\/ul\u003e\n","brand":"1928tommygun","offers":[{"title":"Default Title","offer_id":48870668632316,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0613\/6079\/9996\/files\/01_image_50a66f02-536c-40a9-ac7f-4b4b9d848229.png?v=1774934103"},{"product_id":"networth","title":"NetWorth","description":"\u003cp\u003e\u003cstrong\u003eWho's actually the richest on your server?\u003c\/strong\u003e NetWorth scans every TC, walks every connected structure, inventories every container, and ranks players by what they actually have — not what they've gathered or killed.\u003c\/p\u003e\n\n\u003cp\u003eEvery existing leaderboard tracks actions. NetWorth tracks holdings. It answers the question players actually argue about: who has the most stuff right now.\u003c\/p\u003e\n\n\u003cdiv style=\"position: relative; width: 100%; padding-bottom: 56.25%; height: 0; overflow: hidden;\"\u003e\n\u003ciframe style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" src=\"https:\/\/www.youtube.com\/embed\/P-di9rozEwg\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"\u003e\u003c\/iframe\u003e\n\u003c\/div\u003e\n\n\u003ch3\u003eWhy This Is Different\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eReal wealth, not stats\u003c\/strong\u003e — scans actual container contents, not lifetime gathered\/killed counters\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eFour value dimensions\u003c\/strong\u003e — scrap equivalent, sulfur (raid potential), T3 weapon count, and upkeep cost\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eAuto-calculated values\u003c\/strong\u003e — scrap and sulfur values derived from blueprint\/recycler data, no manual price lists\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003ePer-base breakdown\u003c\/strong\u003e — players see each base's contribution with map grid location\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eZero dependencies\u003c\/strong\u003e — no other plugins required. Drop it in and go.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eLeaderboard\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eSortable columns\u003c\/strong\u003e — click to sort by total scrap, sulfur, T3 weapons, or upkeep\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eSteam avatars\u003c\/strong\u003e — player portraits on each row\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eYour rank highlighted\u003c\/strong\u003e — always see where you stand, even if you're not in the top N\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eConfigurable size\u003c\/strong\u003e — show top 5, 10, 50 — whatever fits your server\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eChat commands\u003c\/strong\u003e — \u003ccode\u003e\/nw top\u003c\/code\u003e prints top 5 to chat, \u003ccode\u003e\/nw flex\u003c\/code\u003e broadcasts your own rank\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eMy Wealth Tab\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003ePersonal dashboard\u003c\/strong\u003e — four summary cards: total scrap, sulfur, T3 weapons, rank\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003ePer-base breakdown\u003c\/strong\u003e — each base listed with grid location, scrap value, sulfur value, container count\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eOpt-out toggle\u003c\/strong\u003e — hide from the leaderboard without leaving the system\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eScanning Engine\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eTC-based discovery\u003c\/strong\u003e — finds every building privilege a player is authed on\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eFull container scan\u003c\/strong\u003e — walks all connected storage containers in each structure\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eOptional inventory scan\u003c\/strong\u003e — include online players' carried items\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eBuilding deduplication\u003c\/strong\u003e — co-authed buildings scanned once, shared across players\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eMinimum block filter\u003c\/strong\u003e — skip trivial deployables (configurable threshold)\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCoroutine-based\u003c\/strong\u003e — yields every 50 entities, zero frame spikes on 300+ player servers\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eWipe-safe\u003c\/strong\u003e — all data clears automatically on map wipe\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eValuation System\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eScrap values\u003c\/strong\u003e — auto-calculated from recycler yields and blueprint ingredient chains\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eSulfur values\u003c\/strong\u003e — auto-calculated from full craft cost ingredient chains\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eT3 weapons\u003c\/strong\u003e — any workbench level 3 weapon counted automatically\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eAdmin overrides\u003c\/strong\u003e — set custom scrap values for any item via config\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003ePrivacy\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003ePlayer opt-out\u003c\/strong\u003e — players can hide from the leaderboard (toggle or \u003ccode\u003e\/nw hide\u003c\/code\u003e)\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eAnonymous mode\u003c\/strong\u003e — server-wide toggle to hide all player names and avatars\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHide offline players\u003c\/strong\u003e — optionally exclude logged-out players from rankings\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eFlex blocked when hidden\u003c\/strong\u003e — opted-out players can't broadcast their rank\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eAdmin Controls\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eIn-game config GUI\u003c\/strong\u003e — admin tab with steppers, toggles, and status readouts\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eScan status dashboard\u003c\/strong\u003e — players scanned, queue progress, last cycle time, total bases tracked\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eForce full scan\u003c\/strong\u003e — one button to clear cache and rescan everything\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eRuntime chat command\u003c\/strong\u003e — change the command from \u003ccode\u003e\/nw\u003c\/code\u003e to whatever you want, live\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eAll settings tunable\u003c\/strong\u003e — scan interval, leaderboard size, minimum building blocks, privacy toggles\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003chr\u003e\n\u003ch3\u003ePermissions\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003ePermission\u003c\/th\u003e\n\u003cth\u003eDefault\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003enetworth.use\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eManual grant\u003c\/td\u003e\n\u003ctd\u003eOpen the panel and use chat commands\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003enetworth.hide\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eManual grant\u003c\/td\u003e\n\u003ctd\u003eOpt out of the leaderboard even when server-wide opt-out is disabled\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003enetworth.admin\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eManual grant\u003c\/td\u003e\n\u003ctd\u003eAccess admin tab, force scans, change settings\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003eChat Commands\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eCommand\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/nw\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eOpen the leaderboard panel\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/nw top\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ePrint top 5 wealthiest players to chat\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/nw flex\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eBroadcast your rank and net worth to chat\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/nw hide\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eToggle leaderboard opt-out\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003ePlugin API (for developers)\u003c\/h3\u003e\n\u003cp\u003eOther plugins can query wealth data at runtime:\u003c\/p\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c\/th\u003e\n\u003cth\u003eReturns\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_GetNetWorth(ulong playerId)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003eTotal scrap value for a player\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_GetSulfur(ulong playerId)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003eTotal sulfur value for a player\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_GetWeapons(ulong playerId)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003eT3 weapon count\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_GetUpkeep(ulong playerId)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003eUpkeep cost for a player\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_GetRank(ulong playerId)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eint\u003c\/td\u003e\n\u003ctd\u003ePlayer's leaderboard rank\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_GetWealth(ulong playerId)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eDictionary\u003c\/td\u003e\n\u003ctd\u003eFull breakdown: NetWorth, Sulfur, Weapons, Upkeep, Bases, Rank, LastUpdated\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_GetLeaderboard(int count)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eList\u003c\/td\u003e\n\u003ctd\u003eTop N entries with all fields\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003cp\u003e\u003cstrong\u003eSupport\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eFor all questions and feedback, dm me (1928tommygun) on my discord at \u003ca href=\"https:\/\/discord.fragmod.com\"\u003ediscord.fragmod.com\u003c\/a\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003e\u003cstrong\u003eLicense\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eTOMMYGUN'S EULA – BY USING THIS PLUGIN YOU AGREE TO THE FOLLOWING!\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eCode contained in this file is not licensed to be copied, shared, resold, or modified in any way.\u003c\/li\u003e\n\u003cli\u003eYou may copy the plugin freely to each server instance that your organization \u003cstrong\u003eowns\u003c\/strong\u003e.\u003c\/li\u003e\n\u003cli\u003eDo not share this plugin with other server organizations — they must purchase their own licenses.\u003c\/li\u003e\n\u003c\/ul\u003e\n","brand":"1928tommygun","offers":[{"title":"Default Title","offer_id":48871748763900,"sku":null,"price":15.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0613\/6079\/9996\/files\/01_image_f76039cc-0787-4e9b-8877-233e82f730ce.jpg?v=1774045148"},{"product_id":"tommygun-npc-voices","title":"TommygunNPCVoices","description":"\u003cp\u003e\u003cstrong\u003eNPCs that talk back — in any voice you want.\u003c\/strong\u003e Clone any voice from a WAV sample, record your own lines, or use built-in TTS voices. Drop audio files in a folder and your NPCs start speaking with them immediately. Players talk to NPCs through proximity voice chat and get real spoken responses — full speech-to-text, LLM conversation, and text-to-speech pipeline injected through Rust's native voice system. No mods, no client-side anything.\u003c\/p\u003e\n\n\u003cp\u003e\u003ciframe width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/_Cwpsa4i6ZY\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"\u003e\u003c\/iframe\u003e\u003c\/p\u003e\n\n\u003cp\u003eWant your NPCs to sound like a grizzled drill sergeant? Record a sample clip, drop it in, done. Want them to sound like your server's most notorious player? Grab a recording of their voice and now every scientist on the map talks like them. The plugin auto-discovers WAV and MP3 files, pre-encodes them to Opus, and serves them with zero latency. Other players nearby hear the NPC talking in proximity voice chat, just like a real player.\u003c\/p\u003e\n\n\u003ch3\u003eWhy This Is Different\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eReal voice conversation\u003c\/strong\u003e — not chat messages or pop-up text. NPCs speak through Rust's proximity voice system. Other players nearby hear it too.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eFull pipeline\u003c\/strong\u003e — STT captures player speech, LLM generates a response, TTS speaks it back. All automatic.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom voice library\u003c\/strong\u003e — drop your own WAV files in a folder and NPCs use them. Record your own voice lines, rip audio from movies, clone voices externally — anything goes.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003ePer-NPC personalities\u003c\/strong\u003e — each NPC archetype has its own personality, knowledge, voice, and behavior triggers\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003e$2-3\/month\u003c\/strong\u003e — recommended stack (Groq STT + Groq LLM + Voxtral TTS) costs next to nothing for a typical server.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eAudio Library\u003c\/h3\u003e\n\u003cp\u003eDrop WAV or MP3 files into \u003ccode\u003edata\/TommygunNPCVoices\/audio\/\u003c\/code\u003e and NPCs start using them. The plugin auto-discovers files, pre-encodes to Opus, and caches everything in memory for instant playback. Use this alongside the live TTS pipeline — pre-recorded files for barks and combat callouts, TTS for dynamic conversation.\u003c\/p\u003e\n\n\u003ch4\u003eHow to build your NPC voice library\u003c\/h4\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eRecord yourself\u003c\/strong\u003e — grab a mic, record aggro barks, death screams, taunts. Drop the WAVs in. Your NPCs now sound like you.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eUse any voice tool\u003c\/strong\u003e — ElevenLabs, Bark, Piper, whatever. Generate lines externally, save as WAV, drop them in.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eRip from anything\u003c\/strong\u003e — movie clips, game audio, sound packs. If it's a WAV or MP3, it works.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003ePer-player voice capture\u003c\/strong\u003e — record a player's voice on your server, use those clips as NPC voice lines. Your regulars become the NPCs.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch4\u003eOrganize by event\u003c\/h4\u003e\n\u003cp\u003eStructure your audio folder by trigger type and files auto-map to events:\u003c\/p\u003e\n\u003cpre\u003e\naudio\/\n  combat\/aggro_1.wav\n  combat\/aggro_2.wav\n  combat\/aggro_3.wav\n  death\/last_words_1.wav\n  death\/last_words_2.wav\n  taunt\/kill_taunt_1.wav\n  ambient\/creepy_hum.wav\n  trader\/greeting_1.wav\n\u003c\/pre\u003e\n\u003cp\u003eMultiple files per trigger = random selection. Five aggro barks means each fight sounds different.\u003c\/p\u003e\n\n\u003ch4\u003eLLM-powered audio selection\u003c\/h4\u003e\n\u003cp\u003eThe LLM knows your entire audio library. When responding to a player, it can embed \u003ccode\u003e[PLAY:filename]\u003c\/code\u003e tags to mix pre-recorded audio with live TTS:\u003c\/p\u003e\n\u003cp\u003e\u003ccode\u003e[PLAY:evil_laugh.wav] You think you can raid MY base?\u003c\/code\u003e\u003c\/p\u003e\n\u003cp\u003eThe laugh plays instantly from cache (zero latency), then the text is spoken via TTS. Lower cost, more expressive, faster than pure TTS.\u003c\/p\u003e\n\n\u003ch4\u003eVocal sound tags\u003c\/h4\u003e\n\u003cp\u003eThe LLM can inject natural sounds mid-sentence: \u003ccode\u003e[cough]\u003c\/code\u003e, \u003ccode\u003e[laugh]\u003c\/code\u003e, \u003ccode\u003e[sigh]\u003c\/code\u003e — making NPC speech feel alive, not robotic.\u003c\/p\u003e\n\n\u003ch4\u003eAdmin audio tools\u003c\/h4\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eCommand\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/voice list [category]\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eList loaded audio files, optionally filtered by category\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/voice play \u0026lt;file\u0026gt; [npc_id]\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eTest playback from nearest NPC or a specific NPC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/voice reload\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eRescan audio folder and regenerate manifest\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/voice info \u0026lt;file\u0026gt;\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eShow metadata: duration, format, assigned NPCs, play count\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/voice unassigned\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eList files loaded but not assigned to any NPC or event\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/voice describe-all\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eAuto-generate descriptions for all audio files using LLM\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003eThe Voice Pipeline\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003ePlayer speaks\u003c\/strong\u003e — proximity voice is captured and buffered with silence detection\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eSpeech-to-text\u003c\/strong\u003e — audio sent to Groq Whisper (or Deepgram, Voxtral) for transcription\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eLLM thinks\u003c\/strong\u003e — transcript + conversation history + NPC personality + situational context sent to Groq LLM\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eText-to-speech\u003c\/strong\u003e — response synthesized by Voxtral (or Groq Orpheus, OpenAI, Deepgram)\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eVoice injection\u003c\/strong\u003e — audio encoded to Opus and broadcast through Rust's native voice system from the NPC's position\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eNPC Archetypes\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003ePer-NPC personality\u003c\/strong\u003e — custom system prompt with personality traits and domain knowledge\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003ePer-NPC voice\u003c\/strong\u003e — assign different TTS voices to different NPC types\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eConversation memory\u003c\/strong\u003e — NPCs remember what you said (configurable history length). Admin-injected memories persist across restarts.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eInitiation\u003c\/strong\u003e — NPCs can speak first when a player walks into range. Configurable phrases or LLM-generated greetings.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eFourth wall toggle\u003c\/strong\u003e — NPCs can be aware they're in a game, or not\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eSituational awareness\u003c\/strong\u003e — LLM context includes NPC health, combat state, time of day, weather, player gear, nearby threats, squad count, corpses nearby\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch4\u003eActivation modes\u003c\/h4\u003e\n\u003cp\u003eControl how NPCs respond. Enable multiple modes per archetype:\u003c\/p\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eMode\u003c\/th\u003e\n\u003cth\u003eBehavior\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eproximity\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eNPC initiates when player enters listen range\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eproximity_facing\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eProximity + player must be facing the NPC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003evoice\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eNPC listens for player voice chat (full AI conversation)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003echat\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eNPC listens for nearby text chat (fallback for no-mic players)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eaddressed\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eNPC only responds when its name is spoken\/typed\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eline_of_sight\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eNPC initiates when it has LOS to a player in range\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003e13 Voice Triggers\u003c\/h3\u003e\n\u003cp\u003eNPCs react to in-game events with voice lines — pre-recorded audio, TTS phrases, or live LLM responses. Each trigger has its own chance roll, cooldown, and audio pool:\u003c\/p\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eTrigger\u003c\/th\u003e\n\u003cth\u003eWhen\u003c\/th\u003e\n\u003cth\u003eDefault Chance\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOnSpawn\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eNPC spawns near a player\u003c\/td\u003e\n\u003ctd\u003e30%\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOnPlayerSpotted\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eFirst detection of a player\u003c\/td\u003e\n\u003ctd\u003e50%\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOnAggro\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eEnters combat\u003c\/td\u003e\n\u003ctd\u003e70%\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOnHit\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eTakes damage\u003c\/td\u003e\n\u003ctd\u003e30%\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOnInjured\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eHealth drops below 50%\u003c\/td\u003e\n\u003ctd\u003e80%\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOnKill\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eKills a player\u003c\/td\u003e\n\u003ctd\u003e90%\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOnDeath\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eDies (last words)\u003c\/td\u003e\n\u003ctd\u003e100%\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOnAllyKilled\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eSquadmate dies nearby\u003c\/td\u003e\n\u003ctd\u003e60%\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOnAllyInjured\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eSquadmate injured nearby\u003c\/td\u003e\n\u003ctd\u003e40%\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOnCombatEnd\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eFight ends\u003c\/td\u003e\n\u003ctd\u003e50%\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOnPlayerFled\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ePlayer leaves range\u003c\/td\u003e\n\u003ctd\u003e40%\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOnPlayerLooting\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ePlayer loots a corpse nearby\u003c\/td\u003e\n\u003ctd\u003e60%\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOnReload\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eNPC reloads weapon\u003c\/td\u003e\n\u003ctd\u003e30%\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003eTTS Providers\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eProvider\u003c\/th\u003e\n\u003cth\u003eNotes\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eVoxtral\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003ePrimary. Mistral's voice model — high quality, voice cloning support, also handles STT.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eGroq (Orpheus)\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003eFast, 6 voice options (autumn, diana, hannah, austin, daniel, troy). Included with Groq API key.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eOpenAI\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e9 voice options across tts-1 and tts-1-hd models\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eDeepgram (Aura)\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003eLow latency streaming\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003eRate Limiting\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003ePer-NPC cooldown\u003c\/strong\u003e — prevents spam from a single NPC\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eNearby radius cooldown\u003c\/strong\u003e — stops 10 NPCs all talking at once in crowded areas\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003ePer-trigger cooldown\u003c\/strong\u003e — each event type has its own timer\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eChance rolls\u003c\/strong\u003e — triggers fire probabilistically, not every time\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003ePer-player rate limit\u003c\/strong\u003e — configurable API request cap (default 10 req\/60 sec per player)\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eBusy gate\u003c\/strong\u003e — NPC waits for current response to finish before accepting new input\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eAdmin Controls\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eIn-game settings panel\u003c\/strong\u003e — full CUI with tabs for general, providers, archetypes, and status\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eLive archetype editing\u003c\/strong\u003e — create and configure NPC personalities without restarting\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eConversation monitor\u003c\/strong\u003e — real-time feed of all NPC conversations with timing breakdown\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eNPC browser\u003c\/strong\u003e — list all tracked NPCs, view conversation history, teleport-to-NPC\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eDebug tools\u003c\/strong\u003e — voice packet capture, replay, WAV export, sine wave test, STT test mode\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eCommands\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eCommand\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/npcvoices\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eOpen the settings panel\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/npcmemory \u0026lt;npc\u0026gt; \u0026lt;text\u0026gt;\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eInject a persistent memory into an NPC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etts.say \u0026lt;npc_id\u0026gt; \u0026lt;text\u0026gt;\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003e(Console) Make a specific NPC speak\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etts.say.all \u0026lt;archetype\u0026gt; \u0026lt;text\u0026gt;\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003e(Console) All NPCs of an archetype speak simultaneously\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etts.memory \u0026lt;npc_id\u0026gt; \u0026lt;text\u0026gt;\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003e(Console) Inject a memory\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etts.memory.clear \u0026lt;npc_id|all\u0026gt;\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003e(Console) Clear injected memories\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etts.memory.list \u0026lt;npc_id\u0026gt;\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003e(Console) Show all memories for an NPC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003eCompatibility\u003c\/h3\u003e\n\u003cp\u003eWorks with any NPC that extends BasePlayer — vanilla or modded. Archetypes are matched by NPC display name, so if the name matches your config, the NPC gets a voice.\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eAll vanilla scientists\u003c\/strong\u003e — military tunnel, oil rig, junkpile roamers, excavator, arctic base, etc.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHumanNPC\u003c\/strong\u003e — custom NPCs created with HumanNPC get full voice support\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eBotReSpawn \/ BetterNPC\u003c\/strong\u003e — spawned scientists and custom bots\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eRaidable Bases\u003c\/strong\u003e — NPC defenders\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eAny plugin that spawns named NPCs\u003c\/strong\u003e — if the NPC has a display name that matches an archetype, it works\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003chr\u003e\n\u003ch3\u003eRequirements\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eConcentus.dll\u003c\/strong\u003e — managed Opus codec, \u003ca href=\"https:\/\/na.fragmod.com\/npc\/Concentus.dll\"\u003edownload here\u003c\/a\u003e and place in \u003ccode\u003eRustDedicated_Data\/Managed\/\u003c\/code\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eAPI keys\u003c\/strong\u003e — recommended: Groq (STT + LLM) + Mistral (Voxtral TTS). ~$2-3\/month for a typical server.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003ePermissions\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003ePermission\u003c\/th\u003e\n\u003cth\u003eDefault\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etommygunvoices.admin\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eManual grant\u003c\/td\u003e\n\u003ctd\u003eAccess settings panel and all admin commands\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003ePlugin API (for developers)\u003c\/h3\u003e\n\u003cp\u003eOther plugins can use the full voice pipeline without building it:\u003c\/p\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_PlayAudioOnNPC(BasePlayer npc, string path)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ePlay cached audio through an NPC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_PlayAudioAtPosition(float x, y, z, string path)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ePlay cached audio at a world position\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_PlayTTSOnNPC(BasePlayer npc, string text, string voice)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eGenerate TTS and play through an NPC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_Say(BaseEntity npc, string text)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eMake an NPC speak a line\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_SayAll(string archetype, string text)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eAll NPCs of an archetype speak simultaneously\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_InjectMemory(BaseEntity npc, string memory)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eInject a persistent memory into an NPC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_ClearMemories(BaseEntity npc)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eClear all injected memories\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_GetMemories(BaseEntity npc)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eGet all memories for an NPC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_StopNPC(BasePlayer npc)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eStop active playback on an NPC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_GetAudioFiles()\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eList all cached audio files\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_GetAudioDuration(string path)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eGet duration of a cached audio file\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\u003cp\u003e\u003cstrong\u003eHook:\u003c\/strong\u003e\u003c\/p\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eHook\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOnNPCHeardPlayer(BaseEntity npc, BasePlayer player, string transcript)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eFires when NPC transcribes player speech. Build your own conversation logic on top.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003cp\u003e\u003cstrong\u003eSupport\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eFor all questions and feedback, dm me (1928tommygun) on my discord at \u003ca href=\"https:\/\/discord.fragmod.com\"\u003ediscord.fragmod.com\u003c\/a\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003e\u003cstrong\u003eLicense\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eTOMMYGUN'S EULA – BY USING THIS PLUGIN YOU AGREE TO THE FOLLOWING!\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eCode contained in this file is not licensed to be copied, shared, resold, or modified in any way.\u003c\/li\u003e\n\u003cli\u003eYou may copy the plugin freely to each server instance that your organization \u003cstrong\u003eowns\u003c\/strong\u003e.\u003c\/li\u003e\n\u003cli\u003eDo not share this plugin with other server organizations — they must purchase their own licenses.\u003c\/li\u003e\n\u003c\/ul\u003e\n","brand":"1928tommygun","offers":[{"title":"Default Title","offer_id":48871748796668,"sku":null,"price":40.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0613\/6079\/9996\/files\/01_image_19cede73-fdde-4739-a102-0f5f665275a0.jpg?v=1775860570"},{"product_id":"tommygun-npc","title":"TommygunNPC","description":"\u003cp\u003e\u003cstrong\u003eNPCs that play like real players.\u003c\/strong\u003e TommygunNPC replaces the vanilla scientist brain with custom AI that strafes, flanks, retreats when hurt, heals behind cover, throws grenades, and forms squads. Drop it in and every scientist on your server gets a brain upgrade.\u003c\/p\u003e\n\n\u003cp\u003e\u003ciframe width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/Q5vd3UeP74I\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"\u003e\u003c\/iframe\u003e\u003c\/p\u003e\n\n\u003cp\u003eVanilla NPCs stand still and shoot. These ones move like players — they'll push you when they have the advantage, duck behind cover when they don't, and call nearby NPCs to help. Ten built-in archetypes let you make scavengers that flee on sight and operators that push like chads, all tunable from an in-game admin panel.\u003c\/p\u003e\n\n\u003ch3\u003eWhy This Is Different\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eBrain transplant model\u003c\/strong\u003e — works with ANY plugin that spawns ScientistNPCs. BotReSpawn, BetterNPC, Raidable Bases, custom events — TommygunNPC intercepts the spawn and replaces the brain. No config, no compatibility patches.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003e25 personality traits\u003c\/strong\u003e — not just difficulty sliders. Toggle traits like DucksOnReload, AvengesSquadmates, SmartGrenades, PushesLostTargets, and ErraticMovement to build NPCs with distinct combat styles.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eSquad mechanics\u003c\/strong\u003e — NPCs recruit nearby allies, follow leaders, and avenge fallen squadmates. A fight with one becomes a fight with four.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eZero dependencies\u003c\/strong\u003e — no other plugins required. Drop it in and go.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eFull admin panel\u003c\/strong\u003e — configure everything in-game with \u003ccode\u003e\/tgnpc\u003c\/code\u003e. No JSON files, no server restarts.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eCombat AI\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eDynamic state machine\u003c\/strong\u003e — idle NPCs roam their area until they spot a threat, then shift between PUSHING, STRAFING, and RETREATING based on health, range, and personality. Every fight plays out differently.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eReaction time system\u003c\/strong\u003e — configurable delay before NPCs acquire a new target (0.1s for elites, 1.5s+ for scavengers). No more instant-lock aimbots.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eJump and duck evasion\u003c\/strong\u003e — NPCs dodge during combat with configurable cooldowns, heights, and durations. Some archetypes jump on reload, others duck while shooting.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eGrenade system\u003c\/strong\u003e — smart grenade throws with configurable intervals. NPCs that can't reach you will flush you out.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHealing\u003c\/strong\u003e — NPCs use medical items when health drops below threshold. Configurable heal chance and health trigger.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCover seeking\u003c\/strong\u003e — NPCs look for cover when retreating or reloading.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eLOS tracking\u003c\/strong\u003e — grace period before NPCs lose a target behind cover. No more instant-forget cheese.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eSound investigation\u003c\/strong\u003e — NPCs hear gunshots and footsteps, then move to investigate.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003e10 Built-In Archetypes\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eArchetype\u003c\/th\u003e\n\u003cth\u003eReaction Time\u003c\/th\u003e\n\u003cth\u003eDamage\u003c\/th\u003e\n\u003cth\u003eBehavior\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eDefault\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e0.65–1.5s\u003c\/td\u003e\n\u003ctd\u003e1.0x\u003c\/td\u003e\n\u003ctd\u003eVanilla-equivalent baseline\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eScavenger\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003eSlow\u003c\/td\u003e\n\u003ctd\u003e0.8x\u003c\/td\u003e\n\u003ctd\u003eTimid, flees when hurt\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eGuard\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003eMedium\u003c\/td\u003e\n\u003ctd\u003e1.0x\u003c\/td\u003e\n\u003ctd\u003eHolds position, doesn't chase\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eOperator\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003eFast\u003c\/td\u003e\n\u003ctd\u003e1.2x\u003c\/td\u003e\n\u003ctd\u003eElite tactical, pushes aggressively\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eSoldier\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003eMedium-Fast\u003c\/td\u003e\n\u003ctd\u003e1.0x\u003c\/td\u003e\n\u003ctd\u003eBalanced military\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ePatrol\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003eMedium\u003c\/td\u003e\n\u003ctd\u003e1.0x\u003c\/td\u003e\n\u003ctd\u003eWide roam, alert to sounds\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eRat\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003eVery Slow\u003c\/td\u003e\n\u003ctd\u003e1.5x\u003c\/td\u003e\n\u003ctd\u003ePatient ambusher, high burst damage\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eMilitaryMix\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003eWeighted pool\u003c\/td\u003e\n\u003ctd\u003eMixed\u003c\/td\u003e\n\u003ctd\u003eRandom pick from military archetypes\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eRoadMix\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003eWeighted pool\u003c\/td\u003e\n\u003ctd\u003eMixed\u003c\/td\u003e\n\u003ctd\u003eRandom pick from road archetypes\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eScavengerMix\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003eWeighted pool\u003c\/td\u003e\n\u003ctd\u003eMixed\u003c\/td\u003e\n\u003ctd\u003eRandom pick from low-tier archetypes\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\u003cp\u003eCreate unlimited custom archetypes from the admin panel. Duplicate an existing one and tweak it, or build from scratch.\u003c\/p\u003e\n\n\u003ch3\u003eMonument Auto-Detection\u003c\/h3\u003e\n\u003cp\u003eTommygunNPC automatically detects all 40+ monuments on your map and lets you assign archetypes per monument. Launch Site gets Operators, Junkyard gets Scavengers, Sewer Branch gets Rats — all configurable from the admin panel. Archetype pools let you assign weighted random picks so NPCs at the same monument aren't all identical.\u003c\/p\u003e\n\n\u003ch3\u003eSquad System\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eLeader recruitment\u003c\/strong\u003e — NPCs with the Leadership trait recruit nearby allies into squads (configurable radius and cooldown)\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eFollower behavior\u003c\/strong\u003e — squad members roam near their leader and respond to the same threats\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eAvenge mechanic\u003c\/strong\u003e — when a squadmate dies, survivors retarget the killer\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eConfigurable squad size\u003c\/strong\u003e — cap how large squads can grow per archetype\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003ePerformance\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eFPS-based degradation\u003c\/strong\u003e — when server FPS drops below threshold (default 20), NPC think interval automatically increases from 0.1s to 0.5s\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eEfficient state machine\u003c\/strong\u003e — single AttackState with priority chain, minimal per-tick overhead\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eProper cleanup\u003c\/strong\u003e — brains are removed cleanly on unload, no orphaned components\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eAdmin Panel\u003c\/h3\u003e\n\u003cp\u003eFull in-game GUI via \u003ccode\u003e\/tgnpc\u003c\/code\u003e:\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eArchetype editor\u003c\/strong\u003e — create, duplicate, delete, and configure archetypes with live sliders and toggles\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eTrait editor\u003c\/strong\u003e — toggle all 25 personality traits per archetype with color-coded categories\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCombat tuning\u003c\/strong\u003e — reaction time, damage scale, aim cone, engagement range, sense range, grenade intervals\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eMovement tuning\u003c\/strong\u003e — speed multipliers, strafe distances, roam range\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eSquad config\u003c\/strong\u003e — squad size, recruit radius, follower roam\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eMonument mapping\u003c\/strong\u003e — assign archetypes to monuments, toggle per-monument management\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003ePerformance monitor\u003c\/strong\u003e — live FPS, NPC count, managed brain count\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eReapply button\u003c\/strong\u003e — push config changes to all active NPCs without restart\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eDeveloper API\u003c\/h3\u003e\n\u003cp\u003eFull API for other plugins to hook into TommygunNPC:\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eArchetype Management\u003c\/strong\u003e\u003c\/p\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c\/th\u003e\n\u003cth\u003eReturns\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_SetArchetype(ScientistNPC, string)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ebool\u003c\/td\u003e\n\u003ctd\u003eApply an archetype to an NPC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_GetArchetype(ScientistNPC)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003estring\u003c\/td\u003e\n\u003ctd\u003eGet current archetype name\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_RegisterArchetype(string, Dict)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ebool\u003c\/td\u003e\n\u003ctd\u003eRegister a custom archetype at runtime\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_UnregisterArchetype(string)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ebool\u003c\/td\u003e\n\u003ctd\u003eRemove a registered archetype\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_GetArchetypeNames()\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003estring[]\u003c\/td\u003e\n\u003ctd\u003eList all available archetypes\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003cp\u003e\u003cstrong\u003eNPC Control\u003c\/strong\u003e\u003c\/p\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_ForceTarget(ScientistNPC, BasePlayer)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eManually set an NPC's target\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_ClearTarget(ScientistNPC)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eClear current target\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_ForceRetreat(ScientistNPC)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eForce NPC to retreat\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_TagEvent(ScientistNPC, string)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eTag NPC with an event identifier\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_TagEventWithArchetype(ScientistNPC, string, string)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eTag + apply archetype in one call\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003cp\u003e\u003cstrong\u003eQuery\u003c\/strong\u003e\u003c\/p\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c\/th\u003e\n\u003cth\u003eReturns\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_IsManaged(BaseEntity)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ebool\u003c\/td\u003e\n\u003ctd\u003eCheck if entity has a TommygunBrain\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_HasBrain(ScientistNPC)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ebool\u003c\/td\u003e\n\u003ctd\u003eCheck brain attachment status\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_GetManagedNPCs()\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eScientistNPC[]\u003c\/td\u003e\n\u003ctd\u003eGet all managed NPCs\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_GetNPCsByEvent(string)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eScientistNPC[]\u003c\/td\u003e\n\u003ctd\u003eGet NPCs by event tag\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAPI_GetNPCsByArchetype(string)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eScientistNPC[]\u003c\/td\u003e\n\u003ctd\u003eGet NPCs by archetype\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003cp\u003e\u003cstrong\u003eHooks Fired\u003c\/strong\u003e\u003c\/p\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eHook\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOnTommygunBrainAttached(ScientistNPC, string)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eFired when a brain is attached (includes archetype name)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOnTommygunEventNPCSpawned(ScientistNPC, string, string)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eFired for tagged event NPCs (includes event tag and archetype)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003chr\u003e\n\u003ch3\u003ePermissions\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003ePermission\u003c\/th\u003e\n\u003cth\u003eDefault\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etommygunnpc.admin\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eManual grant\u003c\/td\u003e\n\u003ctd\u003eAccess admin panel, all console commands\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003eCommands\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eCommand\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\/tgnpc\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eOpen admin panel\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003ccode\u003etgnpc.reapply\u003c\/code\u003e (console)\u003c\/td\u003e\n\u003ctd\u003eReapply config to all active NPCs\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003ccode\u003etgnpc.killall\u003c\/code\u003e (console)\u003c\/td\u003e\n\u003ctd\u003eKill all managed NPCs (with confirmation)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003ccode\u003etgnpc.doreload\u003c\/code\u003e (console)\u003c\/td\u003e\n\u003ctd\u003eReload config from file and reapply\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003eFull Configuration Reference\u003c\/h3\u003e\n\u003cp\u003eEvery archetype is built from the following fields. All of these are editable from the in-game admin panel or the JSON config.\u003c\/p\u003e\n\n\u003ch4\u003ePersonality Traits (25 toggles)\u003c\/h4\u003e\n\u003cp\u003eBoolean flags that define how an NPC behaves. Mix and match to create unique combat personalities.\u003c\/p\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eTrait\u003c\/th\u003e\n\u003cth\u003eWhat It Does\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eDucksOnRoamWait\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eCrouches when idle at roam destination\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eDucksOnReload\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eCrouches while reloading\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eDucksOnStrafe\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eCrouches during strafe movements\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eDucksOnShoot\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eCrouches while firing\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eJumpsOnReload\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eJumps while reloading to dodge\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eJumpsOnStrafe\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eJumps during strafe movements\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eJumpsOnRetreat\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eJumps while retreating\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eWideStrafer\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eUses wider strafe arcs in combat\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eLeadership\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eRecruits nearby NPCs into a squad\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAvengesSquadmates\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eRetargets the killer when a squadmate dies\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAvoidsPlayersInCombat\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eMaintains distance rather than pushing\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eRunsAtPlayer\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eRushes toward target aggressively\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eBacksUpClose\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eRetreats when target gets too close\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ePushesLostTargets\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eMoves to last known position when target breaks LOS\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eInvestigatesSounds\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eMoves toward gunshots and footsteps\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eLooksAtSounds\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eTurns to face sound sources\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eRetargetsThreat\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eSwitches to the most dangerous target\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eStandsWhileShooting\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eStops moving to fire (more accurate, more vulnerable)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eRelocatesOnReload\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eMoves to a new position while reloading\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eErraticMovement\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eUnpredictable movement patterns\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSmartGrenades\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eThrows grenades at cover positions and choke points\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eFlushGrenades\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eUses grenades to flush targets out of hiding\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eFlinchesOnHit\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eReacts visually when taking damage\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eWalks\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eWalks instead of runs when not in combat\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eRoamClosely\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eStays near spawn point when roaming\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch4\u003eCombat\u003c\/h4\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eField\u003c\/th\u003e\n\u003cth\u003eType\u003c\/th\u003e\n\u003cth\u003eDefault\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eReaction Time Min\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e0.65\u003c\/td\u003e\n\u003ctd\u003eFastest target acquisition delay (seconds)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eReaction Time Max\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e1.5\u003c\/td\u003e\n\u003ctd\u003eSlowest target acquisition delay (seconds)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eDamage Scale\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e1.0\u003c\/td\u003e\n\u003ctd\u003eDamage output multiplier\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAim Cone Scale\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e2.0\u003c\/td\u003e\n\u003ctd\u003eAccuracy modifier (lower = more accurate)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAim Settle Time\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e0.2\u003c\/td\u003e\n\u003ctd\u003eTime to stabilize aim on target\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEngagement Range Multiplier\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e1.0\u003c\/td\u003e\n\u003ctd\u003eScales combat engagement distance\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSense Range\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e40\u003c\/td\u003e\n\u003ctd\u003eDetection distance (meters)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eHearing Range\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e80\u003c\/td\u003e\n\u003ctd\u003eSound detection distance (meters)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eTarget Lost Range\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e50\u003c\/td\u003e\n\u003ctd\u003eDistance before target is forgotten\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eMemory Duration\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e5.0\u003c\/td\u003e\n\u003ctd\u003eHow long target is remembered (seconds)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eLOS Break Grace Period\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e1.0\u003c\/td\u003e\n\u003ctd\u003eSeconds before losing a target behind cover\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eRetreat Health Threshold\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e50\u003c\/td\u003e\n\u003ctd\u003eAbsolute HP below which NPC retreats\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eRetreat Health Fraction Min\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e0.25\u003c\/td\u003e\n\u003ctd\u003eHP fraction below which NPC stops retreating and fights\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eHeal Below Health Fraction\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e0.4\u003c\/td\u003e\n\u003ctd\u003eHP fraction that triggers healing attempt\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eHeal Chance\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e0.6\u003c\/td\u003e\n\u003ctd\u003eProbability of using medical item\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eUse Grenades\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ebool\u003c\/td\u003e\n\u003ctd\u003etrue\u003c\/td\u003e\n\u003ctd\u003eEnable grenade throws\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eGrenade Interval Min\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e8.0\u003c\/td\u003e\n\u003ctd\u003eMinimum seconds between throws\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eGrenade Interval Max\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e15.0\u003c\/td\u003e\n\u003ctd\u003eMaximum seconds between throws\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSeek Cover\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ebool\u003c\/td\u003e\n\u003ctd\u003etrue\u003c\/td\u003e\n\u003ctd\u003eMove to cover when retreating or reloading\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCan Be Blinded\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ebool\u003c\/td\u003e\n\u003ctd\u003etrue\u003c\/td\u003e\n\u003ctd\u003eAffected by flashbangs\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch4\u003eMovement\u003c\/h4\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eField\u003c\/th\u003e\n\u003cth\u003eType\u003c\/th\u003e\n\u003cth\u003eDefault\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSpeed Slowest\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e0.33\u003c\/td\u003e\n\u003ctd\u003eCrawl speed multiplier\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSpeed Slow\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e0.33\u003c\/td\u003e\n\u003ctd\u003eWalk speed multiplier\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSpeed Normal\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e0.5\u003c\/td\u003e\n\u003ctd\u003eJog speed multiplier\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSpeed Fast\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e0.9\u003c\/td\u003e\n\u003ctd\u003eSprint speed multiplier\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eStrafe Distance Min\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e1.0\u003c\/td\u003e\n\u003ctd\u003eMinimum lateral strafe distance (meters)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eStrafe Distance Max\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e6.0\u003c\/td\u003e\n\u003ctd\u003eMaximum lateral strafe distance (meters)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eRoam Range\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e20\u003c\/td\u003e\n\u003ctd\u003eHow far NPC roams from home point (meters)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch4\u003eSquad\u003c\/h4\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eField\u003c\/th\u003e\n\u003cth\u003eType\u003c\/th\u003e\n\u003cth\u003eDefault\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eMax Squad Size\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eint\u003c\/td\u003e\n\u003ctd\u003e5\u003c\/td\u003e\n\u003ctd\u003eMaximum NPCs per squad\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eRecruit Radius\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e10\u003c\/td\u003e\n\u003ctd\u003eDistance to recruit allies (meters)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eRecruit Cooldown\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e15\u003c\/td\u003e\n\u003ctd\u003eSeconds between recruitment attempts\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eFollower Roam Radius\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e4.0\u003c\/td\u003e\n\u003ctd\u003eHow close followers stay to leader (meters)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch4\u003eJump \/ Duck\u003c\/h4\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eField\u003c\/th\u003e\n\u003cth\u003eType\u003c\/th\u003e\n\u003cth\u003eDefault\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eJump Cooldown Min\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e3.0\u003c\/td\u003e\n\u003ctd\u003eMinimum seconds between jumps\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eJump Cooldown Max\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e6.0\u003c\/td\u003e\n\u003ctd\u003eMaximum seconds between jumps\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eJump Height\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e1.5\u003c\/td\u003e\n\u003ctd\u003eJump arc height\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eJump Duration\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e0.65\u003c\/td\u003e\n\u003ctd\u003eJump animation time (seconds)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eDuck Cooldown Min\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e3.0\u003c\/td\u003e\n\u003ctd\u003eMinimum seconds between ducks\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eDuck Cooldown Max\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e6.0\u003c\/td\u003e\n\u003ctd\u003eMaximum seconds between ducks\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eDuck Duration Min\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e0.5\u003c\/td\u003e\n\u003ctd\u003eMinimum crouch hold time (seconds)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eDuck Duration Max\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e3.0\u003c\/td\u003e\n\u003ctd\u003eMaximum crouch hold time (seconds)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch4\u003eNaming (per archetype)\u003c\/h4\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eField\u003c\/th\u003e\n\u003cth\u003eType\u003c\/th\u003e\n\u003cth\u003eDefault\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOverride Global\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ebool\u003c\/td\u003e\n\u003ctd\u003efalse\u003c\/td\u003e\n\u003ctd\u003eUse archetype-specific naming instead of global\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eUse Real Player Names\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ebool\u003c\/td\u003e\n\u003ctd\u003efalse\u003c\/td\u003e\n\u003ctd\u003ePull names from actual players on the server\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCustom Names\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003elist\u003c\/td\u003e\n\u003ctd\u003e[]\u003c\/td\u003e\n\u003ctd\u003eCustom name pool for this archetype\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eDisplay Archetype Name\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ebool\u003c\/td\u003e\n\u003ctd\u003efalse\u003c\/td\u003e\n\u003ctd\u003eShow archetype label in NPC name\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eName Aliases\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003elist\u003c\/td\u003e\n\u003ctd\u003e[]\u003c\/td\u003e\n\u003ctd\u003eAlternate display names for this archetype\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch4\u003eAudio (per archetype)\u003c\/h4\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eField\u003c\/th\u003e\n\u003cth\u003eType\u003c\/th\u003e\n\u003cth\u003eDefault\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOverride Global\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ebool\u003c\/td\u003e\n\u003ctd\u003efalse\u003c\/td\u003e\n\u003ctd\u003eUse archetype-specific audio settings\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAllow Radio Chatter\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ebool\u003c\/td\u003e\n\u003ctd\u003efalse\u003c\/td\u003e\n\u003ctd\u003eEnable radio chatter sound effects\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch4\u003eGlobal Settings\u003c\/h4\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eField\u003c\/th\u003e\n\u003cth\u003eType\u003c\/th\u003e\n\u003cth\u003eDefault\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEnabled\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ebool\u003c\/td\u003e\n\u003ctd\u003etrue\u003c\/td\u003e\n\u003ctd\u003eMaster enable\/disable\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eReplace Vanilla NPCs\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ebool\u003c\/td\u003e\n\u003ctd\u003etrue\u003c\/td\u003e\n\u003ctd\u003eAuto-replace vanilla scientist brains on spawn\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eKill NPCs In Water\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ebool\u003c\/td\u003e\n\u003ctd\u003efalse\u003c\/td\u003e\n\u003ctd\u003eKill NPCs stuck swimming\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eUse Real Player Names\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ebool\u003c\/td\u003e\n\u003ctd\u003efalse\u003c\/td\u003e\n\u003ctd\u003eGlobal: pull NPC names from real players\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCustom Name Pool\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003elist\u003c\/td\u003e\n\u003ctd\u003e[]\u003c\/td\u003e\n\u003ctd\u003eGlobal custom name pool\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eFallback To Vanilla Names\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ebool\u003c\/td\u003e\n\u003ctd\u003etrue\u003c\/td\u003e\n\u003ctd\u003eUse vanilla scientist names if pools are empty\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAllow Radio Chatter\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ebool\u003c\/td\u003e\n\u003ctd\u003etrue\u003c\/td\u003e\n\u003ctd\u003eGlobal: enable radio chatter SFX\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eDegrade Under Load\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003ebool\u003c\/td\u003e\n\u003ctd\u003etrue\u003c\/td\u003e\n\u003ctd\u003eEnable FPS-based performance degradation\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eDegrade Threshold FPS\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eint\u003c\/td\u003e\n\u003ctd\u003e20\u003c\/td\u003e\n\u003ctd\u003eFPS below which degradation kicks in\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eNormal Think Interval\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e0.1\u003c\/td\u003e\n\u003ctd\u003eNPC brain tick rate at normal FPS (seconds)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eDegraded Think Interval\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003efloat\u003c\/td\u003e\n\u003ctd\u003e0.5\u003c\/td\u003e\n\u003ctd\u003eNPC brain tick rate under load (seconds)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003cp\u003e\u003cstrong\u003eSupport\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eFor all questions and feedback, dm me (1928tommygun) on my discord at \u003ca href=\"https:\/\/discord.fragmod.com\"\u003ediscord.fragmod.com\u003c\/a\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003e\u003cstrong\u003eLicense\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eTOMMYGUN'S EULA – BY USING THIS PLUGIN YOU AGREE TO THE FOLLOWING!\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eCode contained in this file is not licensed to be copied, shared, resold, or modified in any way.\u003c\/li\u003e\n\u003cli\u003eYou may copy the plugin freely to each server instance that your organization \u003cstrong\u003eowns\u003c\/strong\u003e.\u003c\/li\u003e\n\u003cli\u003eDo not share this plugin with other server organizations — they must purchase their own licenses.\u003c\/li\u003e\n\u003c\/ul\u003e\n","brand":"1928tommygun","offers":[{"title":"Default Title","offer_id":48932854235388,"sku":null,"price":30.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0613\/6079\/9996\/files\/01_image_c09d72ba-f34b-4358-bcdb-69297b6c1265.jpg?v=1775863068"},{"product_id":"bloodsplatter","title":"Tommygun Blood Splatter","description":"\u003cp\u003e\u003cstrong\u003eCounter-Strike style directional blood splatter for Rust.\u003c\/strong\u003e When a player or NPC is shot, blood is projected onto the wall and floor \u003cem\u003ebehind\u003c\/em\u003e them, along the bullet's travel direction — not a generic puff at the impact point.\u003c\/p\u003e\n\n\u003cp\u003eIt reproduces the GoldSrc\/Source engine blood model: the damage you deal picks a tier, the tier sets how many decals spray and how wide the cone spreads, and a trace finds the surface behind the victim to paint. Bigger hits leave more blood. Headshots leave bigger blood. Kills and heavy hits drop a pool beneath the body.\u003c\/p\u003e\n\n\u003cp\u003eBlood persists — it stays until it ages out (configurable, default 60 seconds) or the live-decal cap recycles it. Every constant is exposed in the config.\u003c\/p\u003e\n\n\u003cdiv style=\"position: relative; width: 100%; padding-bottom: 56.25%; height: 0; overflow: hidden;\"\u003e\n\u003ciframe style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" src=\"https:\/\/www.youtube.com\/embed\/9z-cy6o8bvA\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"\u003e\u003c\/iframe\u003e\n\u003c\/div\u003e\n\n\u003ch3\u003eWhy This Is Different\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eDirectional, not decorative\u003c\/strong\u003e — blood lands on the surface behind the target along the shot line, the way a real exit spray would. Most \"blood\" effects are a fixed particle at the hit point.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eNo spray-can burst\u003c\/strong\u003e — Rust's spray decal fires an unavoidable particle puff every time a client first sees it. This plugin pre-spawns a pool of hidden decals, lets them burst once out of sight, then only ever \u003cem\u003emoves\u003c\/em\u003e them into kill positions. The result is clean blood with none of the spray-can pop-in that a naive implementation shows on every hit.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eZero dependencies\u003c\/strong\u003e — no ImageLibrary, no client mods, no other plugins required. Drop it in.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eWorks on players and NPCs\u003c\/strong\u003e — humans, scientists\/bots, and (optionally) animals, each toggled independently.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eFeatures\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eDamage tiers:\u003c\/strong\u003e low\/medium\/high hits spray 1\/2\/4 decals with widening cone noise — fully configurable thresholds, counts, and spread\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHeadshot emphasis:\u003c\/strong\u003e headshots scale the splatter larger (1.75x by default)\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eFloor pools:\u003c\/strong\u003e a blood pool forms under the body on kill, and optionally on any hit over a damage threshold\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom blood textures:\u003c\/strong\u003e ships with a CS-style blood pack (7 wall splatters + 3 floor pools) as Steam Workshop skins — swap in your own skin IDs to rebrand\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003ePersistent:\u003c\/strong\u003e auto-remove timer is configurable (0 = keep until the cap recycles it)\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eConfigurable triggers:\u003c\/strong\u003e which damage types draw blood (Bullet + Arrow by default), minimum damage, per-victim cooldown so shotgun pellets don't over-spray, and minimum spacing between decals\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eDecal sizing:\u003c\/strong\u003e min\/max size range, projection depth, and surface sink so blood reads as embedded rather than floating\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eBuilt for Instanced Servers\u003c\/h3\u003e\n\u003cp\u003eArena, duel, and match servers can isolate blood per instance: the plugin asks a host plugin which \"bucket\" each player belongs to, and a player only sees blood from their own bucket. Players in one duel never see the blood from the duel next door. If no host plugin answers, every player shares one bucket and the plugin behaves like a standard server-wide blood plugin. See the developer hook below.\u003c\/p\u003e\n\n\u003ch3\u003ePerformance\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePooled decals are spawned once and reused — no per-hit entity churn\u003c\/li\u003e\n\u003cli\u003ePool warm-up is throttled across frames so it never stalls a busy server\u003c\/li\u003e\n\u003cli\u003ePools pre-warm around players and around their grid as combat moves\u003c\/li\u003e\n\u003cli\u003eOne-off fallback decals are capped (default 150) and recycled oldest-first\u003c\/li\u003e\n\u003cli\u003eIdle instance pools are reclaimed automatically to free budget\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003chr\u003e\n\u003ch3\u003ePermissions\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003ePermission\u003c\/th\u003e\n\u003cth\u003eDefault\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etgbloodsplatter.admin\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eManual grant\u003c\/td\u003e\n\u003ctd\u003eUse the admin console commands below\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003eConsole Commands\u003c\/h3\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eCommand\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etgbloodsplatter.clear [bucket|all]\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eClear visible blood — all of it, or a single visibility bucket\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etgbloodsplatter.pools\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eReport every live decal pool and its slot usage (diagnostics)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etgbloodsplatter.debug [0|1]\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eToggle verbose decision logging at runtime (no reload needed)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003eDeveloper Hook (instanced servers)\u003c\/h3\u003e\n\u003cp\u003eTo isolate blood per match\/instance, implement the visibility hook in your host plugin:\u003c\/p\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eHook\u003c\/th\u003e\n\u003cth\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOnBloodVisibilityContext(BasePlayer player)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eReturn an \u003ccode\u003eint\u003c\/code\u003e bucket id for the player. 0 = the shared bucket (no isolation). Players only see blood spawned in their own bucket.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOnBloodVisibilityContextDestroyed(int ctx)\u003c\/code\u003e\u003c\/td\u003e\n\u003ctd\u003eCall when an instance is torn down so its pooled blood is reclaimed immediately instead of waiting for the idle timer.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\n\u003cp\u003e\u003cstrong\u003eSupport\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eFor all questions and feedback, dm me (1928tommygun) on my discord at \u003ca href=\"https:\/\/discord.fragmod.com\"\u003ediscord.fragmod.com\u003c\/a\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003e\u003cstrong\u003eLicense\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eTOMMYGUN'S EULA – BY USING THIS PLUGIN YOU AGREE TO THE FOLLOWING!\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eCode contained in this file is not licensed to be copied, shared, resold, or modified in any way.\u003c\/li\u003e\n\u003cli\u003eYou may copy the plugin freely to each server instance that your organization \u003cstrong\u003eowns\u003c\/strong\u003e.\u003c\/li\u003e\n\u003cli\u003eDo not share this plugin with other server organizations — they must purchase their own licenses.\u003c\/li\u003e\n\u003c\/ul\u003e\n","brand":"1928tommygun","offers":[{"title":"Default Title","offer_id":49239203250428,"sku":null,"price":15.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0613\/6079\/9996\/files\/01_hero.jpg?v=1783097716"}],"url":"https:\/\/payback.fragmod.com\/collections\/best-selling.oembed","provider":"Tommygun's Rust Shop","version":"1.0","type":"link"}