Map Veto System¶
The map veto system allows teams to ban and pick maps in a professional Counter-Strike format, just like FaceIT and HLTV matches.
When Veto is Used¶
Map veto is only available for:
- ✅ Best of 1 (BO1) tournaments
- ✅ Best of 3 (BO3) tournaments
- ✅ Best of 5 (BO5) tournaments
Round Robin and Swiss tournaments use preset maps and don't require veto.
Veto Flow¶
BO1 Format (7 Steps)¶
1. Team A bans a map
2. Team B bans a map
3. Team A bans a map
4. Team B bans a map
5. Team A bans a map
6. Team B bans a map
7. Team A picks starting side on remaining map
Result: 1 map with chosen side
BO3 Format (8 Steps)¶
1. Team A bans a map
2. Team B bans a map
3. Team A picks Map 1
4. Team B picks starting side on Map 1
5. Team B picks Map 2
6. Team A picks starting side on Map 2
7. Team A bans a map
8. Team B bans a map
Result: 2 picked maps + 1 decider (with knife round)
BO5 Format (10 Steps)¶
1. Team A bans a map
2. Team B bans a map
3. Team A picks Map 1
4. Team B picks starting side on Map 1
5. Team B picks Map 2
6. Team A picks starting side on Map 2
7. Team A picks Map 3
8. Team B picks starting side on Map 3
9. Team B picks Map 4
10. Team A picks starting side on Map 4
Result: 4 picked maps + 1 decider (with knife round)
How Teams Complete Veto¶
1. Tournament Must Be Started¶
Admin must click "Start Tournament" first. Until then, teams see:
Waiting for Tournament to Start
Your match is ready, but the tournament hasn't started yet. The map veto will become available once the tournament administrator starts the tournament.
2. Teams Access Veto Interface¶
Each team navigates to their public team page:
They see the map veto interface with:
- Match header: "Team Alpha VS Team Beta"
- Progress indicator: "Step 3 of 8"
- Current action: "Team Alpha: PICK A MAP" (colored header)
- Map grid: All 8 CS2 maps displayed
3. Turn-Based Actions¶
!!! example "Your Turn" - Header shows: "Your turn to ban a map" - Maps are clickable with hover effects - Click a map to ban/pick it
!!! info "Not Your Turn" - Header shows: "Waiting for Team Beta to pick a map..." - All maps are grayed out and disabled - No error messages, just visual feedback
4. Map States¶
Available Maps:
- Full color, clickable
- Hover effect shows intent
Banned Maps:
- 50% opacity
- Grayscale filter
- Red block icon overlay
- Still visible (not hidden)
Picked Maps:
- Green border with thickness
- "MAP ½/3" chip in corner
- Side indicator (CT/T) if chosen
- Green checkmark icon
5. Side Selection¶
After picking a map, the team choosing the side sees:
Choose Your Starting Side
Select which side you want to start on for Mirage
[Counter-Terrorist (CT)] [Terrorist (T)]
!!! tip "Side Selection Strategy" - CT-sided maps: Nuke, Vertigo (often pick CT) - T-sided maps: Mirage, Inferno (often pick T) - Balanced maps: Dust2, Ancient (either side works)
Real-Time Synchronization¶
Both teams see the veto progress live via WebSocket:
- ✅ When Team A bans Ancient, Team B's page instantly shows Ancient as banned
- ✅ Progress bar updates: "Step 2 of 8"
- ✅ Turn indicator updates: "Team Beta: BAN A MAP"
- ✅ Veto history updates: "Team Alpha BANNED Ancient"
No page refresh needed!
After Veto Completes¶
- ✅ Veto marked complete in database
- ✅ Match config generated with picked maps
- ✅ Server auto-allocated from available server pool
- ✅ Match loaded via RCON (
matchzy_loadmatch_url) - ✅ Teams notified — Match status changes to "Loaded"
- ✅ Connect info shown — Server IP, port, connect command
Teams then connect to the server and play!
Veto Timeline¶
Both teams and admins can see the complete veto history:
Veto History
Step 1: Team Alpha BANNED Ancient
Step 2: Team Beta BANNED Vertigo
Step 3: Team Alpha PICKED Mirage (Starting T)
Step 4: Team Beta PICKED Dust2 (Starting CT)
Step 5: Team Alpha BANNED Nuke
Step 6: Team Beta BANNED Inferno
Decider: Anubis (Knife Round)
Admin Capabilities¶
Admins can:
- ✅ View veto progress for any match (Matches page, Match modal)
- ✅ Skip veto if needed (Admin Controls → Skip Veto)
- ✅ Reset veto via API:
POST /api/veto/{matchSlug}/reset - ✅ See who's turn it is in match status
Security¶
!!! success "Turn-Based Enforcement" - Backend validates which team is making each action - Returns 403 Forbidden if wrong team tries to act - Frontend disables UI when it's not your turn - No way for teams to cheat or act out of order
No Authentication Required
Team pages are public (no login). Security is based on:
- **Team identification** from URL (`/team/team-alpha/match`)
- **Turn validation** on backend
- **Visual UI hints** on frontend
Troubleshooting¶
Veto not showing for teams?
Check:
- Tournament status is `in_progress` (admin must start it)
- Match status is `ready`
- Match format is BO1, BO3, or BO5
**Fix:** Admin clicks "Start Tournament" button
Can't click any maps?
Cause: It's not your turn
**Solution:** Wait for other team to complete their action. You'll see:
"Waiting for {Other Team} to ban a map..."
Match not loading after veto?
Check:
- At least one server is online and available
- Check server logs: `Admin Tools → Server Events Monitor`
- Check API logs for allocation errors
**Fix:** Ensure the webhook URL in the dashboard **Settings** points to the tournament API
Next Steps¶
- 📊 Feature Overview — See all features in detail
- 🎮 Running Matches — Match management guide
- 🎯 First Tournament — Step-by-step tutorial