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()