Files
dota-random-builds/dota-random-builds-back/api/data.py
2025-12-16 22:16:45 +03:00

52 lines
1.8 KiB
Python

import random
from typing import Dict
def generate_skill_build() -> Dict[int, str]:
"""
Generate a random skill build for levels 1-25 following Dota 2 rules:
- Ultimate (r) can only be skilled at levels 6, 12, 18
- Talents can only be skilled at levels 10, 15, 20, 25
- Basic abilities (q, w, e) can be skilled at other levels
- Each basic ability maxes at 4 points
- Ultimate maxes at 3 points
- One talent per tier (left OR right)
"""
skill_build: Dict[int, str] = {}
# Track ability points spent
ability_points = {"q": 0, "w": 0, "e": 0, "r": 0}
max_points = {"q": 4, "w": 4, "e": 4, "r": 3}
# Talent levels and which side to pick
talent_levels = [10, 15, 20, 25]
# Ultimate levels
ult_levels = [6, 12, 18]
for level in range(1, 26):
if level in talent_levels:
# Pick random talent side
skill_build[level] = random.choice(["left_talent", "right_talent"])
elif level in ult_levels:
# Must skill ultimate if not maxed
if ability_points["r"] < max_points["r"]:
skill_build[level] = "r"
ability_points["r"] += 1
else:
# Ultimate maxed, pick a basic ability
available = [a for a in ["q", "w", "e"] if ability_points[a] < max_points[a]]
if available:
choice = random.choice(available)
skill_build[level] = choice
ability_points[choice] += 1
else:
# Regular level - pick a basic ability
available = [a for a in ["q", "w", "e"] if ability_points[a] < max_points[a]]
if available:
choice = random.choice(available)
skill_build[level] = choice
ability_points[choice] += 1
return skill_build