Repository files navigation

ServerFiles

A centralized configuration repository for UDL.TF Team Fortress 2 game servers, managing SourceMod plugins, server configurations, and game mode assets.

License

Overview

ServerFiles serves as the single source of truth for all UDL.TF Team Fortress 2 server configurations and assets. This repository manages everything from SourceMod plugins and their configurations to game mode-specific settings and custom map files. By centralizing these resources, it ensures consistency across all server instances while providing a versioned history of all server changes.

The repository follows a modular structure where shared base configurations are stored in the base/ directory, while game mode-specific configurations are organized in their own directories. This approach allows for efficient deployment of different server types while maintaining common plugins and configurations. The system is designed to work with FastDL for quick client downloads and supports multiple difficulty levels for various game modes.

Built on top of SourceMod, a popular Source engine server modification framework, ServerFiles includes essential plugins for server management, anti-cheat systems (SourceBans++), player utilities, and game mode-specific enhancements. The configuration system leverages SourceMod's modular approach and Valve's config execution system to provide flexible server behavior across different game modes.

Key Responsibilities

  • Plugin Management: Hosts compiled SourceMod plugins (.smx files) for server functionality including admin tools, SourceBans++ integration, player utilities, and game mode features
  • Configuration Distribution: Maintains centralized server configs (server.cfg, game mode-specific configs) that define server behavior, networking, logging, and SourceMod plugin settings
  • Asset Management: Organizes custom maps and materials, utilizing chunked compression (.bz2.parts) for large map files to overcome GitHub file size limitations
  • Game Mode Support: Provides isolated configuration sets for different TF2 game modes with varying difficulty levels and specific plugin requirements

Architecture

