Auto-generate price/float sub-variants for all items at startup (6 per item)
This commit is contained in:
+55
@@ -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)}
|
||||
|
||||
# ─── Глобальные кэши / индексы ──────────────────────────────────────────────
|
||||
|
||||
-17850
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user