UFS Vote Rewards Plugin
Exclusive rewards for votes on Unofficial-Servers.com
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
What is Unofficial-Servers.com?
Unofficial-Servers.com (UFS) is the next-generation free server list for ARK, Rust and future games.
We show real-time player counts, community rankings, wipe alerts and detailed server info completely free for both players and server owners.
Why vote rewards?
Votes on our site directly improve your server's ranking. More visibility = more players. Rewarding those votes keeps people coming back and pushes your server higher.
Your server is already on UFS
Might as well claim it.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
What is the UFS Vote Rewards Plugin?
A free plugin that automatically rewards players only when they vote for your server on Unofficial-Servers.com.
It does not work with any other voting site.
Available now: ARK: Survival Evolved (via Ark Server API)
Available soon: ARK: Survival Ascended (via Ark Server API)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Features
- Exclusive to UFS — Votes only count from unofficial-servers.com
- Climb the rankings — Every verified vote pushes your server higher
- Fully flexible rewards — Points, items, dinos, or any console command
- Secure — Tied to your server IP + your personal Client ID & Secret
- Auto-register — Plugin claims the server on first start. No manual codes.
- Easy config — Fully commented config.json included
- Works with everything — Compatible with ArkShop and any other plugin/mod
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Setup (Server Owner)
- Create a free account on Unofficial-Servers.com (Steam or Discord login)
- Open your profile (click your name top-right) → copy your Client ID and Secret
- Paste Client ID + Secret into the plugin's config.json
- Restart the server — the plugin registers automatically
In short: Account → Profile → Copy credentials → Claim server → Config → Restart
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
How players claim rewards
- Link Steam account on Unofficial-Servers.com (required)
- Vote for the server on the site (or type /vote in-game)
- Type /claim in-game
- Rewards are granted instantly
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Download
→ Download ufsvoterewards.zip
Includes DLL, config.json and plugin info. Free & open.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Commented config.json
Every setting explained — copy this as a reference, then apply the values to your live config.json (comments are not valid JSON, so keep them in this reference only).
JSON:
{
"VoteRewards": {
"ClientId": "YOUR_CLIENT_ID", // Owner clientId from unofficial-servers.com profile / API credentials
"Secret": "YOUR_SECRET", // Owner secret from unofficial-servers.com profile / API credentials
"Port": 0, // Optional override. If > 0, used instead of ARK command line ?Port=. 0 = auto from game.
"TestMode": false, // If true, /claim skips the vote API and cooldown — use to test rewards repeatedly. Keep false on live servers.
"VoteUrl": "https://unofficial-servers.com", // URL shown with /vote. Default if omitted: https://unofficial-servers.com
"ServerName": "My Server", // Chat prefix for plugin messages
"VoteSitesCommand": "/vote", // Chat command that shows VoteUrl
"CheckCommand": "/claim", // Chat command that checks the vote API and delivers rewards
"ReloadCommand": "/vrreload", // Admin chat command to reload config.json (also: console/RCON UFSVoteRewards.Reload)
// Vote interval is enforced only by vote.unofficial-servers.com (VOTE_INTERVAL_HOURS) — do not configure it here
// false = give points AND items/dinos/commands
// true = 50/50 chance: either points OR items/dinos/commands
"ChanceofPointsOrItems": false,
// ArkShop points (requires ArkShop plugin loaded). Same value = fixed amount.
"MinPointsReward": 50,
"MaxPointsReward": 150,
// Dino delivery (ArkShop-style)
"GiveDinosInCryopods": true, // Pack rewarded dinos into cryopods (or soul traps if UseSoulTraps is true)
"UseSoulTraps": false, // Use Dino Storage V2 Soul Traps instead of vanilla cryopods
"CryoLimitedTime": false, // If true, cryopod durability is set to ~60 minutes
"CryoItemPath": "Blueprint'/Game/Extinction/CoreBlueprints/Weapons/PrimalItem_WeaponEmptyCryopod.PrimalItem_WeaponEmptyCryopod'", // Custom cryopod BP; leave default unless using custom cryos
// Chat messages shown to players
"Messages": {
"Checking": "Checking for votes, please wait...",
"NoRewards": "There are no rewards to claim.",
"VoteSitesHeader": "Vote here to support the server:",
"VoteSitesFooter": "After voting, type /claim to receive your reward.",
"CooldownHoursMinutes": "You must wait {} hours and {} minutes before your next claim.", // {} = hours, {} = minutes
"CooldownSeconds": "You must wait {} seconds before your next claim.", // {} = seconds
"HttpError": "Could not reach vote.unofficial-servers.com. Please try again later.",
"InvalidRequest": "Invalid vote request. Please try again later.",
"Success": "Thanks for voting! Enjoy your reward.",
"ServerNotFound": "Invalid credentials or server not found for this IP/port.",
"SteamNotLinked": "Link your Steam account at https://unofficial-servers.com/ then vote again.",
"NoUnclaimedVote": "No unclaimed vote found. Vote first, then type /claim.",
"AlreadyClaimed": "This vote was already claimed.",
"InvalidSteamId": "Invalid Steam ID.",
"VoteCooldown": "You must wait before voting again.",
"Unknown": "Something went wrong. Please try again later."
},
// Items given to the player inventory
// RewardChance: 0–100 percent (100 = always, 0 = never, 50 = 50%)
"Items": [
{
"Blueprint": "Blueprint'/Game/PrimalEarth/CoreBlueprints/Weapons/PrimalItem_WeaponMetalHatchet.PrimalItem_WeaponMetalHatchet'",
"RewardChance": 100,
"MinQuantity": 2,
"MaxQuantity": 2,
"MinQuality": 5,
"MaxQuality": 5,
"IsBPChance": 0 // 0–100% chance as blueprint (0 = item, 100 = always BP, 50 = 50%)
},
{
"Blueprint": "Blueprint'/Game/PrimalEarth/CoreBlueprints/Weapons/PrimalItem_WeaponMetalHatchet.PrimalItem_WeaponMetalHatchet'",
"RewardChance": 100,
"MinQuantity": 2,
"MaxQuantity": 2,
"MinQuality": 5,
"MaxQuality": 5,
"IsBPChance": 100 // Always blueprint
}
],
// ItemPools: always pick exactly "Pick" entries from Entries (weighted).
// Weight: higher = more likely. Default Weight = 1. Keeps working alongside "Items".
"ItemPools": [
{
"Pick": 1,
"Entries": [
{
"Blueprint": "Blueprint'/Game/PrimalEarth/CoreBlueprints/Items/Armor/Skin/PrimalItemSkin_SafariHat.PrimalItemSkin_SafariHat'",
"Weight": 40,
"MinQuantity": 1,
"MaxQuantity": 1,
"MinQuality": 0,
"MaxQuality": 0,
"IsBPChance": 0
},
{
"Blueprint": "Blueprint'/Game/PrimalEarth/CoreBlueprints/Items/Armor/Skin/ChibiDinos/PrimalItemSkin_ChibiDino_Raptor.PrimalItemSkin_ChibiDino_Raptor'",
"Weight": 35,
"MinQuantity": 1,
"MaxQuantity": 1,
"MinQuality": 0,
"MaxQuality": 0,
"IsBPChance": 0
},
{
"Blueprint": "Blueprint'/Game/PrimalEarth/CoreBlueprints/Items/Armor/Skin/ChibiDinos/PrimalItemSkin_ChibiDino_Rex.PrimalItemSkin_ChibiDino_Rex'",
"Weight": 25,
"MinQuantity": 1,
"MaxQuantity": 1,
"MinQuality": 0,
"MaxQuality": 0,
"IsBPChance": 0
}
]
}
],
// Dinos: independent RewardChance rolls. Here: 50% chance for a Dodo.
"Dinos": [
{
"Blueprint": "Blueprint'/Game/PrimalEarth/Dinos/Dodo/Dodo_Character_BP.Dodo_Character_BP'",
"RewardChance": 50, // 50%
"MinQuantity": 1,
"MaxQuantity": 1,
"MinLevel": 100,
"MaxLevel": 150,
"Tamed": true,
"Neutered": false,
"Gender": "random",
"SaddleBlueprint": "",
"PreventCryo": false
}
],
// DinoPools: always pick exactly one better dino (weighted). No Dodo here.
"DinoPools": [
{
"Pick": 1,
"Entries": [
{
"Blueprint": "Blueprint'/Game/PrimalEarth/Dinos/Raptor/Raptor_Character_BP.Raptor_Character_BP'",
"Weight": 28,
"MinQuantity": 1,
"MaxQuantity": 1,
"MinLevel": 120,
"MaxLevel": 150,
"Tamed": true,
"Neutered": false,
"Gender": "random",
"SaddleBlueprint": "Blueprint'/Game/PrimalEarth/CoreBlueprints/Items/Saddle/PrimalItemArmor_RaptorSaddle.PrimalItemArmor_RaptorSaddle'",
"PreventCryo": false
},
{
"Blueprint": "Blueprint'/Game/PrimalEarth/Dinos/Ptero/Ptero_Character_BP.Ptero_Character_BP'",
"Weight": 20,
"MinQuantity": 1,
"MaxQuantity": 1,
"MinLevel": 120,
"MaxLevel": 150,
"Tamed": true,
"Neutered": false,
"Gender": "random",
"SaddleBlueprint": "Blueprint'/Game/PrimalEarth/CoreBlueprints/Items/Saddle/PrimalItemArmor_PteroSaddle.PrimalItemArmor_PteroSaddle'",
"PreventCryo": false
},
{
"Blueprint": "Blueprint'/Game/PrimalEarth/Dinos/Argentavis/Argent_Character_BP.Argent_Character_BP'",
"Weight": 16,
"MinQuantity": 1,
"MaxQuantity": 1,
"MinLevel": 130,
"MaxLevel": 150,
"Tamed": true,
"Neutered": false,
"Gender": "random",
"SaddleBlueprint": "Blueprint'/Game/PrimalEarth/CoreBlueprints/Items/Saddle/PrimalItemArmor_ArgentavisSaddle.PrimalItemArmor_ArgentavisSaddle'",
"PreventCryo": false
},
{
"Blueprint": "Blueprint'/Game/PrimalEarth/Dinos/Therizinosaurus/Therizino_Character_BP.Therizino_Character_BP'",
"Weight": 10,
"MinQuantity": 1,
"MaxQuantity": 1,
"MinLevel": 140,
"MaxLevel": 150,
"Tamed": true,
"Neutered": false,
"Gender": "random",
"SaddleBlueprint": "Blueprint'/Game/PrimalEarth/CoreBlueprints/Items/Saddle/PrimalItemArmor_TherizinosaurusSaddle.PrimalItemArmor_TherizinosaurusSaddle'",
"PreventCryo": false
},
{
"Blueprint": "Blueprint'/Game/PrimalEarth/Dinos/Rex/Rex_Character_BP.Rex_Character_BP'",
"Weight": 7,
"MinQuantity": 1,
"MaxQuantity": 1,
"MinLevel": 145,
"MaxLevel": 150,
"Tamed": true,
"Neutered": false,
"Gender": "random",
"SaddleBlueprint": "Blueprint'/Game/PrimalEarth/CoreBlueprints/Items/Saddle/PrimalItemArmor_RexSaddle.PrimalItemArmor_RexSaddle'",
"PreventCryo": false
},
{
"Blueprint": "Blueprint'/Game/PrimalEarth/Dinos/Giganotosaurus/Gigant_Character_BP.Gigant_Character_BP'",
"Weight": 5,
"MinQuantity": 1,
"MaxQuantity": 1,
"MinLevel": 140,
"MaxLevel": 150,
"Tamed": true,
"Neutered": false,
"Gender": "random",
"SaddleBlueprint": "Blueprint'/Game/PrimalEarth/CoreBlueprints/Items/Saddle/PrimalItemArmor_GigantSaddle.PrimalItemArmor_GigantSaddle'",
"PreventCryo": false
},
{
"Blueprint": "Blueprint'/Game/LostIsland/Dinos/Carcharodontosaurus/Carcha_Character_BP.Carcha_Character_BP'",
"Weight": 4,
"MinQuantity": 1,
"MaxQuantity": 1,
"MinLevel": 140,
"MaxLevel": 150,
"Tamed": true,
"Neutered": false,
"Gender": "random",
"SaddleBlueprint": "Blueprint'/Game/LostIsland/Dinos/Carcharodontosaurus/PrimalItemArmor_CarchaSaddle.PrimalItemArmor_CarchaSaddle'",
"PreventCryo": false
}
]
}
],
// Console commands run as the player
// Placeholders: {steamid}, {playerid}, {tribeid}, {playername}
"Commands": [
{
"Command": "Broadcast {playername} just got a vote reward!",
"ExecuteAsAdmin": true,
"RewardChance": 100
},
{
"Command": "gfi CementingPaste 50 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 45
},
{
"Command": "gfi Polymer 25 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 30
},
{
"Command": "gfi MetalIngot 100 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 35
},
{
"Command": "gfi Crystal 75 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 40
},
{
"Command": "gfi Obsidian 40 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 30
},
{
"Command": "gfi Oil 50 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 35
},
{
"Command": "gfi Electronics 30 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 25
},
{
"Command": "gfi BlackPearl 15 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 20
},
{
"Command": "gfi Hide 200 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 50
},
{
"Command": "gfi Fiber 300 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 55
},
{
"Command": "gfi Flint 150 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 50
},
{
"Command": "gfi Charcoal 100 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 45
},
{
"Command": "gfi Metal 150 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 40
},
{
"Command": "gfi Chitin 100 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 40
},
{
"Command": "gfi Keratin 100 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 40
},
{
"Command": "gfi Pelt 80 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 40
},
{
"Command": "gfi Sparkpowder 75 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 40
},
{
"Command": "gfi Gunpowder 50 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 35
},
{
"Command": "gfi Narcotic 40 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 40
},
{
"Command": "gfi OrganicPolymer 30 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 30
},
{
"Command": "gfi SilicaPearls 40 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 30
},
{
"Command": "gfi AbsorbentSubstrate 10 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 15
},
{
"Command": "gfi ElementDust 25 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 12
},
{
"Command": "gfi Element 1 0 0",
"ExecuteAsAdmin": true,
"RewardChance": 5
}
]
}
}
RewardChance: 100 = always · 0 = never · other values = % chance
ItemPools / DinoPools: always pick exactly Pick entries by Weight (higher = more likely)
TestMode skips the API check — never enable in production
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Commands
Players
- /vote — Shows the vote link
- /claim — Checks vote and grants rewards
Admins
- /vrreload — Reload config (chat)
- UFSVoteRewards.Reload — Reload from console / RCON
- /vrtest — Test rewards without API check
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Video Tutorial
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━