add sborka
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
local PLUGIN = PLUGIN
|
||||
|
||||
-- Конфигурационные переменные
|
||||
ix.config.Add("dynamicHeightEnabled", true, "Включить динамическую высоту камеры.", nil, {
|
||||
category = "Динамическая высота"
|
||||
})
|
||||
|
||||
ix.config.Add("dynamicHeightMaxManual", false, "Использовать ручную максимальную высоту.", nil, {
|
||||
category = "Динамическая высота"
|
||||
})
|
||||
|
||||
ix.config.Add("dynamicHeightMinManual", false, "Использовать ручную минимальную высоту.", nil, {
|
||||
category = "Динамическая высота"
|
||||
})
|
||||
|
||||
ix.config.Add("dynamicHeightMin", 16, "Минимальная высота камеры (присед).", nil, {
|
||||
data = {min = 5, max = 180},
|
||||
category = "Динамическая высота"
|
||||
})
|
||||
|
||||
ix.config.Add("dynamicHeightMax", 64, "Максимальная высота камеры (стоя).", nil, {
|
||||
data = {min = 5, max = 180},
|
||||
category = "Динамическая высота"
|
||||
})
|
||||
|
||||
local function UpdateView(ply)
|
||||
if not ix.config.Get("dynamicHeightEnabled", true) then
|
||||
if ply.ixDynamicHeightChanged then
|
||||
ply:SetViewOffset(Vector(0, 0, 64))
|
||||
ply:SetViewOffsetDucked(Vector(0, 0, 28))
|
||||
ply.ixDynamicHeightChanged = nil
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
-- Определяем высоту модели
|
||||
local height_max = 64
|
||||
local height_min = 16
|
||||
|
||||
-- Создаем временную сущность для измерения высоты стоя
|
||||
local entity = ents.Create("base_anim")
|
||||
entity:SetModel(ply:GetModel())
|
||||
entity:ResetSequence(entity:LookupSequence("idle_all_01"))
|
||||
local bone = entity:LookupBone("ValveBiped.Bip01_Neck1")
|
||||
if bone then
|
||||
height_max = entity:GetBonePosition(bone).z + 5
|
||||
end
|
||||
|
||||
-- Создаем временную сущность для измерения высоты приседа
|
||||
local entity2 = ents.Create("base_anim")
|
||||
entity2:SetModel(ply:GetModel())
|
||||
entity2:ResetSequence(entity2:LookupSequence("cidle_all"))
|
||||
local bone2 = entity2:LookupBone("ValveBiped.Bip01_Neck1")
|
||||
if bone2 then
|
||||
height_min = entity2:GetBonePosition(bone2).z + 5
|
||||
end
|
||||
|
||||
-- Удаляем временные сущности
|
||||
entity:Remove()
|
||||
entity2:Remove()
|
||||
|
||||
-- Применяем настройки высоты
|
||||
local min = ix.config.Get("dynamicHeightMin", 16)
|
||||
local max = ix.config.Get("dynamicHeightMax", 64)
|
||||
|
||||
if ix.config.Get("dynamicHeightMinManual", false) then
|
||||
ply:SetViewOffsetDucked(Vector(0, 0, min))
|
||||
else
|
||||
ply:SetViewOffsetDucked(Vector(0, 0, height_min))
|
||||
end
|
||||
|
||||
if ix.config.Get("dynamicHeightMaxManual", false) then
|
||||
ply:SetViewOffset(Vector(0, 0, max))
|
||||
else
|
||||
ply:SetViewOffset(Vector(0, 0, height_max))
|
||||
end
|
||||
|
||||
ply.ixDynamicHeightChanged = true
|
||||
end
|
||||
|
||||
local function UpdateTrueModel(ply)
|
||||
if ply:GetNWString("ixDynamicHeight:TrueModel") ~= ply:GetModel() then
|
||||
ply:SetNWString("ixDynamicHeight:TrueModel", ply:GetModel())
|
||||
UpdateView(ply)
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:PlayerSpawn(ply)
|
||||
UpdateTrueModel(ply)
|
||||
end
|
||||
|
||||
function PLUGIN:PlayerTick(ply)
|
||||
UpdateTrueModel(ply)
|
||||
end
|
||||
|
||||
-- Обновление при изменении конфигов
|
||||
local function OnConfigChanged(key, oldValue, newValue)
|
||||
if string.StartWith(key, "dynamicHeight") then
|
||||
for _, ply in pairs(player.GetAll()) do
|
||||
UpdateView(ply)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:OnConfigChanged(key, oldValue, newValue)
|
||||
if key == "dynamicHeightEnabled" or
|
||||
key == "dynamicHeightMin" or
|
||||
key == "dynamicHeightMax" or
|
||||
key == "dynamicHeightMinManual" or
|
||||
key == "dynamicHeightMaxManual" then
|
||||
OnConfigChanged(key, oldValue, newValue)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user