Skip to content

Game Server Configuration

Configure game servers with region-specific settings.

from hrcp import ResourceTree, PropagationMode, get_value

tree = ResourceTree(root_name="game")

# Global game settings
tree.root.set_attribute("version", "2.1.0")
tree.root.set_attribute("tick_rate", 64)
tree.root.set_attribute("max_players", 100)
tree.root.set_attribute("anti_cheat", {"enabled": True, "level": "standard"})
tree.root.set_attribute("matchmaking", {
    "skill_range": 500,
    "wait_time_max": 120,
    "backfill": True
})

# Regional configurations
regions = {
    "na-east": {"latency_target": 30, "datacenter": "nyc"},
    "na-west": {"latency_target": 35, "datacenter": "lax"},
    "eu-west": {"latency_target": 25, "datacenter": "ams"},
    "asia": {"latency_target": 40, "datacenter": "sgp"},
}

for region, attrs in regions.items():
    tree.create(f"/game/{region}", attributes=attrs)
    # Each region has multiple server pools
    tree.create(f"/game/{region}/ranked", attributes={
        "mode": "ranked",
        "anti_cheat": {"level": "strict"},
        "matchmaking": {"skill_range": 200}
    })
    tree.create(f"/game/{region}/casual", attributes={
        "mode": "casual",
        "matchmaking": {"skill_range": 1000, "backfill": True}
    })

# Tournament servers with special config
tree.create("/game/tournament", attributes={
    "tick_rate": 128,
    "max_players": 10,
    "anti_cheat": {"enabled": True, "level": "maximum"},
    "matchmaking": {"skill_range": 0, "wait_time_max": 300}
})

def get_server_config(tree, server_path):
    """Get full server configuration."""
    server = tree.get(server_path)
    return {
        "version": get_value(server, "version", PropagationMode.INHERIT),
        "tick_rate": get_value(server, "tick_rate", PropagationMode.INHERIT),
        "max_players": get_value(server, "max_players", PropagationMode.INHERIT),
        "latency_target": get_value(server, "latency_target", PropagationMode.INHERIT),
        "anti_cheat": get_value(server, "anti_cheat", PropagationMode.MERGE),
        "matchmaking": get_value(server, "matchmaking", PropagationMode.MERGE),
    }

# Compare ranked vs casual in NA-East
ranked = get_server_config(tree, "/game/na-east/ranked")
casual = get_server_config(tree, "/game/na-east/casual")

print("NA-East Ranked:")
print(f"  Skill range: {ranked['matchmaking']['skill_range']}")  # 200
print(f"  Anti-cheat: {ranked['anti_cheat']['level']}")          # strict

print("\nNA-East Casual:")
print(f"  Skill range: {casual['matchmaking']['skill_range']}")  # 1000
print(f"  Anti-cheat: {casual['anti_cheat']['level']}")          # standard

# Tournament config
tournament = get_server_config(tree, "/game/tournament")
print(f"\nTournament tick rate: {tournament['tick_rate']}")      # 128

Key Patterns

  • Global game settings (version, tick rate) at root
  • Regional customization for latency targets and datacenters
  • Game mode variations (ranked, casual, tournament)
  • MERGE for anti-cheat and matchmaking allows granular control