add sborka

This commit is contained in:
2026-03-31 10:27:04 +03:00
commit f5e5f56c84
2345 changed files with 382127 additions and 0 deletions

View File

@@ -0,0 +1,195 @@
AddCSLuaFile()
SWEP.Base = "weapon_base"
if CLIENT then
SWEP.DrawWeaponInfoBox = false
SWEP.BounceWeaponIcon = false
end
SWEP.PrintName = "Consumable"
SWEP.Author = "Helix"
SWEP.Purpose = "Base consumable SWEP with animations"
SWEP.Category = "Helix"
SWEP.ViewModelFOV = 70
SWEP.ViewModel = "models/weapons/v_hands.mdl"
SWEP.WorldModel = ""
SWEP.UseHands = true
SWEP.DrawCrosshair = false
SWEP.Spawnable = false
SWEP.AutoSwitchTo = false
SWEP.AutoSwitchFrom = false
SWEP.Slot = 5
SWEP.SlotPos = 0
SWEP.SwayScale = 0
SWEP.BobScale = 0
SWEP.Primary.ClipSize = -1
SWEP.Primary.DefaultClip = -1
SWEP.Primary.Automatic = false
SWEP.Primary.Ammo = "none"
SWEP.Secondary.ClipSize = -1
SWEP.Secondary.DefaultClip = -1
SWEP.Secondary.Automatic = false
SWEP.Secondary.Ammo = "none"
-- Параметры предмета (устанавливаются при выдаче)
SWEP.ItemHunger = 0
SWEP.ItemThirst = 0
SWEP.ItemAlcohol = 0
SWEP.ItemEmpty = false
SWEP.ItemType = "food" -- "food", "drink", "consumable"
function SWEP:Initialize()
self:SetHoldType("slam")
self.Consuming = false
end
function SWEP:SetItemData(hunger, thirst, alcohol, empty, itemType, viewModel)
self.ItemHunger = hunger or 0
self.ItemThirst = thirst or 0
self.ItemAlcohol = alcohol or 0
self.ItemEmpty = empty or false
self.ItemType = itemType or "food"
-- Устанавливаем viewmodel, если указана
if viewModel and viewModel != "" then
self.ViewModel = viewModel
end
print(self.ViewModel)
end
function SWEP:Deploy()
local owner = self:GetOwner()
if not IsValid(owner) or not owner:IsPlayer() then
return false
end
-- Проигрываем idle анимацию
local vm = owner:GetViewModel()
if IsValid(vm) then
local idleSeq = vm:LookupSequence("idle")
if idleSeq > 0 then
vm:SendViewModelMatchingSequence(idleSeq)
end
end
-- Начинаем процесс употребления
self.Consuming = true
self:InitializeConsumable()
return true
end
function SWEP:InitializeConsumable()
local owner = self:GetOwner()
if not IsValid(self) or not IsValid(owner) or not owner:IsPlayer() then return end
-- Проигрываем анимацию use
local vm = owner:GetViewModel()
local sequenceDuration = 3
if IsValid(vm) then
local useSeq = vm:LookupSequence("use")
if useSeq > 0 then
vm:SendViewModelMatchingSequence(useSeq)
sequenceDuration = vm:SequenceDuration(useSeq)
end
end
-- Применяем эффекты в середине анимации
timer.Simple(sequenceDuration * 0.5, function()
if IsValid(self) and IsValid(owner) and owner:Alive() then
self:ApplyEffects(owner)
end
end)
-- Завершаем употребление и удаляем оружие
timer.Simple(sequenceDuration, function()
if IsValid(self) and IsValid(owner) and owner:Alive() then
self.Consuming = false
if SERVER then
owner:StripWeapon(self:GetClass())
local prev = owner:GetPreviousWeapon() or ""
if isentity(prev) and IsValid(prev) then
owner:SelectWeapon(prev:GetClass())
elseif isstring(prev) and prev != "" then
owner:SelectWeapon(prev)
end
end
end
end)
end
function SWEP:ApplyEffects(owner)
if not SERVER then return end
if not IsValid(owner) then return end
local char = owner:GetCharacter()
if not char then return end
-- Получаем текущие значения
local hunger = char:GetData("hunger", 100)
local thirst = char:GetData("thirst", 100)
-- Применяем изменения (SetHunger и SetThirst автоматически обновляют состояние)
owner:SetHunger(hunger + self.ItemHunger)
owner:SetThirst(thirst + self.ItemThirst)
-- Алкоголь
if self.ItemAlcohol > 0 then
owner:IncreaseDrunkLevel(self.ItemAlcohol)
end
-- Пустая тара
if self.ItemEmpty then
local inv = char:GetInventory()
if inv then
inv:Add(self.ItemEmpty)
end
end
-- Звук употребления из STALKER 2 Consumables
if self.ItemType == "drink" then
owner:EmitSound("Stalker2.Drink")
elseif self.ItemType == "food" then
owner:EmitSound("Stalker2.Eat")
elseif self.ItemType == "medical" then
owner:EmitSound("Stalker2.Healing")
end
end
function SWEP:PrimaryAttack()
-- Ничего не делаем
end
function SWEP:SecondaryAttack()
-- Ничего не делаем
end
function SWEP:Reload()
-- Ничего не делаем
end
function SWEP:Think()
-- Можно добавить дополнительную логику
end
function SWEP:Holster()
-- Блокируем переключение во время употребления
if self.Consuming then
return false
end
return true
end
function SWEP:OnRemove()
-- Очистка
end