Движение можно реализовать 2 типов: плавное или рывками.
А) Для плавного движения есть несколько вариантов в зависимости от того, поддерживает ли модель физику.
V.1)
Если поддерживает, предмет создаём с классом prop_physics или prop_physics_override (либо prop_dynamic_override, если предмет не физический, но поддаётся эмуляции физики)
int iEnt = CreateEntityByName("prop_physics");
if( iEnt != -1 )
DispatchKeyValue(iEnt, "model", "путь к модели");
DispatchKeyValueVector(iEnt, "origin", координаты);
DispatchKeyValue(iEnt, "solid", "6");
DispatchSpawn(iEnt);
}
Затем выставляем гравитацию в ноль, и делаем небольшой толчок в нужном направлении через TeleportEntity (параметр velocity, остальные параметры - NULL_VECTOR)
Если модель "не подходит" для данного класса, она появится как невидимая.
V.2)
Если нужный класс подобрать не получилось, можно обернуть нужную модель поверх физической. Сделать это можно 2 способами:
1) заспавнить реально физическую модель (которая будет костяком), затем изменить ей модель на нужную через SetEntityModel (в качестве основы подойдёт не всякая модель, используйте, к примеру модели из models/props_junk/)
2) заспавнить реально физическую модель, и присоединить к ней новую заспавненную модель класса prop_dynamic (примеров аттача множество, например, плагины на шапки). Затем управляем физической моделью также через 0-гравитацию, либо animation sequence, если она имеет нужную анимацию.
V.3) Лифт, делается аналогично п 2.2., только за основу берется энтитя "поезд" - func_tracktrain, а активация его движения выполняется спец. инпутами.
Пример реализации можно посмотреть в моем Death Soul. Код сложный. При малейшем отклонении получите краш сервера.
Б) Движение рывками можно реализовать телепортацией - функция TeleportEntity с инкрементом позиции по таймеру (CreateTimer) с повторением.
При этом, чтобы минимизировать рывки можно использовать 2 методики:
1) Делать как можно меньший инкремент координат.
2) Прировнять мгновение телепорта к лерпу, пример у Lux (тогда движение рывками можно будет практически не отличить от плавного при соблюдении п.1.).