Минимальная структура
SWEP обычно размещается в lua/weapons/weapon_mytool/. В shared.lua задаются метаданные, модели и основные параметры. Сервер решает результат попадания и изменение игрового состояния; клиент отвечает за интерфейс, эффекты и отзывчивое отображение.
SWEP.PrintName = "Инструмент"
SWEP.Spawnable = true
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/c_pistol.mdl"
SWEP.WorldModel = "models/weapons/w_pistol.mdl"
function SWEP:PrimaryAttack()
self:SetNextPrimaryFire(CurTime() + 0.5)
if CLIENT then return end
local owner = self:GetOwner()
if not IsValid(owner) then return end
-- серверное действие
endПроверяйте
- существуют ли viewmodel и worldmodel;
- есть ли c_hands у модели игрока;
- кулдаун задаётся до выхода из функции;
- сервер повторно проверяет цель и расстояние;
- эффекты не создаются дважды из-за prediction;
- оружие корректно удаляется и выдаётся при смене профессии.
