Загрузка данных


import sfm
import vs

def create_custom_lakeside_scene():
    print("=== ЗАГРУЗКА КАРТЫ И ТОЧНЫХ МОДЕЛЕЙ ИЗ МАСТЕРСКОЙ ===")
    
    # 1. Загружаем карту Lakeside
    sfm.LoadMap("maps/koth_lakeside_final.bsp")
    
    # Сбрасываем таймлайн на нулевой кадр
    sfm.SetTime(0.0)

    # 2. СОЗДАНИЕ ПЕРСОНАЖЕЙ С УЧЕТОМ МОДОВ
    
    # Синий Скаут (Team BLU)
    scout = sfm.CreateAnimationSet("Scout_Blue", "models/player/scout.mdl")
    sfm.SelectAnimationSet(scout)
    sfm.SetSkin(1)  # Синяя команда
    sfm.SetPosition(scout, vs.Vector(40, 100, 0))
    sfm.SetRotation(scout, vs.QAngle(0, -135, 0))

    # Персонаж Энди (используем модель из мастерской child_andy.mdl)
    andy = sfm.CreateAnimationSet("character_Andy", "models/workshop/player/child_andy.mdl")
    sfm.SelectAnimationSet(andy)
    sfm.SetPosition(andy, vs.Vector(0, 80, 0))
    sfm.SetRotation(andy, vs.QAngle(0, 90, 0))

    # Сиамский кот (используем модель из мастерской big_kittycat.mdl)
    cat = sfm.CreateAnimationSet("Siamese_Cat", "models/workshop/player/items/big_kittycat.mdl")
    sfm.SelectAnimationSet(cat)
    sfm.SetPosition(cat, vs.Vector(-180, 20, 0))
    sfm.SetRotation(cat, vs.QAngle(0, 45, 0))
    sfm.SetKeyframe()

    print("Все персонажи и модели из Мастерской успешно созданы.")

    # 3. ПОЗЫ И ВЗГЛЯДЫ (Без анимации рта, акцент на позы и глаза/голову)
    
    # Поза Энди (жалуется, наклонен вперед, смотрит на Скаута)
    sfm.SetTime(0.0)
    sfm.SetBoneRotation("character_Andy", "bip_head", vs.QAngle(-15, 10, -5))
    sfm.SetBoneRotation("character_Andy", "bip_spine_1", vs.QAngle(10, 0, 0))
    sfm.SetBoneRotation("character_Andy", "bip_upper_arm_L", vs.QAngle(20, 40, -20))
    sfm.SetBoneRotation("character_Andy", "bip_upper_arm_R", vs.QAngle(20, -40, 20))
    sfm.SetKeyframe()

    # Поза Скаута (слушает мелкого)
    sfm.SetTime(0.0)
    sfm.SetBoneRotation("Scout_Blue", "bip_head", vs.QAngle(10, -15, 10))
    sfm.SetBoneRotation("Scout_Blue", "bip_spine_2", vs.QAngle(15, 0, 0))
    sfm.SetKeyframe()


    # 4. ЖИВАЯ АНИМАЦИЯ ПРОХОДКИ КОТА ВО ВРЕМЕНИ
    
    # Кадр 0: Кот начинает движение издалека
    sfm.SetTime(0.0)
    sfm.SelectAnimationSet(cat)
    sfm.SetPosition(cat, vs.Vector(-180, 20, 0))
    sfm.SetRotation(cat, vs.QAngle(0, 35, 0))
    sfm.SetKeyframe()

    # Кадр 48 (~2 секунды): Кот проходит мимо и плавно поворачивает голову на Энди и Скаута
    sfm.SetTime(2.0)
    sfm.SetPosition(cat, vs.Vector(-40, 70, 0))
    sfm.SetRotation(cat, vs.QAngle(0, 25, 0))
    sfm.SetBoneRotation("Siamese_Cat", "neck", vs.QAngle(0, -50, 10))
    sfm.SetBoneRotation("Siamese_Cat", "head", vs.QAngle(5, -35, 15))
    sfm.SetKeyframe()

    # Кадр 96 (~4 секунды): Кот проходит дальше вперед и возвращает взгляд прямо
    sfm.SetTime(4.0)
    sfm.SetPosition(cat, vs.Vector(90, 120, 0))
    sfm.SetRotation(cat, vs.QAngle(0, 15, 0))
    sfm.SetBoneRotation("Siamese_Cat", "neck", vs.QAngle(0, 0, 0))
    sfm.SetBoneRotation("Siamese_Cat", "head", vs.QAngle(0, 0, 0))
    sfm.SetKeyframe()

    # Возвращаем таймлайн в начало сессии
    sfm.SetTime(0.0)
    print("=== ГОТОВО! СЦЕНА СБОРЫ НА ЛЕЙКСАЙДЕ С УЧЕТОМ МОДОВ ЗАВЕРШЕНА ===")

# Запуск скрипта
create_custom_lakeside_scene()