Auto-generate price/float sub-variants for all items at startup (6 per item)

This commit is contained in:
root
2026-07-05 16:29:54 +00:00
parent 396d21bcf4
commit 5485dce2d3
2 changed files with 55 additions and 17850 deletions
+55
View File
@@ -103,6 +103,57 @@ def load_custom_items() -> List[dict]:
return custom_items
# ─── Генерация sub-вариаций цен и float ───────────────────────────────────
def generate_item_variants(num_variants: int = 6):
"""Для каждого предмета генерирует sub-вариации с разными ценами и float"""
global ALL_ITEMS
new_all = []
for item in ALL_ITEMS:
base_price = item.get("price_rub", 0)
wr = item.get("wear_range", [0, 1])
mid = item.get("mid_float_used", 0.5)
wr_min, wr_max = wr
f_range = max(wr_max - wr_min, 0.001)
for v in range(num_variants):
variant = dict(item)
t = v / (num_variants - 1) if num_variants > 1 else 0
# price factor: 0.55 to 1.40 across variants
factor = 0.55 + t * 0.85
# add small random jitter
factor += random.uniform(-0.05, 0.05)
factor = max(0.30, min(1.50, factor))
p = int(base_price * factor)
# scramble last digits
if p >= 1_000_000:
prefix = p // 1000
suffix = random.randint(100, 999)
p = prefix * 1000 + suffix
elif p >= 100_000:
prefix = p // 100
suffix = random.randint(10, 99)
p = prefix * 100 + suffix
elif p >= 10_000:
prefix = p // 10
suffix = random.randint(1, 9)
p = prefix * 10 + suffix
variant["price_rub"] = max(p, 100)
variant["price_usd"] = round(variant["price_rub"] / 100, 2)
# float spreads across the wear range
float_offset = -0.4 + t * 0.8
float_offset += random.uniform(-0.1, 0.1)
new_mid = mid + float_offset * f_range
new_mid = max(wr_min + 0.001, min(wr_max - 0.001, new_mid))
variant["mid_float_used"] = round(new_mid, 4)
new_all.append(variant)
count_before = len(ALL_ITEMS)
ALL_ITEMS = new_all
print(f"Сгенерировано {len(ALL_ITEMS)} sub-вариаций из {count_before} предметов (x{num_variants})")
# ─── Загрузка основных данных ─────────────────────────────────────────────
def load_base_items() -> List[dict]:
"""Загружает основные предметы из skins.json"""
@@ -126,6 +177,10 @@ CUSTOM_ITEMS = load_custom_items()
ALL_ITEMS = BASE_ITEMS + CUSTOM_ITEMS
print(f"Всего предметов после объединения: {len(ALL_ITEMS):,}")
# Генерируем sub-вариации цен и float для каждого предмета
generate_item_variants(num_variants=6)
print(f"Всего предметов после генерации вариаций: {len(ALL_ITEMS):,}")
ITEM_BY_ID: Dict[int, dict] = {i: item for i, item in enumerate(ALL_ITEMS)}
# ─── Глобальные кэши / индексы ──────────────────────────────────────────────