52 lines
1.8 KiB
Python
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
|