graph TB
subgraph "ServerFiles Repository"
BASE[base/]
GAMEMODES[Game Mode Directories]
end
subgraph "Base Components"
BASE --> ADDONS[addons/sourcemod/]
BASE --> CFG[cfg/]
ADDONS --> PLUGINS[plugins/*.smx]
ADDONS --> CONFIGS[configs/]
ADDONS --> GAMEDATA[gamedata/]
ADDONS --> TRANSLATIONS[translations/]
CFG --> SERVERCFG[server.cfg]
CFG --> MODECFG[Game mode configs]
CFG --> SMCFG[sourcemod/*.cfg]
end
subgraph "External Systems"
FASTDL[FastDL Server<br/>fastdl.udl.tf]
GAMESERVERS[TF2 Game Servers]
SOURCEBANS[SourceBans++ Database]
end
SERVERCFG -.->|sv_downloadurl| FASTDL
PLUGINS -.->|sbpp_* plugins| SOURCEBANS
BASE -.->|deployed to| GAMESERVERS
GAMEMODES -.->|deployed to| GAMESERVERS
style BASE fill:#1e3a5f,stroke:#4a90e2,color:#ffffff
style GAMEMODES fill:#5f3e1e,stroke:#e2a04a,color:#ffffff
style PLUGINS fill:#1e5f3e,stroke:#4ae27a,color:#ffffff
style FASTDL fill:#5f1e3e,stroke:#e24a7a,color:#ffffff
Loading

How It Works

Server Initialization Flow

sequenceDiagram
autonumber
participant Admin
participant Repo as ServerFiles Repo
participant Server as TF2 Server
participant SM as SourceMod
participant FastDL as FastDL Server
participant Client as TF2 Client
Admin->>Repo: Clone/update repository
Admin->>Server: Deploy configs & plugins
Server->>Server: Load server.cfg
Server->>SM: Initialize SourceMod
SM->>SM: Load plugins from addons/sourcemod/plugins/
SM->>SM: Parse configs from addons/sourcemod/configs/
Server->>Server: Execute game mode cfg
Client->>Server: Connect to server
Server->>Client: Send required files list
alt File needs download
Client->>FastDL: Request file (map/material/sound)
FastDL->>Client: Return compressed file
end
Client->>Server: Join game
SM->>Client: Apply plugin features (ads, logos, utilities)
Loading

Map File Management State Machine

stateDiagram-v2
[*] --> Original: Map file added
Original --> Checking: Check file size
Checking --> SmallFile: Size < 25MB
Checking --> LargeFile: Size >= 25MB
SmallFile --> Committed: Commit .bsp directly
LargeFile --> Compressing: bzip2 compression
Compressing --> Splitting: Split into parts
Splitting --> PartsCreated: Create .bz2.parts/ dir
PartsCreated --> Committed: Commit parts
Committed --> FastDL: Upload to FastDL
FastDL --> [*]: Available for download
note right of LargeFile
GitHub has 25MB limit
Large maps need splitting
end note
note right of PartsCreated
Each part < 25MB
Named sequentially:
.part.000, .part.001, etc.
end note
Loading

Features

  • SourceMod Plugin Suite: Comprehensive collection of server management plugins including admin controls (admingrab.smx), communication systems (advertisements.smx, tidychat.smx), and player utilities (respawn.smx, hugkiss.smx, aimnames.smx)
  • SourceBans++ Integration: Full SourceBans++ system with main functionality (sbpp_main.smx), communications management (sbpp_comms.smx), admin configuration (sbpp_admcfg.smx), checker (sbpp_checker.smx), reporting (sbpp_report.smx), and sleuth capabilities (sbpp_sleuth.smx) for centralized ban management
  • Game Mode Configurations: Dedicated configuration files for multiple TF2 game modes with optimized settings for each playstyle
  • FastDL Integration: Configured sv_downloadurl pointing to http://fastdl.udl.tf/ for rapid client-side asset downloads, reducing connection times and improving player experience
  • Custom Map Support: Organized storage for custom maps with intelligent handling of large files through .bz2 compression and part-splitting to overcome GitHub's file size limitations
  • Modular Difficulty System: Game modes support multiple difficulty levels with separate plugin configurations and settings allowing progressive gameplay challenges
  • Network Optimization: Dedicated network.cfg with optimized server networking settings, rate limits, and bandwidth configurations for stable multiplayer performance
  • Comprehensive Logging: Structured logging configuration (log.cfg) for server events, player actions, and plugin activities, essential for debugging and server administration
  • Translation Support: Multi-language translation files for plugins (hugkiss.phrases.txt, respawn.phrases.txt, sbpp_*.phrases.txt) enabling internationalization of server messages
  • Extension Ecosystem: Collection of SourceMod extensions and gamedata files (connect.games.txt, tf2.attributes.txt, sourcetvmanager.games.txt) providing low-level functionality for advanced plugin features

Configuration

Key Configuration Files

FileDescriptionLocation
server.cfgMain server configuration with sv_downloadurl, sv_tags, and core settingsbase/cfg/server.cfg
<gamemode>.cfgGame mode-specific settings (e.g., bhop.cfg, surf.cfg)base/cfg/<gamemode>.cfg
network.cfgNetwork and bandwidth configurationbase/cfg/network.cfg
log.cfgLogging configurationbase/cfg/log.cfg
plugins.cfgPlugin-specific settingsbase/cfg/plugins.cfg
sourcetv.cfgSourceTV demo recording settingsbase/cfg/sourcetv.cfg
advertisements.txtServer advertisement messagesbase/addons/sourcemod/configs/advertisements.txt
serverhudlogo.cfgServer HUD logo configurationbase/addons/sourcemod/configs/serverhudlogo.cfg
tidychat.cfgChat formatting and filteringbase/cfg/sourcemod/tidychat.cfg
spirt.dl.cfgSpirit download precache configurationbase/cfg/sourcemod/spirt.dl.cfg

Development

Project Structure

ServerFiles/
├── .github/ # GitHub Actions and workflows
├── base/ # Shared base files for all servers
│ ├── addons/sourcemod/ # SourceMod framework files
│ │ ├── configs/ # Plugin configuration files
│ │ ├── extensions/ # SourceMod extensions (.so/.dll files)
│ │ ├── gamedata/ # Game signatures and offsets
│ │ ├── plugins/ # Compiled SourceMod plugins (.smx)
│ │ └── translations/ # Multi-language phrase files
│ └── cfg/ # Server configuration files
│ ├── server.cfg # Main server config
│ ├── <gamemode>.cfg # Game mode configs
│ ├── network.cfg # Network settings
│ ├── log.cfg # Logging configuration
│ └── sourcemod/ # SourceMod-specific configs
├── <gamemode>/ # Game mode-specific files
│ ├── base/ # Shared files for this game mode
│ │ ├── addons/sourcemod/ # Game mode-specific plugins
│ │ ├── cfg/ # Game mode configurations
│ │ ├── maps/ # Custom maps
│ │ └── materials/ # Custom textures (optional)
│ └── <difficulty>/ # Difficulty variant overrides (optional)
├── LICENSE
└── README.md

How Maps Work

Map File Organization

Maps in this repository are organized by game mode under their respective directories (<gamemode>/base/maps/). Each map consists of:

  1. The .bsp file: The actual compiled Source engine map file that the server loads
  2. The .bsp.bz2 file: Compressed version uploaded to FastDL for client downloads
  3. The .bz2.parts/ directory: Split compressed parts stored in GitHub for large maps

GitHub Large File Handling

GitHub has a 25MB file size limit. Many custom TF2 maps exceed this limit, so this repository uses a chunking system:

mapfile.bsp # Actual map file (too large for GitHub)
mapfile.bsp.bz2.parts/ # Directory containing split parts
├── mapfile.bsp.bz2.part.000 # Part 1 (< 25MB)
├── mapfile.bsp.bz2.part.001 # Part 2 (< 25MB)
├── mapfile.bsp.bz2.part.002 # Part 3 (< 25MB)
└── ... # Additional parts as needed

Creating split map files:

# Compress the map
bzip2 -k mapfile.bsp # Creates mapfile.bsp.bz2# Split into 20MB chunks (safely under 25MB limit)
mkdir mapfile.bsp.bz2.parts
split -b 20M mapfile.bsp.bz2 mapfile.bsp.bz2.parts/mapfile.bsp.bz2.part.

Reassembling split map files:

# Concatenate parts back together
cat mapfile.bsp.bz2.parts/*.part.*> mapfile.bsp.bz2
# Decompress
bunzip2 mapfile.bsp.bz2 # Creates mapfile.bsp

Map Deployment Best Practices

  1. Always compress maps for FastDL: Use bzip2 -k mapfile.bsp to create .bsp.bz2 files
  2. Test maps locally first: Verify maps load correctly before committing
  3. Use consistent naming: UDL maps follow pattern gamemode_mapname_udl_version.bsp
  4. Update mapcycle.txt: Add new maps to the game mode's mapcycle.txt for rotation
  5. Version your maps: Include version numbers in filenames (e.g., _v4, _a06 for alpha)
  6. Keep source files external: .vmf (map source) files should not be committed to this repo

License

See LICENSE file for details.

Dependencies

About

This repository contains all the server files for UDL.TF - Everything from configs to plugins.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

ServerFiles

A centralized configuration repository for UDL.TF Team Fortress 2 game servers, managing SourceMod plugins, server configurations, and game mode assets.

License

Overview

ServerFiles serves as the single source of truth for all UDL.TF Team Fortress 2 server configurations and assets. This repository manages everything from SourceMod plugins and their configurations to game mode-specific settings and custom map files. By centralizing these resources, it ensures consistency across all server instances while providing a versioned history of all server changes.

The repository follows a modular structure where shared base configurations are stored in the base/ directory, while game mode-specific configurations are organized in their own directories. This approach allows for efficient deployment of different server types while maintaining common plugins and configurations. The system is designed to work with FastDL for quick client downloads and supports multiple difficulty levels for various game modes.

Built on top of SourceMod, a popular Source engine server modification framework, ServerFiles includes essential plugins for server management, anti-cheat systems (SourceBans++), player utilities, and game mode-specific enhancements. The configuration system leverages SourceMod's modular approach and Valve's config execution system to provide flexible server behavior across different game modes.

Key Responsibilities

  • Plugin Management: Hosts compiled SourceMod plugins (.smx files) for server functionality including admin tools, SourceBans++ integration, player utilities, and game mode features
  • Configuration Distribution: Maintains centralized server configs (server.cfg, game mode-specific configs) that define server behavior, networking, logging, and SourceMod plugin settings
  • Asset Management: Organizes custom maps and materials, utilizing chunked compression (.bz2.parts) for large map files to overcome GitHub file size limitations
  • Game Mode Support: Provides isolated configuration sets for different TF2 game modes with varying difficulty levels and specific plugin requirements

Architecture

graph TB
subgraph "ServerFiles Repository"
BASE[base/]
GAMEMODES[Game Mode Directories]
end
subgraph "Base Components"
BASE --> ADDONS[addons/sourcemod/]
BASE --> CFG[cfg/]
ADDONS --> PLUGINS[plugins/*.smx]
ADDONS --> CONFIGS[configs/]
ADDONS --> GAMEDATA[gamedata/]
ADDONS --> TRANSLATIONS[translations/]
CFG --> SERVERCFG[server.cfg]
CFG --> MODECFG[Game mode configs]
CFG --> SMCFG[sourcemod/*.cfg]
end
subgraph "External Systems"
FASTDL[FastDL Server<br/>fastdl.udl.tf]
GAMESERVERS[TF2 Game Servers]
SOURCEBANS[SourceBans++ Database]
end
SERVERCFG -.->|sv_downloadurl| FASTDL
PLUGINS -.->|sbpp_* plugins| SOURCEBANS
BASE -.->|deployed to| GAMESERVERS
GAMEMODES -.->|deployed to| GAMESERVERS
style BASE fill:#1e3a5f,stroke:#4a90e2,color:#ffffff
style GAMEMODES fill:#5f3e1e,stroke:#e2a04a,color:#ffffff
style PLUGINS fill:#1e5f3e,stroke:#4ae27a,color:#ffffff
style FASTDL fill:#5f1e3e,stroke:#e24a7a,color:#ffffff
Loading

How It Works

Server Initialization Flow

sequenceDiagram
autonumber
participant Admin
participant Repo as ServerFiles Repo
participant Server as TF2 Server
participant SM as SourceMod
participant FastDL as FastDL Server
participant Client as TF2 Client
Admin->>Repo: Clone/update repository
Admin->>Server: Deploy configs & plugins
Server->>Server: Load server.cfg
Server->>SM: Initialize SourceMod
SM->>SM: Load plugins from addons/sourcemod/plugins/
SM->>SM: Parse configs from addons/sourcemod/configs/
Server->>Server: Execute game mode cfg
Client->>Server: Connect to server
Server->>Client: Send required files list
alt File needs download
Client->>FastDL: Request file (map/material/sound)
FastDL->>Client: Return compressed file
end
Client->>Server: Join game
SM->>Client: Apply plugin features (ads, logos, utilities)
Loading

Map File Management State Machine

stateDiagram-v2
[*] --> Original: Map file added
Original --> Checking: Check file size
Checking --> SmallFile: Size < 25MB
Checking --> LargeFile: Size >= 25MB
SmallFile --> Committed: Commit .bsp directly
LargeFile --> Compressing: bzip2 compression
Compressing --> Splitting: Split into parts
Splitting --> PartsCreated: Create .bz2.parts/ dir
PartsCreated --> Committed: Commit parts
Committed --> FastDL: Upload to FastDL
FastDL --> [*]: Available for download
note right of LargeFile
GitHub has 25MB limit
Large maps need splitting
end note
note right of PartsCreated
Each part < 25MB
Named sequentially:
.part.000, .part.001, etc.
end note
Loading

Features

  • SourceMod Plugin Suite: Comprehensive collection of server management plugins including admin controls (admingrab.smx), communication systems (advertisements.smx, tidychat.smx), and player utilities (respawn.smx, hugkiss.smx, aimnames.smx)
  • SourceBans++ Integration: Full SourceBans++ system with main functionality (sbpp_main.smx), communications management (sbpp_comms.smx), admin configuration (sbpp_admcfg.smx), checker (sbpp_checker.smx), reporting (sbpp_report.smx), and sleuth capabilities (sbpp_sleuth.smx) for centralized ban management
  • Game Mode Configurations: Dedicated configuration files for multiple TF2 game modes with optimized settings for each playstyle
  • FastDL Integration: Configured sv_downloadurl pointing to http://fastdl.udl.tf/ for rapid client-side asset downloads, reducing connection times and improving player experience
  • Custom Map Support: Organized storage for custom maps with intelligent handling of large files through .bz2 compression and part-splitting to overcome GitHub's file size limitations
  • Modular Difficulty System: Game modes support multiple difficulty levels with separate plugin configurations and settings allowing progressive gameplay challenges
  • Network Optimization: Dedicated network.cfg with optimized server networking settings, rate limits, and bandwidth configurations for stable multiplayer performance
  • Comprehensive Logging: Structured logging configuration (log.cfg) for server events, player actions, and plugin activities, essential for debugging and server administration
  • Translation Support: Multi-language translation files for plugins (hugkiss.phrases.txt, respawn.phrases.txt, sbpp_*.phrases.txt) enabling internationalization of server messages
  • Extension Ecosystem: Collection of SourceMod extensions and gamedata files (connect.games.txt, tf2.attributes.txt, sourcetvmanager.games.txt) providing low-level functionality for advanced plugin features

Configuration

Key Configuration Files

FileDescriptionLocation
server.cfgMain server configuration with sv_downloadurl, sv_tags, and core settingsbase/cfg/server.cfg
<gamemode>.cfgGame mode-specific settings (e.g., bhop.cfg, surf.cfg)base/cfg/<gamemode>.cfg
network.cfgNetwork and bandwidth configurationbase/cfg/network.cfg
log.cfgLogging configurationbase/cfg/log.cfg
plugins.cfgPlugin-specific settingsbase/cfg/plugins.cfg
sourcetv.cfgSourceTV demo recording settingsbase/cfg/sourcetv.cfg
advertisements.txtServer advertisement messagesbase/addons/sourcemod/configs/advertisements.txt
serverhudlogo.cfgServer HUD logo configurationbase/addons/sourcemod/configs/serverhudlogo.cfg
tidychat.cfgChat formatting and filteringbase/cfg/sourcemod/tidychat.cfg
spirt.dl.cfgSpirit download precache configurationbase/cfg/sourcemod/spirt.dl.cfg

Development

Project Structure

ServerFiles/
├── .github/ # GitHub Actions and workflows
├── base/ # Shared base files for all servers
│ ├── addons/sourcemod/ # SourceMod framework files
│ │ ├── configs/ # Plugin configuration files
│ │ ├── extensions/ # SourceMod extensions (.so/.dll files)
│ │ ├── gamedata/ # Game signatures and offsets
│ │ ├── plugins/ # Compiled SourceMod plugins (.smx)
│ │ └── translations/ # Multi-language phrase files
│ └── cfg/ # Server configuration files
│ ├── server.cfg # Main server config
│ ├── <gamemode>.cfg # Game mode configs
│ ├── network.cfg # Network settings
│ ├── log.cfg # Logging configuration
│ └── sourcemod/ # SourceMod-specific configs
├── <gamemode>/ # Game mode-specific files
│ ├── base/ # Shared files for this game mode
│ │ ├── addons/sourcemod/ # Game mode-specific plugins
│ │ ├── cfg/ # Game mode configurations
│ │ ├── maps/ # Custom maps
│ │ └── materials/ # Custom textures (optional)
│ └── <difficulty>/ # Difficulty variant overrides (optional)
├── LICENSE
└── README.md

How Maps Work

Map File Organization

Maps in this repository are organized by game mode under their respective directories (<gamemode>/base/maps/). Each map consists of:

  1. The .bsp file: The actual compiled Source engine map file that the server loads
  2. The .bsp.bz2 file: Compressed version uploaded to FastDL for client downloads
  3. The .bz2.parts/ directory: Split compressed parts stored in GitHub for large maps

GitHub Large File Handling

GitHub has a 25MB file size limit. Many custom TF2 maps exceed this limit, so this repository uses a chunking system:

mapfile.bsp # Actual map file (too large for GitHub)
mapfile.bsp.bz2.parts/ # Directory containing split parts
├── mapfile.bsp.bz2.part.000 # Part 1 (< 25MB)
├── mapfile.bsp.bz2.part.001 # Part 2 (< 25MB)
├── mapfile.bsp.bz2.part.002 # Part 3 (< 25MB)
└── ... # Additional parts as needed

Creating split map files:

# Compress the map
bzip2 -k mapfile.bsp # Creates mapfile.bsp.bz2# Split into 20MB chunks (safely under 25MB limit)
mkdir mapfile.bsp.bz2.parts
split -b 20M mapfile.bsp.bz2 mapfile.bsp.bz2.parts/mapfile.bsp.bz2.part.

Reassembling split map files:

# Concatenate parts back together
cat mapfile.bsp.bz2.parts/*.part.*> mapfile.bsp.bz2
# Decompress
bunzip2 mapfile.bsp.bz2 # Creates mapfile.bsp

Map Deployment Best Practices

  1. Always compress maps for FastDL: Use bzip2 -k mapfile.bsp to create .bsp.bz2 files
  2. Test maps locally first: Verify maps load correctly before committing
  3. Use consistent naming: UDL maps follow pattern gamemode_mapname_udl_version.bsp
  4. Update mapcycle.txt: Add new maps to the game mode's mapcycle.txt for rotation
  5. Version your maps: Include version numbers in filenames (e.g., _v4, _a06 for alpha)
  6. Keep source files external: .vmf (map source) files should not be committed to this repo

License

See LICENSE file for details.

Dependencies

About

This repository contains all the server files for UDL.TF - Everything from configs to plugins.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ServerFiles

A centralized configuration repository for UDL.TF Team Fortress 2 game servers, managing SourceMod plugins, server configurations, and game mode assets.

License

Overview

ServerFiles serves as the single source of truth for all UDL.TF Team Fortress 2 server configurations and assets. This repository manages everything from SourceMod plugins and their configurations to game mode-specific settings and custom map files. By centralizing these resources, it ensures consistency across all server instances while providing a versioned history of all server changes.

The repository follows a modular structure where shared base configurations are stored in the base/ directory, while game mode-specific configurations are organized in their own directories. This approach allows for efficient deployment of different server types while maintaining common plugins and configurations. The system is designed to work with FastDL for quick client downloads and supports multiple difficulty levels for various game modes.

Built on top of SourceMod, a popular Source engine server modification framework, ServerFiles includes essential plugins for server management, anti-cheat systems (SourceBans++), player utilities, and game mode-specific enhancements. The configuration system leverages SourceMod's modular approach and Valve's config execution system to provide flexible server behavior across different game modes.

Key Responsibilities

  • Plugin Management: Hosts compiled SourceMod plugins (.smx files) for server functionality including admin tools, SourceBans++ integration, player utilities, and game mode features
  • Configuration Distribution: Maintains centralized server configs (server.cfg, game mode-specific configs) that define server behavior, networking, logging, and SourceMod plugin settings
  • Asset Management: Organizes custom maps and materials, utilizing chunked compression (.bz2.parts) for large map files to overcome GitHub file size limitations
  • Game Mode Support: Provides isolated configuration sets for different TF2 game modes with varying difficulty levels and specific plugin requirements

Architecture

graph TB
subgraph "ServerFiles Repository"
BASE[base/]
GAMEMODES[Game Mode Directories]
end
subgraph "Base Components"
BASE --> ADDONS[addons/sourcemod/]
BASE --> CFG[cfg/]
ADDONS --> PLUGINS[plugins/*.smx]
ADDONS --> CONFIGS[configs/]
ADDONS --> GAMEDATA[gamedata/]
ADDONS --> TRANSLATIONS[translations/]
CFG --> SERVERCFG[server.cfg]
CFG --> MODECFG[Game mode configs]
CFG --> SMCFG[sourcemod/*.cfg]
end
subgraph "External Systems"
FASTDL[FastDL Server<br/>fastdl.udl.tf]
GAMESERVERS[TF2 Game Servers]
SOURCEBANS[SourceBans++ Database]
end
SERVERCFG -.->|sv_downloadurl| FASTDL
PLUGINS -.->|sbpp_* plugins| SOURCEBANS
BASE -.->|deployed to| GAMESERVERS
GAMEMODES -.->|deployed to| GAMESERVERS
style BASE fill:#1e3a5f,stroke:#4a90e2,color:#ffffff
style GAMEMODES fill:#5f3e1e,stroke:#e2a04a,color:#ffffff
style PLUGINS fill:#1e5f3e,stroke:#4ae27a,color:#ffffff
style FASTDL fill:#5f1e3e,stroke:#e24a7a,color:#ffffff
Loading

How It Works

Server Initialization Flow

sequenceDiagram
autonumber
participant Admin
participant Repo as ServerFiles Repo
participant Server as TF2 Server
participant SM as SourceMod
participant FastDL as FastDL Server
participant Client as TF2 Client
Admin->>Repo: Clone/update repository
Admin->>Server: Deploy configs & plugins
Server->>Server: Load server.cfg
Server->>SM: Initialize SourceMod
SM->>SM: Load plugins from addons/sourcemod/plugins/
SM->>SM: Parse configs from addons/sourcemod/configs/
Server->>Server: Execute game mode cfg
Client->>Server: Connect to server
Server->>Client: Send required files list
alt File needs download
Client->>FastDL: Request file (map/material/sound)
FastDL->>Client: Return compressed file
end
Client->>Server: Join game
SM->>Client: Apply plugin features (ads, logos, utilities)
Loading

Map File Management State Machine

stateDiagram-v2
[*] --> Original: Map file added
Original --> Checking: Check file size
Checking --> SmallFile: Size < 25MB
Checking --> LargeFile: Size >= 25MB
SmallFile --> Committed: Commit .bsp directly
LargeFile --> Compressing: bzip2 compression
Compressing --> Splitting: Split into parts
Splitting --> PartsCreated: Create .bz2.parts/ dir
PartsCreated --> Committed: Commit parts
Committed --> FastDL: Upload to FastDL
FastDL --> [*]: Available for download
note right of LargeFile
GitHub has 25MB limit
Large maps need splitting
end note
note right of PartsCreated
Each part < 25MB
Named sequentially:
.part.000, .part.001, etc.
end note
Loading

Features

  • SourceMod Plugin Suite: Comprehensive collection of server management plugins including admin controls (admingrab.smx), communication systems (advertisements.smx, tidychat.smx), and player utilities (respawn.smx, hugkiss.smx, aimnames.smx)
  • SourceBans++ Integration: Full SourceBans++ system with main functionality (sbpp_main.smx), communications management (sbpp_comms.smx), admin configuration (sbpp_admcfg.smx), checker (sbpp_checker.smx), reporting (sbpp_report.smx), and sleuth capabilities (sbpp_sleuth.smx) for centralized ban management
  • Game Mode Configurations: Dedicated configuration files for multiple TF2 game modes with optimized settings for each playstyle
  • FastDL Integration: Configured sv_downloadurl pointing to http://fastdl.udl.tf/ for rapid client-side asset downloads, reducing connection times and improving player experience
  • Custom Map Support: Organized storage for custom maps with intelligent handling of large files through .bz2 compression and part-splitting to overcome GitHub's file size limitations
  • Modular Difficulty System: Game modes support multiple difficulty levels with separate plugin configurations and settings allowing progressive gameplay challenges
  • Network Optimization: Dedicated network.cfg with optimized server networking settings, rate limits, and bandwidth configurations for stable multiplayer performance
  • Comprehensive Logging: Structured logging configuration (log.cfg) for server events, player actions, and plugin activities, essential for debugging and server administration
  • Translation Support: Multi-language translation files for plugins (hugkiss.phrases.txt, respawn.phrases.txt, sbpp_*.phrases.txt) enabling internationalization of server messages
  • Extension Ecosystem: Collection of SourceMod extensions and gamedata files (connect.games.txt, tf2.attributes.txt, sourcetvmanager.games.txt) providing low-level functionality for advanced plugin features

Configuration

Key Configuration Files

FileDescriptionLocation
server.cfgMain server configuration with sv_downloadurl, sv_tags, and core settingsbase/cfg/server.cfg
<gamemode>.cfgGame mode-specific settings (e.g., bhop.cfg, surf.cfg)base/cfg/<gamemode>.cfg
network.cfgNetwork and bandwidth configurationbase/cfg/network.cfg
log.cfgLogging configurationbase/cfg/log.cfg
plugins.cfgPlugin-specific settingsbase/cfg/plugins.cfg
sourcetv.cfgSourceTV demo recording settingsbase/cfg/sourcetv.cfg
advertisements.txtServer advertisement messagesbase/addons/sourcemod/configs/advertisements.txt
serverhudlogo.cfgServer HUD logo configurationbase/addons/sourcemod/configs/serverhudlogo.cfg
tidychat.cfgChat formatting and filteringbase/cfg/sourcemod/tidychat.cfg
spirt.dl.cfgSpirit download precache configurationbase/cfg/sourcemod/spirt.dl.cfg

Development

Project Structure

ServerFiles/
├── .github/ # GitHub Actions and workflows
├── base/ # Shared base files for all servers
│ ├── addons/sourcemod/ # SourceMod framework files
│ │ ├── configs/ # Plugin configuration files
│ │ ├── extensions/ # SourceMod extensions (.so/.dll files)
│ │ ├── gamedata/ # Game signatures and offsets
│ │ ├── plugins/ # Compiled SourceMod plugins (.smx)
│ │ └── translations/ # Multi-language phrase files
│ └── cfg/ # Server configuration files
│ ├── server.cfg # Main server config
│ ├── <gamemode>.cfg # Game mode configs
│ ├── network.cfg # Network settings
│ ├── log.cfg # Logging configuration
│ └── sourcemod/ # SourceMod-specific configs
├── <gamemode>/ # Game mode-specific files
│ ├── base/ # Shared files for this game mode
│ │ ├── addons/sourcemod/ # Game mode-specific plugins
│ │ ├── cfg/ # Game mode configurations
│ │ ├── maps/ # Custom maps
│ │ └── materials/ # Custom textures (optional)
│ └── <difficulty>/ # Difficulty variant overrides (optional)
├── LICENSE
└── README.md

How Maps Work

Map File Organization

Maps in this repository are organized by game mode under their respective directories (<gamemode>/base/maps/). Each map consists of:

  1. The .bsp file: The actual compiled Source engine map file that the server loads
  2. The .bsp.bz2 file: Compressed version uploaded to FastDL for client downloads
  3. The .bz2.parts/ directory: Split compressed parts stored in GitHub for large maps

GitHub Large File Handling

GitHub has a 25MB file size limit. Many custom TF2 maps exceed this limit, so this repository uses a chunking system:

mapfile.bsp # Actual map file (too large for GitHub)
mapfile.bsp.bz2.parts/ # Directory containing split parts
├── mapfile.bsp.bz2.part.000 # Part 1 (< 25MB)
├── mapfile.bsp.bz2.part.001 # Part 2 (< 25MB)
├── mapfile.bsp.bz2.part.002 # Part 3 (< 25MB)
└── ... # Additional parts as needed

Creating split map files:

# Compress the map
bzip2 -k mapfile.bsp # Creates mapfile.bsp.bz2# Split into 20MB chunks (safely under 25MB limit)
mkdir mapfile.bsp.bz2.parts
split -b 20M mapfile.bsp.bz2 mapfile.bsp.bz2.parts/mapfile.bsp.bz2.part.

Reassembling split map files:

# Concatenate parts back together
cat mapfile.bsp.bz2.parts/*.part.*> mapfile.bsp.bz2
# Decompress
bunzip2 mapfile.bsp.bz2 # Creates mapfile.bsp

Map Deployment Best Practices

  1. Always compress maps for FastDL: Use bzip2 -k mapfile.bsp to create .bsp.bz2 files
  2. Test maps locally first: Verify maps load correctly before committing
  3. Use consistent naming: UDL maps follow pattern gamemode_mapname_udl_version.bsp
  4. Update mapcycle.txt: Add new maps to the game mode's mapcycle.txt for rotation
  5. Version your maps: Include version numbers in filenames (e.g., _v4, _a06 for alpha)
  6. Keep source files external: .vmf (map source) files should not be committed to this repo

License

See LICENSE file for details.

Dependencies

About

This repository contains all the server files for UDL.TF - Everything from configs to plugins.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ServerFiles

A centralized configuration repository for UDL.TF Team Fortress 2 game servers, managing SourceMod plugins, server configurations, and game mode assets.

License

Overview

ServerFiles serves as the single source of truth for all UDL.TF Team Fortress 2 server configurations and assets. This repository manages everything from SourceMod plugins and their configurations to game mode-specific settings and custom map files. By centralizing these resources, it ensures consistency across all server instances while providing a versioned history of all server changes.

The repository follows a modular structure where shared base configurations are stored in the base/ directory, while game mode-specific configurations are organized in their own directories. This approach allows for efficient deployment of different server types while maintaining common plugins and configurations. The system is designed to work with FastDL for quick client downloads and supports multiple difficulty levels for various game modes.

Built on top of SourceMod, a popular Source engine server modification framework, ServerFiles includes essential plugins for server management, anti-cheat systems (SourceBans++), player utilities, and game mode-specific enhancements. The configuration system leverages SourceMod's modular approach and Valve's config execution system to provide flexible server behavior across different game modes.

Key Responsibilities

  • Plugin Management: Hosts compiled SourceMod plugins (.smx files) for server functionality including admin tools, SourceBans++ integration, player utilities, and game mode features
  • Configuration Distribution: Maintains centralized server configs (server.cfg, game mode-specific configs) that define server behavior, networking, logging, and SourceMod plugin settings
  • Asset Management: Organizes custom maps and materials, utilizing chunked compression (.bz2.parts) for large map files to overcome GitHub file size limitations
  • Game Mode Support: Provides isolated configuration sets for different TF2 game modes with varying difficulty levels and specific plugin requirements

Architecture

graph TB
subgraph "ServerFiles Repository"
BASE[base/]
GAMEMODES[Game Mode Directories]
end
subgraph "Base Components"
BASE --> ADDONS[addons/sourcemod/]
BASE --> CFG[cfg/]
ADDONS --> PLUGINS[plugins/*.smx]
ADDONS --> CONFIGS[configs/]
ADDONS --> GAMEDATA[gamedata/]
ADDONS --> TRANSLATIONS[translations/]
CFG --> SERVERCFG[server.cfg]
CFG --> MODECFG[Game mode configs]
CFG --> SMCFG[sourcemod/*.cfg]
end
subgraph "External Systems"
FASTDL[FastDL Server<br/>fastdl.udl.tf]
GAMESERVERS[TF2 Game Servers]
SOURCEBANS[SourceBans++ Database]
end
SERVERCFG -.->|sv_downloadurl| FASTDL
PLUGINS -.->|sbpp_* plugins| SOURCEBANS
BASE -.->|deployed to| GAMESERVERS
GAMEMODES -.->|deployed to| GAMESERVERS
style BASE fill:#1e3a5f,stroke:#4a90e2,color:#ffffff
style GAMEMODES fill:#5f3e1e,stroke:#e2a04a,color:#ffffff
style PLUGINS fill:#1e5f3e,stroke:#4ae27a,color:#ffffff
style FASTDL fill:#5f1e3e,stroke:#e24a7a,color:#ffffff
Loading

How It Works

Server Initialization Flow

sequenceDiagram
autonumber
participant Admin
participant Repo as ServerFiles Repo
participant Server as TF2 Server
participant SM as SourceMod
participant FastDL as FastDL Server
participant Client as TF2 Client
Admin->>Repo: Clone/update repository
Admin->>Server: Deploy configs & plugins
Server->>Server: Load server.cfg
Server->>SM: Initialize SourceMod
SM->>SM: Load plugins from addons/sourcemod/plugins/
SM->>SM: Parse configs from addons/sourcemod/configs/
Server->>Server: Execute game mode cfg
Client->>Server: Connect to server
Server->>Client: Send required files list
alt File needs download
Client->>FastDL: Request file (map/material/sound)
FastDL->>Client: Return compressed file
end
Client->>Server: Join game
SM->>Client: Apply plugin features (ads, logos, utilities)
Loading

Map File Management State Machine

stateDiagram-v2
[*] --> Original: Map file added
Original --> Checking: Check file size
Checking --> SmallFile: Size < 25MB
Checking --> LargeFile: Size >= 25MB
SmallFile --> Committed: Commit .bsp directly
LargeFile --> Compressing: bzip2 compression
Compressing --> Splitting: Split into parts
Splitting --> PartsCreated: Create .bz2.parts/ dir
PartsCreated --> Committed: Commit parts
Committed --> FastDL: Upload to FastDL
FastDL --> [*]: Available for download
note right of LargeFile
GitHub has 25MB limit
Large maps need splitting
end note
note right of PartsCreated
Each part < 25MB
Named sequentially:
.part.000, .part.001, etc.
end note
Loading

Features

  • SourceMod Plugin Suite: Comprehensive collection of server management plugins including admin controls (admingrab.smx), communication systems (advertisements.smx, tidychat.smx), and player utilities (respawn.smx, hugkiss.smx, aimnames.smx)
  • SourceBans++ Integration: Full SourceBans++ system with main functionality (sbpp_main.smx), communications management (sbpp_comms.smx), admin configuration (sbpp_admcfg.smx), checker (sbpp_checker.smx), reporting (sbpp_report.smx), and sleuth capabilities (sbpp_sleuth.smx) for centralized ban management
  • Game Mode Configurations: Dedicated configuration files for multiple TF2 game modes with optimized settings for each playstyle
  • FastDL Integration: Configured sv_downloadurl pointing to http://fastdl.udl.tf/ for rapid client-side asset downloads, reducing connection times and improving player experience
  • Custom Map Support: Organized storage for custom maps with intelligent handling of large files through .bz2 compression and part-splitting to overcome GitHub's file size limitations
  • Modular Difficulty System: Game modes support multiple difficulty levels with separate plugin configurations and settings allowing progressive gameplay challenges
  • Network Optimization: Dedicated network.cfg with optimized server networking settings, rate limits, and bandwidth configurations for stable multiplayer performance
  • Comprehensive Logging: Structured logging configuration (log.cfg) for server events, player actions, and plugin activities, essential for debugging and server administration
  • Translation Support: Multi-language translation files for plugins (hugkiss.phrases.txt, respawn.phrases.txt, sbpp_*.phrases.txt) enabling internationalization of server messages
  • Extension Ecosystem: Collection of SourceMod extensions and gamedata files (connect.games.txt, tf2.attributes.txt, sourcetvmanager.games.txt) providing low-level functionality for advanced plugin features

Configuration

Key Configuration Files

FileDescriptionLocation
server.cfgMain server configuration with sv_downloadurl, sv_tags, and core settingsbase/cfg/server.cfg
<gamemode>.cfgGame mode-specific settings (e.g., bhop.cfg, surf.cfg)base/cfg/<gamemode>.cfg
network.cfgNetwork and bandwidth configurationbase/cfg/network.cfg
log.cfgLogging configurationbase/cfg/log.cfg
plugins.cfgPlugin-specific settingsbase/cfg/plugins.cfg
sourcetv.cfgSourceTV demo recording settingsbase/cfg/sourcetv.cfg
advertisements.txtServer advertisement messagesbase/addons/sourcemod/configs/advertisements.txt
serverhudlogo.cfgServer HUD logo configurationbase/addons/sourcemod/configs/serverhudlogo.cfg
tidychat.cfgChat formatting and filteringbase/cfg/sourcemod/tidychat.cfg
spirt.dl.cfgSpirit download precache configurationbase/cfg/sourcemod/spirt.dl.cfg

Development

Project Structure

ServerFiles/
├── .github/ # GitHub Actions and workflows
├── base/ # Shared base files for all servers
│ ├── addons/sourcemod/ # SourceMod framework files
│ │ ├── configs/ # Plugin configuration files
│ │ ├── extensions/ # SourceMod extensions (.so/.dll files)
│ │ ├── gamedata/ # Game signatures and offsets
│ │ ├── plugins/ # Compiled SourceMod plugins (.smx)
│ │ └── translations/ # Multi-language phrase files
│ └── cfg/ # Server configuration files
│ ├── server.cfg # Main server config
│ ├── <gamemode>.cfg # Game mode configs
│ ├── network.cfg # Network settings
│ ├── log.cfg # Logging configuration
│ └── sourcemod/ # SourceMod-specific configs
├── <gamemode>/ # Game mode-specific files
│ ├── base/ # Shared files for this game mode
│ │ ├── addons/sourcemod/ # Game mode-specific plugins
│ │ ├── cfg/ # Game mode configurations
│ │ ├── maps/ # Custom maps
│ │ └── materials/ # Custom textures (optional)
│ └── <difficulty>/ # Difficulty variant overrides (optional)
├── LICENSE
└── README.md

How Maps Work

Map File Organization

Maps in this repository are organized by game mode under their respective directories (<gamemode>/base/maps/). Each map consists of:

  1. The .bsp file: The actual compiled Source engine map file that the server loads
  2. The .bsp.bz2 file: Compressed version uploaded to FastDL for client downloads
  3. The .bz2.parts/ directory: Split compressed parts stored in GitHub for large maps

GitHub Large File Handling

GitHub has a 25MB file size limit. Many custom TF2 maps exceed this limit, so this repository uses a chunking system:

mapfile.bsp # Actual map file (too large for GitHub)
mapfile.bsp.bz2.parts/ # Directory containing split parts
├── mapfile.bsp.bz2.part.000 # Part 1 (< 25MB)
├── mapfile.bsp.bz2.part.001 # Part 2 (< 25MB)
├── mapfile.bsp.bz2.part.002 # Part 3 (< 25MB)
└── ... # Additional parts as needed

Creating split map files:

# Compress the map
bzip2 -k mapfile.bsp # Creates mapfile.bsp.bz2# Split into 20MB chunks (safely under 25MB limit)
mkdir mapfile.bsp.bz2.parts
split -b 20M mapfile.bsp.bz2 mapfile.bsp.bz2.parts/mapfile.bsp.bz2.part.

Reassembling split map files:

# Concatenate parts back together
cat mapfile.bsp.bz2.parts/*.part.*> mapfile.bsp.bz2
# Decompress
bunzip2 mapfile.bsp.bz2 # Creates mapfile.bsp

Map Deployment Best Practices

  1. Always compress maps for FastDL: Use bzip2 -k mapfile.bsp to create .bsp.bz2 files
  2. Test maps locally first: Verify maps load correctly before committing
  3. Use consistent naming: UDL maps follow pattern gamemode_mapname_udl_version.bsp
  4. Update mapcycle.txt: Add new maps to the game mode's mapcycle.txt for rotation
  5. Version your maps: Include version numbers in filenames (e.g., _v4, _a06 for alpha)
  6. Keep source files external: .vmf (map source) files should not be committed to this repo

License

See LICENSE file for details.

Dependencies

About

This repository contains all the server files for UDL.TF - Everything from configs to plugins.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

ServerFiles

A centralized configuration repository for UDL.TF Team Fortress 2 game servers, managing SourceMod plugins, server configurations, and game mode assets.

License

Overview

ServerFiles serves as the single source of truth for all UDL.TF Team Fortress 2 server configurations and assets. This repository manages everything from SourceMod plugins and their configurations to game mode-specific settings and custom map files. By centralizing these resources, it ensures consistency across all server instances while providing a versioned history of all server changes.

The repository follows a modular structure where shared base configurations are stored in the base/ directory, while game mode-specific configurations are organized in their own directories. This approach allows for efficient deployment of different server types while maintaining common plugins and configurations. The system is designed to work with FastDL for quick client downloads and supports multiple difficulty levels for various game modes.

Built on top of SourceMod, a popular Source engine server modification framework, ServerFiles includes essential plugins for server management, anti-cheat systems (SourceBans++), player utilities, and game mode-specific enhancements. The configuration system leverages SourceMod's modular approach and Valve's config execution system to provide flexible server behavior across different game modes.

Key Responsibilities

  • Plugin Management: Hosts compiled SourceMod plugins (.smx files) for server functionality including admin tools, SourceBans++ integration, player utilities, and game mode features
  • Configuration Distribution: Maintains centralized server configs (server.cfg, game mode-specific configs) that define server behavior, networking, logging, and SourceMod plugin settings
  • Asset Management: Organizes custom maps and materials, utilizing chunked compression (.bz2.parts) for large map files to overcome GitHub file size limitations
  • Game Mode Support: Provides isolated configuration sets for different TF2 game modes with varying difficulty levels and specific plugin requirements

Architecture

graph TB
subgraph "ServerFiles Repository"
BASE[base/]
GAMEMODES[Game Mode Directories]
end
subgraph "Base Components"
BASE --> ADDONS[addons/sourcemod/]
BASE --> CFG[cfg/]
ADDONS --> PLUGINS[plugins/*.smx]
ADDONS --> CONFIGS[configs/]
ADDONS --> GAMEDATA[gamedata/]
ADDONS --> TRANSLATIONS[translations/]
CFG --> SERVERCFG[server.cfg]
CFG --> MODECFG[Game mode configs]
CFG --> SMCFG[sourcemod/*.cfg]
end
subgraph "External Systems"
FASTDL[FastDL Server<br/>fastdl.udl.tf]
GAMESERVERS[TF2 Game Servers]
SOURCEBANS[SourceBans++ Database]
end
SERVERCFG -.->|sv_downloadurl| FASTDL
PLUGINS -.->|sbpp_* plugins| SOURCEBANS
BASE -.->|deployed to| GAMESERVERS
GAMEMODES -.->|deployed to| GAMESERVERS
style BASE fill:#1e3a5f,stroke:#4a90e2,color:#ffffff
style GAMEMODES fill:#5f3e1e,stroke:#e2a04a,color:#ffffff
style PLUGINS fill:#1e5f3e,stroke:#4ae27a,color:#ffffff
style FASTDL fill:#5f1e3e,stroke:#e24a7a,color:#ffffff
Loading

How It Works

Server Initialization Flow

sequenceDiagram
autonumber
participant Admin
participant Repo as ServerFiles Repo
participant Server as TF2 Server
participant SM as SourceMod
participant FastDL as FastDL Server
participant Client as TF2 Client
Admin->>Repo: Clone/update repository
Admin->>Server: Deploy configs & plugins
Server->>Server: Load server.cfg
Server->>SM: Initialize SourceMod
SM->>SM: Load plugins from addons/sourcemod/plugins/
SM->>SM: Parse configs from addons/sourcemod/configs/
Server->>Server: Execute game mode cfg
Client->>Server: Connect to server
Server->>Client: Send required files list
alt File needs download
Client->>FastDL: Request file (map/material/sound)
FastDL->>Client: Return compressed file
end
Client->>Server: Join game
SM->>Client: Apply plugin features (ads, logos, utilities)
Loading

Map File Management State Machine

stateDiagram-v2
[*] --> Original: Map file added
Original --> Checking: Check file size
Checking --> SmallFile: Size < 25MB
Checking --> LargeFile: Size >= 25MB
SmallFile --> Committed: Commit .bsp directly
LargeFile --> Compressing: bzip2 compression
Compressing --> Splitting: Split into parts
Splitting --> PartsCreated: Create .bz2.parts/ dir
PartsCreated --> Committed: Commit parts
Committed --> FastDL: Upload to FastDL
FastDL --> [*]: Available for download
note right of LargeFile
GitHub has 25MB limit
Large maps need splitting
end note
note right of PartsCreated
Each part < 25MB
Named sequentially:
.part.000, .part.001, etc.
end note
Loading

Features

  • SourceMod Plugin Suite: Comprehensive collection of server management plugins including admin controls (admingrab.smx), communication systems (advertisements.smx, tidychat.smx), and player utilities (respawn.smx, hugkiss.smx, aimnames.smx)
  • SourceBans++ Integration: Full SourceBans++ system with main functionality (sbpp_main.smx), communications management (sbpp_comms.smx), admin configuration (sbpp_admcfg.smx), checker (sbpp_checker.smx), reporting (sbpp_report.smx), and sleuth capabilities (sbpp_sleuth.smx) for centralized ban management
  • Game Mode Configurations: Dedicated configuration files for multiple TF2 game modes with optimized settings for each playstyle
  • FastDL Integration: Configured sv_downloadurl pointing to http://fastdl.udl.tf/ for rapid client-side asset downloads, reducing connection times and improving player experience
  • Custom Map Support: Organized storage for custom maps with intelligent handling of large files through .bz2 compression and part-splitting to overcome GitHub's file size limitations
  • Modular Difficulty System: Game modes support multiple difficulty levels with separate plugin configurations and settings allowing progressive gameplay challenges
  • Network Optimization: Dedicated network.cfg with optimized server networking settings, rate limits, and bandwidth configurations for stable multiplayer performance
  • Comprehensive Logging: Structured logging configuration (log.cfg) for server events, player actions, and plugin activities, essential for debugging and server administration
  • Translation Support: Multi-language translation files for plugins (hugkiss.phrases.txt, respawn.phrases.txt, sbpp_*.phrases.txt) enabling internationalization of server messages
  • Extension Ecosystem: Collection of SourceMod extensions and gamedata files (connect.games.txt, tf2.attributes.txt, sourcetvmanager.games.txt) providing low-level functionality for advanced plugin features

Configuration

Key Configuration Files

FileDescriptionLocation
server.cfgMain server configuration with sv_downloadurl, sv_tags, and core settingsbase/cfg/server.cfg
<gamemode>.cfgGame mode-specific settings (e.g., bhop.cfg, surf.cfg)base/cfg/<gamemode>.cfg
network.cfgNetwork and bandwidth configurationbase/cfg/network.cfg
log.cfgLogging configurationbase/cfg/log.cfg
plugins.cfgPlugin-specific settingsbase/cfg/plugins.cfg
sourcetv.cfgSourceTV demo recording settingsbase/cfg/sourcetv.cfg
advertisements.txtServer advertisement messagesbase/addons/sourcemod/configs/advertisements.txt
serverhudlogo.cfgServer HUD logo configurationbase/addons/sourcemod/configs/serverhudlogo.cfg
tidychat.cfgChat formatting and filteringbase/cfg/sourcemod/tidychat.cfg
spirt.dl.cfgSpirit download precache configurationbase/cfg/sourcemod/spirt.dl.cfg

Development

Project Structure

ServerFiles/
├── .github/ # GitHub Actions and workflows
├── base/ # Shared base files for all servers
│ ├── addons/sourcemod/ # SourceMod framework files
│ │ ├── configs/ # Plugin configuration files
│ │ ├── extensions/ # SourceMod extensions (.so/.dll files)
│ │ ├── gamedata/ # Game signatures and offsets
│ │ ├── plugins/ # Compiled SourceMod plugins (.smx)
│ │ └── translations/ # Multi-language phrase files
│ └── cfg/ # Server configuration files
│ ├── server.cfg # Main server config
│ ├── <gamemode>.cfg # Game mode configs
│ ├── network.cfg # Network settings
│ ├── log.cfg # Logging configuration
│ └── sourcemod/ # SourceMod-specific configs
├── <gamemode>/ # Game mode-specific files
│ ├── base/ # Shared files for this game mode
│ │ ├── addons/sourcemod/ # Game mode-specific plugins
│ │ ├── cfg/ # Game mode configurations
│ │ ├── maps/ # Custom maps
│ │ └── materials/ # Custom textures (optional)
│ └── <difficulty>/ # Difficulty variant overrides (optional)
├── LICENSE
└── README.md

How Maps Work

Map File Organization

Maps in this repository are organized by game mode under their respective directories (<gamemode>/base/maps/). Each map consists of:

  1. The .bsp file: The actual compiled Source engine map file that the server loads
  2. The .bsp.bz2 file: Compressed version uploaded to FastDL for client downloads
  3. The .bz2.parts/ directory: Split compressed parts stored in GitHub for large maps

GitHub Large File Handling

GitHub has a 25MB file size limit. Many custom TF2 maps exceed this limit, so this repository uses a chunking system:

mapfile.bsp # Actual map file (too large for GitHub)
mapfile.bsp.bz2.parts/ # Directory containing split parts
├── mapfile.bsp.bz2.part.000 # Part 1 (< 25MB)
├── mapfile.bsp.bz2.part.001 # Part 2 (< 25MB)
├── mapfile.bsp.bz2.part.002 # Part 3 (< 25MB)
└── ... # Additional parts as needed

Creating split map files:

# Compress the map
bzip2 -k mapfile.bsp # Creates mapfile.bsp.bz2# Split into 20MB chunks (safely under 25MB limit)
mkdir mapfile.bsp.bz2.parts
split -b 20M mapfile.bsp.bz2 mapfile.bsp.bz2.parts/mapfile.bsp.bz2.part.

Reassembling split map files:

# Concatenate parts back together
cat mapfile.bsp.bz2.parts/*.part.*> mapfile.bsp.bz2
# Decompress
bunzip2 mapfile.bsp.bz2 # Creates mapfile.bsp

Map Deployment Best Practices

  1. Always compress maps for FastDL: Use bzip2 -k mapfile.bsp to create .bsp.bz2 files
  2. Test maps locally first: Verify maps load correctly before committing
  3. Use consistent naming: UDL maps follow pattern gamemode_mapname_udl_version.bsp
  4. Update mapcycle.txt: Add new maps to the game mode's mapcycle.txt for rotation
  5. Version your maps: Include version numbers in filenames (e.g., _v4, _a06 for alpha)
  6. Keep source files external: .vmf (map source) files should not be committed to this repo

License

See LICENSE file for details.

Dependencies

About

This repository contains all the server files for UDL.TF - Everything from configs to plugins.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ServerFiles

A centralized configuration repository for UDL.TF Team Fortress 2 game servers, managing SourceMod plugins, server configurations, and game mode assets.

License

Overview

ServerFiles serves as the single source of truth for all UDL.TF Team Fortress 2 server configurations and assets. This repository manages everything from SourceMod plugins and their configurations to game mode-specific settings and custom map files. By centralizing these resources, it ensures consistency across all server instances while providing a versioned history of all server changes.

The repository follows a modular structure where shared base configurations are stored in the base/ directory, while game mode-specific configurations are organized in their own directories. This approach allows for efficient deployment of different server types while maintaining common plugins and configurations. The system is designed to work with FastDL for quick client downloads and supports multiple difficulty levels for various game modes.

Built on top of SourceMod, a popular Source engine server modification framework, ServerFiles includes essential plugins for server management, anti-cheat systems (SourceBans++), player utilities, and game mode-specific enhancements. The configuration system leverages SourceMod's modular approach and Valve's config execution system to provide flexible server behavior across different game modes.

Key Responsibilities

  • Plugin Management: Hosts compiled SourceMod plugins (.smx files) for server functionality including admin tools, SourceBans++ integration, player utilities, and game mode features
  • Configuration Distribution: Maintains centralized server configs (server.cfg, game mode-specific configs) that define server behavior, networking, logging, and SourceMod plugin settings
  • Asset Management: Organizes custom maps and materials, utilizing chunked compression (.bz2.parts) for large map files to overcome GitHub file size limitations
  • Game Mode Support: Provides isolated configuration sets for different TF2 game modes with varying difficulty levels and specific plugin requirements

Architecture

graph TB
subgraph "ServerFiles Repository"
BASE[base/]
GAMEMODES[Game Mode Directories]
end
subgraph "Base Components"
BASE --> ADDONS[addons/sourcemod/]
BASE --> CFG[cfg/]
ADDONS --> PLUGINS[plugins/*.smx]
ADDONS --> CONFIGS[configs/]
ADDONS --> GAMEDATA[gamedata/]
ADDONS --> TRANSLATIONS[translations/]
CFG --> SERVERCFG[server.cfg]
CFG --> MODECFG[Game mode configs]
CFG --> SMCFG[sourcemod/*.cfg]
end
subgraph "External Systems"
FASTDL[FastDL Server<br/>fastdl.udl.tf]
GAMESERVERS[TF2 Game Servers]
SOURCEBANS[SourceBans++ Database]
end
SERVERCFG -.->|sv_downloadurl| FASTDL
PLUGINS -.->|sbpp_* plugins| SOURCEBANS
BASE -.->|deployed to| GAMESERVERS
GAMEMODES -.->|deployed to| GAMESERVERS
style BASE fill:#1e3a5f,stroke:#4a90e2,color:#ffffff
style GAMEMODES fill:#5f3e1e,stroke:#e2a04a,color:#ffffff
style PLUGINS fill:#1e5f3e,stroke:#4ae27a,color:#ffffff
style FASTDL fill:#5f1e3e,stroke:#e24a7a,color:#ffffff
Loading

How It Works

Server Initialization Flow

sequenceDiagram
autonumber
participant Admin
participant Repo as ServerFiles Repo
participant Server as TF2 Server
participant SM as SourceMod
participant FastDL as FastDL Server
participant Client as TF2 Client
Admin->>Repo: Clone/update repository
Admin->>Server: Deploy configs & plugins
Server->>Server: Load server.cfg
Server->>SM: Initialize SourceMod
SM->>SM: Load plugins from addons/sourcemod/plugins/
SM->>SM: Parse configs from addons/sourcemod/configs/
Server->>Server: Execute game mode cfg
Client->>Server: Connect to server
Server->>Client: Send required files list
alt File needs download
Client->>FastDL: Request file (map/material/sound)
FastDL->>Client: Return compressed file
end
Client->>Server: Join game
SM->>Client: Apply plugin features (ads, logos, utilities)
Loading

Map File Management State Machine

stateDiagram-v2
[*] --> Original: Map file added
Original --> Checking: Check file size
Checking --> SmallFile: Size < 25MB
Checking --> LargeFile: Size >= 25MB
SmallFile --> Committed: Commit .bsp directly
LargeFile --> Compressing: bzip2 compression
Compressing --> Splitting: Split into parts
Splitting --> PartsCreated: Create .bz2.parts/ dir
PartsCreated --> Committed: Commit parts
Committed --> FastDL: Upload to FastDL
FastDL --> [*]: Available for download
note right of LargeFile
GitHub has 25MB limit
Large maps need splitting
end note
note right of PartsCreated
Each part < 25MB
Named sequentially:
.part.000, .part.001, etc.
end note
Loading

Features

  • SourceMod Plugin Suite: Comprehensive collection of server management plugins including admin controls (admingrab.smx), communication systems (advertisements.smx, tidychat.smx), and player utilities (respawn.smx, hugkiss.smx, aimnames.smx)
  • SourceBans++ Integration: Full SourceBans++ system with main functionality (sbpp_main.smx), communications management (sbpp_comms.smx), admin configuration (sbpp_admcfg.smx), checker (sbpp_checker.smx), reporting (sbpp_report.smx), and sleuth capabilities (sbpp_sleuth.smx) for centralized ban management
  • Game Mode Configurations: Dedicated configuration files for multiple TF2 game modes with optimized settings for each playstyle
  • FastDL Integration: Configured sv_downloadurl pointing to http://fastdl.udl.tf/ for rapid client-side asset downloads, reducing connection times and improving player experience
  • Custom Map Support: Organized storage for custom maps with intelligent handling of large files through .bz2 compression and part-splitting to overcome GitHub's file size limitations
  • Modular Difficulty System: Game modes support multiple difficulty levels with separate plugin configurations and settings allowing progressive gameplay challenges
  • Network Optimization: Dedicated network.cfg with optimized server networking settings, rate limits, and bandwidth configurations for stable multiplayer performance
  • Comprehensive Logging: Structured logging configuration (log.cfg) for server events, player actions, and plugin activities, essential for debugging and server administration
  • Translation Support: Multi-language translation files for plugins (hugkiss.phrases.txt, respawn.phrases.txt, sbpp_*.phrases.txt) enabling internationalization of server messages
  • Extension Ecosystem: Collection of SourceMod extensions and gamedata files (connect.games.txt, tf2.attributes.txt, sourcetvmanager.games.txt) providing low-level functionality for advanced plugin features

Configuration

Key Configuration Files

FileDescriptionLocation
server.cfgMain server configuration with sv_downloadurl, sv_tags, and core settingsbase/cfg/server.cfg
<gamemode>.cfgGame mode-specific settings (e.g., bhop.cfg, surf.cfg)base/cfg/<gamemode>.cfg
network.cfgNetwork and bandwidth configurationbase/cfg/network.cfg
log.cfgLogging configurationbase/cfg/log.cfg
plugins.cfgPlugin-specific settingsbase/cfg/plugins.cfg
sourcetv.cfgSourceTV demo recording settingsbase/cfg/sourcetv.cfg
advertisements.txtServer advertisement messagesbase/addons/sourcemod/configs/advertisements.txt
serverhudlogo.cfgServer HUD logo configurationbase/addons/sourcemod/configs/serverhudlogo.cfg
tidychat.cfgChat formatting and filteringbase/cfg/sourcemod/tidychat.cfg
spirt.dl.cfgSpirit download precache configurationbase/cfg/sourcemod/spirt.dl.cfg

Development

Project Structure

ServerFiles/
├── .github/ # GitHub Actions and workflows
├── base/ # Shared base files for all servers
│ ├── addons/sourcemod/ # SourceMod framework files
│ │ ├── configs/ # Plugin configuration files
│ │ ├── extensions/ # SourceMod extensions (.so/.dll files)
│ │ ├── gamedata/ # Game signatures and offsets
│ │ ├── plugins/ # Compiled SourceMod plugins (.smx)
│ │ └── translations/ # Multi-language phrase files
│ └── cfg/ # Server configuration files
│ ├── server.cfg # Main server config
│ ├── <gamemode>.cfg # Game mode configs
│ ├── network.cfg # Network settings
│ ├── log.cfg # Logging configuration
│ └── sourcemod/ # SourceMod-specific configs
├── <gamemode>/ # Game mode-specific files
│ ├── base/ # Shared files for this game mode
│ │ ├── addons/sourcemod/ # Game mode-specific plugins
│ │ ├── cfg/ # Game mode configurations
│ │ ├── maps/ # Custom maps
│ │ └── materials/ # Custom textures (optional)
│ └── <difficulty>/ # Difficulty variant overrides (optional)
├── LICENSE
└── README.md

How Maps Work

Map File Organization

Maps in this repository are organized by game mode under their respective directories (<gamemode>/base/maps/). Each map consists of:

  1. The .bsp file: The actual compiled Source engine map file that the server loads
  2. The .bsp.bz2 file: Compressed version uploaded to FastDL for client downloads
  3. The .bz2.parts/ directory: Split compressed parts stored in GitHub for large maps

GitHub Large File Handling

GitHub has a 25MB file size limit. Many custom TF2 maps exceed this limit, so this repository uses a chunking system:

mapfile.bsp # Actual map file (too large for GitHub)
mapfile.bsp.bz2.parts/ # Directory containing split parts
├── mapfile.bsp.bz2.part.000 # Part 1 (< 25MB)
├── mapfile.bsp.bz2.part.001 # Part 2 (< 25MB)
├── mapfile.bsp.bz2.part.002 # Part 3 (< 25MB)
└── ... # Additional parts as needed

Creating split map files:

# Compress the map
bzip2 -k mapfile.bsp # Creates mapfile.bsp.bz2# Split into 20MB chunks (safely under 25MB limit)
mkdir mapfile.bsp.bz2.parts
split -b 20M mapfile.bsp.bz2 mapfile.bsp.bz2.parts/mapfile.bsp.bz2.part.

Reassembling split map files:

# Concatenate parts back together
cat mapfile.bsp.bz2.parts/*.part.*> mapfile.bsp.bz2
# Decompress
bunzip2 mapfile.bsp.bz2 # Creates mapfile.bsp

Map Deployment Best Practices

  1. Always compress maps for FastDL: Use bzip2 -k mapfile.bsp to create .bsp.bz2 files
  2. Test maps locally first: Verify maps load correctly before committing
  3. Use consistent naming: UDL maps follow pattern gamemode_mapname_udl_version.bsp
  4. Update mapcycle.txt: Add new maps to the game mode's mapcycle.txt for rotation
  5. Version your maps: Include version numbers in filenames (e.g., _v4, _a06 for alpha)
  6. Keep source files external: .vmf (map source) files should not be committed to this repo

License

See LICENSE file for details.

Dependencies

About

This repository contains all the server files for UDL.TF - Everything from configs to plugins.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ServerFiles

A centralized configuration repository for UDL.TF Team Fortress 2 game servers, managing SourceMod plugins, server configurations, and game mode assets.

License

Overview

ServerFiles serves as the single source of truth for all UDL.TF Team Fortress 2 server configurations and assets. This repository manages everything from SourceMod plugins and their configurations to game mode-specific settings and custom map files. By centralizing these resources, it ensures consistency across all server instances while providing a versioned history of all server changes.

The repository follows a modular structure where shared base configurations are stored in the base/ directory, while game mode-specific configurations are organized in their own directories. This approach allows for efficient deployment of different server types while maintaining common plugins and configurations. The system is designed to work with FastDL for quick client downloads and supports multiple difficulty levels for various game modes.

Built on top of SourceMod, a popular Source engine server modification framework, ServerFiles includes essential plugins for server management, anti-cheat systems (SourceBans++), player utilities, and game mode-specific enhancements. The configuration system leverages SourceMod's modular approach and Valve's config execution system to provide flexible server behavior across different game modes.

Key Responsibilities

  • Plugin Management: Hosts compiled SourceMod plugins (.smx files) for server functionality including admin tools, SourceBans++ integration, player utilities, and game mode features
  • Configuration Distribution: Maintains centralized server configs (server.cfg, game mode-specific configs) that define server behavior, networking, logging, and SourceMod plugin settings
  • Asset Management: Organizes custom maps and materials, utilizing chunked compression (.bz2.parts) for large map files to overcome GitHub file size limitations
  • Game Mode Support: Provides isolated configuration sets for different TF2 game modes with varying difficulty levels and specific plugin requirements

Architecture

graph TB
subgraph "ServerFiles Repository"
BASE[base/]
GAMEMODES[Game Mode Directories]
end
subgraph "Base Components"
BASE --> ADDONS[addons/sourcemod/]
BASE --> CFG[cfg/]
ADDONS --> PLUGINS[plugins/*.smx]
ADDONS --> CONFIGS[configs/]
ADDONS --> GAMEDATA[gamedata/]
ADDONS --> TRANSLATIONS[translations/]
CFG --> SERVERCFG[server.cfg]
CFG --> MODECFG[Game mode configs]
CFG --> SMCFG[sourcemod/*.cfg]
end
subgraph "External Systems"
FASTDL[FastDL Server<br/>fastdl.udl.tf]
GAMESERVERS[TF2 Game Servers]
SOURCEBANS[SourceBans++ Database]
end
SERVERCFG -.->|sv_downloadurl| FASTDL
PLUGINS -.->|sbpp_* plugins| SOURCEBANS
BASE -.->|deployed to| GAMESERVERS
GAMEMODES -.->|deployed to| GAMESERVERS
style BASE fill:#1e3a5f,stroke:#4a90e2,color:#ffffff
style GAMEMODES fill:#5f3e1e,stroke:#e2a04a,color:#ffffff
style PLUGINS fill:#1e5f3e,stroke:#4ae27a,color:#ffffff
style FASTDL fill:#5f1e3e,stroke:#e24a7a,color:#ffffff
Loading

How It Works

Server Initialization Flow

sequenceDiagram
autonumber
participant Admin
participant Repo as ServerFiles Repo
participant Server as TF2 Server
participant SM as SourceMod
participant FastDL as FastDL Server
participant Client as TF2 Client
Admin->>Repo: Clone/update repository
Admin->>Server: Deploy configs & plugins
Server->>Server: Load server.cfg
Server->>SM: Initialize SourceMod
SM->>SM: Load plugins from addons/sourcemod/plugins/
SM->>SM: Parse configs from addons/sourcemod/configs/
Server->>Server: Execute game mode cfg
Client->>Server: Connect to server
Server->>Client: Send required files list
alt File needs download
Client->>FastDL: Request file (map/material/sound)
FastDL->>Client: Return compressed file
end
Client->>Server: Join game
SM->>Client: Apply plugin features (ads, logos, utilities)
Loading

Map File Management State Machine

stateDiagram-v2
[*] --> Original: Map file added
Original --> Checking: Check file size
Checking --> SmallFile: Size < 25MB
Checking --> LargeFile: Size >= 25MB
SmallFile --> Committed: Commit .bsp directly
LargeFile --> Compressing: bzip2 compression
Compressing --> Splitting: Split into parts
Splitting --> PartsCreated: Create .bz2.parts/ dir
PartsCreated --> Committed: Commit parts
Committed --> FastDL: Upload to FastDL
FastDL --> [*]: Available for download
note right of LargeFile
GitHub has 25MB limit
Large maps need splitting
end note
note right of PartsCreated
Each part < 25MB
Named sequentially:
.part.000, .part.001, etc.
end note
Loading

Features

  • SourceMod Plugin Suite: Comprehensive collection of server management plugins including admin controls (admingrab.smx), communication systems (advertisements.smx, tidychat.smx), and player utilities (respawn.smx, hugkiss.smx, aimnames.smx)
  • SourceBans++ Integration: Full SourceBans++ system with main functionality (sbpp_main.smx), communications management (sbpp_comms.smx), admin configuration (sbpp_admcfg.smx), checker (sbpp_checker.smx), reporting (sbpp_report.smx), and sleuth capabilities (sbpp_sleuth.smx) for centralized ban management
  • Game Mode Configurations: Dedicated configuration files for multiple TF2 game modes with optimized settings for each playstyle
  • FastDL Integration: Configured sv_downloadurl pointing to http://fastdl.udl.tf/ for rapid client-side asset downloads, reducing connection times and improving player experience
  • Custom Map Support: Organized storage for custom maps with intelligent handling of large files through .bz2 compression and part-splitting to overcome GitHub's file size limitations
  • Modular Difficulty System: Game modes support multiple difficulty levels with separate plugin configurations and settings allowing progressive gameplay challenges
  • Network Optimization: Dedicated network.cfg with optimized server networking settings, rate limits, and bandwidth configurations for stable multiplayer performance
  • Comprehensive Logging: Structured logging configuration (log.cfg) for server events, player actions, and plugin activities, essential for debugging and server administration
  • Translation Support: Multi-language translation files for plugins (hugkiss.phrases.txt, respawn.phrases.txt, sbpp_*.phrases.txt) enabling internationalization of server messages
  • Extension Ecosystem: Collection of SourceMod extensions and gamedata files (connect.games.txt, tf2.attributes.txt, sourcetvmanager.games.txt) providing low-level functionality for advanced plugin features

Configuration

Key Configuration Files

FileDescriptionLocation
server.cfgMain server configuration with sv_downloadurl, sv_tags, and core settingsbase/cfg/server.cfg
<gamemode>.cfgGame mode-specific settings (e.g., bhop.cfg, surf.cfg)base/cfg/<gamemode>.cfg
network.cfgNetwork and bandwidth configurationbase/cfg/network.cfg
log.cfgLogging configurationbase/cfg/log.cfg
plugins.cfgPlugin-specific settingsbase/cfg/plugins.cfg
sourcetv.cfgSourceTV demo recording settingsbase/cfg/sourcetv.cfg
advertisements.txtServer advertisement messagesbase/addons/sourcemod/configs/advertisements.txt
serverhudlogo.cfgServer HUD logo configurationbase/addons/sourcemod/configs/serverhudlogo.cfg
tidychat.cfgChat formatting and filteringbase/cfg/sourcemod/tidychat.cfg
spirt.dl.cfgSpirit download precache configurationbase/cfg/sourcemod/spirt.dl.cfg

Development

Project Structure

ServerFiles/
├── .github/ # GitHub Actions and workflows
├── base/ # Shared base files for all servers
│ ├── addons/sourcemod/ # SourceMod framework files
│ │ ├── configs/ # Plugin configuration files
│ │ ├── extensions/ # SourceMod extensions (.so/.dll files)
│ │ ├── gamedata/ # Game signatures and offsets
│ │ ├── plugins/ # Compiled SourceMod plugins (.smx)
│ │ └── translations/ # Multi-language phrase files
│ └── cfg/ # Server configuration files
│ ├── server.cfg # Main server config
│ ├── <gamemode>.cfg # Game mode configs
│ ├── network.cfg # Network settings
│ ├── log.cfg # Logging configuration
│ └── sourcemod/ # SourceMod-specific configs
├── <gamemode>/ # Game mode-specific files
│ ├── base/ # Shared files for this game mode
│ │ ├── addons/sourcemod/ # Game mode-specific plugins
│ │ ├── cfg/ # Game mode configurations
│ │ ├── maps/ # Custom maps
│ │ └── materials/ # Custom textures (optional)
│ └── <difficulty>/ # Difficulty variant overrides (optional)
├── LICENSE
└── README.md

How Maps Work

Map File Organization

Maps in this repository are organized by game mode under their respective directories (<gamemode>/base/maps/). Each map consists of:

  1. The .bsp file: The actual compiled Source engine map file that the server loads
  2. The .bsp.bz2 file: Compressed version uploaded to FastDL for client downloads
  3. The .bz2.parts/ directory: Split compressed parts stored in GitHub for large maps

GitHub Large File Handling

GitHub has a 25MB file size limit. Many custom TF2 maps exceed this limit, so this repository uses a chunking system:

mapfile.bsp # Actual map file (too large for GitHub)
mapfile.bsp.bz2.parts/ # Directory containing split parts
├── mapfile.bsp.bz2.part.000 # Part 1 (< 25MB)
├── mapfile.bsp.bz2.part.001 # Part 2 (< 25MB)
├── mapfile.bsp.bz2.part.002 # Part 3 (< 25MB)
└── ... # Additional parts as needed

Creating split map files:

# Compress the map
bzip2 -k mapfile.bsp # Creates mapfile.bsp.bz2# Split into 20MB chunks (safely under 25MB limit)
mkdir mapfile.bsp.bz2.parts
split -b 20M mapfile.bsp.bz2 mapfile.bsp.bz2.parts/mapfile.bsp.bz2.part.

Reassembling split map files:

# Concatenate parts back together
cat mapfile.bsp.bz2.parts/*.part.*> mapfile.bsp.bz2
# Decompress
bunzip2 mapfile.bsp.bz2 # Creates mapfile.bsp

Map Deployment Best Practices

  1. Always compress maps for FastDL: Use bzip2 -k mapfile.bsp to create .bsp.bz2 files
  2. Test maps locally first: Verify maps load correctly before committing
  3. Use consistent naming: UDL maps follow pattern gamemode_mapname_udl_version.bsp
  4. Update mapcycle.txt: Add new maps to the game mode's mapcycle.txt for rotation
  5. Version your maps: Include version numbers in filenames (e.g., _v4, _a06 for alpha)
  6. Keep source files external: .vmf (map source) files should not be committed to this repo

License

See LICENSE file for details.

Dependencies

About

This repository contains all the server files for UDL.TF - Everything from configs to plugins.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

ServerFiles

A centralized configuration repository for UDL.TF Team Fortress 2 game servers, managing SourceMod plugins, server configurations, and game mode assets.

License

Overview

ServerFiles serves as the single source of truth for all UDL.TF Team Fortress 2 server configurations and assets. This repository manages everything from SourceMod plugins and their configurations to game mode-specific settings and custom map files. By centralizing these resources, it ensures consistency across all server instances while providing a versioned history of all server changes.

The repository follows a modular structure where shared base configurations are stored in the base/ directory, while game mode-specific configurations are organized in their own directories. This approach allows for efficient deployment of different server types while maintaining common plugins and configurations. The system is designed to work with FastDL for quick client downloads and supports multiple difficulty levels for various game modes.

Built on top of SourceMod, a popular Source engine server modification framework, ServerFiles includes essential plugins for server management, anti-cheat systems (SourceBans++), player utilities, and game mode-specific enhancements. The configuration system leverages SourceMod's modular approach and Valve's config execution system to provide flexible server behavior across different game modes.

Key Responsibilities

  • Plugin Management: Hosts compiled SourceMod plugins (.smx files) for server functionality including admin tools, SourceBans++ integration, player utilities, and game mode features
  • Configuration Distribution: Maintains centralized server configs (server.cfg, game mode-specific configs) that define server behavior, networking, logging, and SourceMod plugin settings
  • Asset Management: Organizes custom maps and materials, utilizing chunked compression (.bz2.parts) for large map files to overcome GitHub file size limitations
  • Game Mode Support: Provides isolated configuration sets for different TF2 game modes with varying difficulty levels and specific plugin requirements

Architecture

graph TB
subgraph "ServerFiles Repository"
BASE[base/]
GAMEMODES[Game Mode Directories]
end
subgraph "Base Components"
BASE --> ADDONS[addons/sourcemod/]
BASE --> CFG[cfg/]
ADDONS --> PLUGINS[plugins/*.smx]
ADDONS --> CONFIGS[configs/]
ADDONS --> GAMEDATA[gamedata/]
ADDONS --> TRANSLATIONS[translations/]
CFG --> SERVERCFG[server.cfg]
CFG --> MODECFG[Game mode configs]
CFG --> SMCFG[sourcemod/*.cfg]
end
subgraph "External Systems"
FASTDL[FastDL Server<br/>fastdl.udl.tf]
GAMESERVERS[TF2 Game Servers]
SOURCEBANS[SourceBans++ Database]
end
SERVERCFG -.->|sv_downloadurl| FASTDL
PLUGINS -.->|sbpp_* plugins| SOURCEBANS
BASE -.->|deployed to| GAMESERVERS
GAMEMODES -.->|deployed to| GAMESERVERS
style BASE fill:#1e3a5f,stroke:#4a90e2,color:#ffffff
style GAMEMODES fill:#5f3e1e,stroke:#e2a04a,color:#ffffff
style PLUGINS fill:#1e5f3e,stroke:#4ae27a,color:#ffffff
style FASTDL fill:#5f1e3e,stroke:#e24a7a,color:#ffffff
Loading

How It Works

Server Initialization Flow

sequenceDiagram
autonumber
participant Admin
participant Repo as ServerFiles Repo
participant Server as TF2 Server
participant SM as SourceMod
participant FastDL as FastDL Server
participant Client as TF2 Client
Admin->>Repo: Clone/update repository
Admin->>Server: Deploy configs & plugins
Server->>Server: Load server.cfg
Server->>SM: Initialize SourceMod
SM->>SM: Load plugins from addons/sourcemod/plugins/
SM->>SM: Parse configs from addons/sourcemod/configs/
Server->>Server: Execute game mode cfg
Client->>Server: Connect to server
Server->>Client: Send required files list
alt File needs download
Client->>FastDL: Request file (map/material/sound)
FastDL->>Client: Return compressed file
end
Client->>Server: Join game
SM->>Client: Apply plugin features (ads, logos, utilities)
Loading

Map File Management State Machine

stateDiagram-v2
[*] --> Original: Map file added
Original --> Checking: Check file size
Checking --> SmallFile: Size < 25MB
Checking --> LargeFile: Size >= 25MB
SmallFile --> Committed: Commit .bsp directly
LargeFile --> Compressing: bzip2 compression
Compressing --> Splitting: Split into parts
Splitting --> PartsCreated: Create .bz2.parts/ dir
PartsCreated --> Committed: Commit parts
Committed --> FastDL: Upload to FastDL
FastDL --> [*]: Available for download
note right of LargeFile
GitHub has 25MB limit
Large maps need splitting
end note
note right of PartsCreated
Each part < 25MB
Named sequentially:
.part.000, .part.001, etc.
end note
Loading

Features

  • SourceMod Plugin Suite: Comprehensive collection of server management plugins including admin controls (admingrab.smx), communication systems (advertisements.smx, tidychat.smx), and player utilities (respawn.smx, hugkiss.smx, aimnames.smx)
  • SourceBans++ Integration: Full SourceBans++ system with main functionality (sbpp_main.smx), communications management (sbpp_comms.smx), admin configuration (sbpp_admcfg.smx), checker (sbpp_checker.smx), reporting (sbpp_report.smx), and sleuth capabilities (sbpp_sleuth.smx) for centralized ban management
  • Game Mode Configurations: Dedicated configuration files for multiple TF2 game modes with optimized settings for each playstyle
  • FastDL Integration: Configured sv_downloadurl pointing to http://fastdl.udl.tf/ for rapid client-side asset downloads, reducing connection times and improving player experience
  • Custom Map Support: Organized storage for custom maps with intelligent handling of large files through .bz2 compression and part-splitting to overcome GitHub's file size limitations
  • Modular Difficulty System: Game modes support multiple difficulty levels with separate plugin configurations and settings allowing progressive gameplay challenges
  • Network Optimization: Dedicated network.cfg with optimized server networking settings, rate limits, and bandwidth configurations for stable multiplayer performance
  • Comprehensive Logging: Structured logging configuration (log.cfg) for server events, player actions, and plugin activities, essential for debugging and server administration
  • Translation Support: Multi-language translation files for plugins (hugkiss.phrases.txt, respawn.phrases.txt, sbpp_*.phrases.txt) enabling internationalization of server messages
  • Extension Ecosystem: Collection of SourceMod extensions and gamedata files (connect.games.txt, tf2.attributes.txt, sourcetvmanager.games.txt) providing low-level functionality for advanced plugin features

Configuration

Key Configuration Files

FileDescriptionLocation
server.cfgMain server configuration with sv_downloadurl, sv_tags, and core settingsbase/cfg/server.cfg
<gamemode>.cfgGame mode-specific settings (e.g., bhop.cfg, surf.cfg)base/cfg/<gamemode>.cfg
network.cfgNetwork and bandwidth configurationbase/cfg/network.cfg
log.cfgLogging configurationbase/cfg/log.cfg
plugins.cfgPlugin-specific settingsbase/cfg/plugins.cfg
sourcetv.cfgSourceTV demo recording settingsbase/cfg/sourcetv.cfg
advertisements.txtServer advertisement messagesbase/addons/sourcemod/configs/advertisements.txt
serverhudlogo.cfgServer HUD logo configurationbase/addons/sourcemod/configs/serverhudlogo.cfg
tidychat.cfgChat formatting and filteringbase/cfg/sourcemod/tidychat.cfg
spirt.dl.cfgSpirit download precache configurationbase/cfg/sourcemod/spirt.dl.cfg

Development

Project Structure

ServerFiles/
├── .github/ # GitHub Actions and workflows
├── base/ # Shared base files for all servers
│ ├── addons/sourcemod/ # SourceMod framework files
│ │ ├── configs/ # Plugin configuration files
│ │ ├── extensions/ # SourceMod extensions (.so/.dll files)
│ │ ├── gamedata/ # Game signatures and offsets
│ │ ├── plugins/ # Compiled SourceMod plugins (.smx)
│ │ └── translations/ # Multi-language phrase files
│ └── cfg/ # Server configuration files
│ ├── server.cfg # Main server config
│ ├── <gamemode>.cfg # Game mode configs
│ ├── network.cfg # Network settings
│ ├── log.cfg # Logging configuration
│ └── sourcemod/ # SourceMod-specific configs
├── <gamemode>/ # Game mode-specific files
│ ├── base/ # Shared files for this game mode
│ │ ├── addons/sourcemod/ # Game mode-specific plugins
│ │ ├── cfg/ # Game mode configurations
│ │ ├── maps/ # Custom maps
│ │ └── materials/ # Custom textures (optional)
│ └── <difficulty>/ # Difficulty variant overrides (optional)
├── LICENSE
└── README.md

How Maps Work

Map File Organization

Maps in this repository are organized by game mode under their respective directories (<gamemode>/base/maps/). Each map consists of:

  1. The .bsp file: The actual compiled Source engine map file that the server loads
  2. The .bsp.bz2 file: Compressed version uploaded to FastDL for client downloads
  3. The .bz2.parts/ directory: Split compressed parts stored in GitHub for large maps

GitHub Large File Handling

GitHub has a 25MB file size limit. Many custom TF2 maps exceed this limit, so this repository uses a chunking system:

mapfile.bsp # Actual map file (too large for GitHub)
mapfile.bsp.bz2.parts/ # Directory containing split parts
├── mapfile.bsp.bz2.part.000 # Part 1 (< 25MB)
├── mapfile.bsp.bz2.part.001 # Part 2 (< 25MB)
├── mapfile.bsp.bz2.part.002 # Part 3 (< 25MB)
└── ... # Additional parts as needed

Creating split map files:

# Compress the map
bzip2 -k mapfile.bsp # Creates mapfile.bsp.bz2# Split into 20MB chunks (safely under 25MB limit)
mkdir mapfile.bsp.bz2.parts
split -b 20M mapfile.bsp.bz2 mapfile.bsp.bz2.parts/mapfile.bsp.bz2.part.

Reassembling split map files:

# Concatenate parts back together
cat mapfile.bsp.bz2.parts/*.part.*> mapfile.bsp.bz2
# Decompress
bunzip2 mapfile.bsp.bz2 # Creates mapfile.bsp

Map Deployment Best Practices

  1. Always compress maps for FastDL: Use bzip2 -k mapfile.bsp to create .bsp.bz2 files
  2. Test maps locally first: Verify maps load correctly before committing
  3. Use consistent naming: UDL maps follow pattern gamemode_mapname_udl_version.bsp
  4. Update mapcycle.txt: Add new maps to the game mode's mapcycle.txt for rotation
  5. Version your maps: Include version numbers in filenames (e.g., _v4, _a06 for alpha)
  6. Keep source files external: .vmf (map source) files should not be committed to this repo

License

See LICENSE file for details.

Dependencies

About

This repository contains all the server files for UDL.TF - Everything from configs to plugins.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Contributors

Languages