Garry's Mod

Garry's Mod

32 ratings
Как создать свой первый SWEP
By Degazi
В этом руководстве будет рассказано как создать свой SWEP (Scripted Weapon). Руководство я постарался делать без воды и максимально полезным, ведь я считаю что таких актуальных руководств и видео ОЧЕНЬ мало и мое поможет многим.
2
3
2
2
   
Award
Favorite
Favorited
Unfavorite
Подготовка
Для начала вы должны сделать папку для своего будущего SWEP. Ее следует создавать исключительно в папке addons

После создания папки (название папки может быть любое) вы создаете в ней еще одну обязательную папку lua. Так же при надобности папки materials, models, sound, и т.п
В папке lua еще одна с названием weapons и в ней уже ваш lua файл SWEP'А. Вот так выглядит полный путь
E:\Steam\steamapps\common\GarrysMod\garrysmod\addons\Tutorial\lua\weapons
После этого вы должны с использованием любого текстового редактора (Кроме естественно стандартного блокнота) создать lua файл в папке weapons. Я рекомендую использовать VisualStudio.



Редактирование lua файла
После всего этого вы заходите в ваш редактор и пишите туда шаблон кода

SWEP.PrintName = "Tutorial SWEP" -- Название вашего SWEP
SWEP.Author = "Delisionsturbo" -- Имя автора
SWEP.Category = "Tutorial category" -- Категория SWEP в спавн-меню

SWEP.Spawnable = true -- Можно ли спавнить тулганом (true/false)
SWEP.AdminOnly = false -- Только админы могут спавнить оружие? (true/false)

SWEP.Slot = 1 -- В каком слоте будет оружие
SWEP.SlotPos = 0 -- Позиция оружия в слотах

SWEP.ViewModelFOV = 60 -- FOV оружия
SWEP.ViewModel = "models/weapons/c_357.mdl" -- Модель оружия в руках от первого лица (Не путать с WorldModel!)
SWEP.WorldModel = "models/weapons/w_357.mdl" -- Модель оружия в руках от третьего лица (Не путать с ViewModel!)
SWEP.UseHands = true -- Использовать руки модели игрока (true/false)
SWEP.DrawCrosshair = true -- Показать прицел (true/false)
SWEP.DrawAmmo = true -- Показать индикатор патронов (true/false)
SWEP.SwayScale = 2 -- Масштаб раскачивания модели оружия при поворотах (по умолчанию = 0)
SWEP.BobScale = 2 -- Масштаб раскачивания модели оружия при ходьбе

SWEP.Primary.ClipSize = 6 -- Кол-во патронов в обойме
SWEP.Primary.DefaultClip = 36 -- Сколько будет выдаватся патронов по стандарту
SWEP.Primary.Automatic = false -- Автоматическое ли оружие? (true/false)
SWEP.Primary.Ammo = "pistol" -- Тип патронов

SWEP.Secondary.ClipSize = -1 -- Размер обоймы альт атаки (если альт атаки нету вводи -1)
SWEP.Secondary.DefaultClip = -1 -- Сколько будет выдаватся патронов по стандарту в альт атаке
SWEP.Secondary.Automatic = false -- Автоматическая ли альт атака? (true/false)
SWEP.Secondary.Ammo = "none" -- Тип патронов в альт атаке

function SWEP:Initialize() --
-- Инициализация вашего SWEP
end

function SWEP:PrimaryAttack()
if not self:CanPrimaryAttack() then return end

self:SetNextPrimaryFire(CurTime() + 0.6) -- Задержка перед следующим выстрелом

self:EmitSound("Weapon_357.Single") -- Звук выстрела оружия (кастомные звуки будут в следующих разделах)
self:ShootBullet(45, 1, 0.01) -- Свойства пули. Тут вы можете назначить урон(по стандарту 10), количество пуль при выстреле(по стандарту 1), и разброс(по стандарту 0.01)

self:TakePrimaryAmmo(1) -- Сколько будет отниматся патрон при выстреле

self.Owner:SetAnimation(PLAYER_ATTACK1) -- Анимация при использовании атаки
end

function SWEP:ShootBullet(damage, num_bullets, aimcone) -- Настройка пули, новичкам не трогать
local bullet = {} -- Переменная пули
bullet.Num = num_bullets -- Переменная кол-ва пуль при выстреле
bullet.Src = self.Owner:GetShootPos() -- Точка попадания пули
bullet.Dir = self.Owner:GetAimVector() -- Вектор полета пули
bullet.Spread = Vector(aimcone, aimcone, 0) -- Спрей оружия(разброс)
bullet.Tracer = 1 -- След снаряда
bullet.TracerName = "Tracer" -- Названия следа снаряда
bullet.Force = damage * 2 -- Сила пули
bullet.Damage = damage -- Немного другой урон у пули

self.Owner:FireBullets(bullet) -- Инициализация пули
self:SendWeaponAnim(ACT_VM_PRIMARYATTACK) -- Анимации
self.Owner:MuzzleFlash()
self.Owner:SetAnimation(PLAYER_ATTACK1)

end

function SWEP:SecondaryAttack()
-- Код для альт атаки (если есть)
end


Этот шаблон вы можете редактировать как хотите. Главное не трогайте что то если не знаете за что это отвечает. Рекомендую прочесть документацию о SWEP[wiki.facepunch.com] перед тем как создавать свое оружие дабы понять что за что отвечает.
После редактирования сохраняйте ваш lua файл и заходите в игру. Если ваш аддон не создает ошибок значит вы сделали все правильно. Если же создает то где то ошиблись.
В идеале должна получится такая картина


Самый простой SWEP который стреляет пулями по 10 урона и имеет базовые функции. По своему желанию можно отредактировать любые значения, но главное новичкам не переписывать основную часть кода.
Немного нестандартные функции
Предлагаю сделать иконку оружию заместо прозрачного места

Сделать это довольно легко, и сейчас я покажу как. Перед этим надо скачать программу VTFedit[valvedev.info]
Для начала создаем еще несколько папок в нашем моде, а если быть конкретнее это папки materials, в ней vgui и entities. Так выглядит полный путь
E:\Steam\steamapps\common\GarrysMod\garrysmod\addons\Tutorial\materials\vgui\entities
Далее нужно сделать изображение обязательно размером 256x256, переместить его в папку entites с самого начала и открыть его с помощью VTFedit. Нажимаем на белый лист в самой программе

Далее выбираем свое изображение и в открывшемся окне ничего не трогая нажимаем ОК

У нас открылось наше изображение, мы его сохраняем нажимая на Save

Далее ОБЯЗАТЕЛЬНО сохраняем vtf файл так как назван наш lua файл оружия, иначе ничего не сработает, в моем случае это tutorial

После всех этих шагов переходим в папку куда сохранились файлы, удаляем png файл и открываем с помощью редактора vmt файл который появился в папке

После стираем там все и вставляем этот текст
"UnlitGeneric"
{
"$basetexture" "vgui/entities/tutorial.vtf"
"$nolod" 1
"$vertexalpha" 1
"$vertexcolor" 1}

tutorial заменяете на имя вашего vtf файла. В итоге должно получится вот так

Иконка оружия готова, переходим к следующему, это свои звуки оружия
Для этого вам надо скачать свой звук который вы хотите слышать при выстреле в формате .wav и создать папку sound, в ней еще одну с вашим названием и уже в ней звук выстрела. Вот как выглядит полный путь
E:\Steam\steamapps\common\GarrysMod\garrysmod\addons\Tutorial\sound\yousound\название_вашего_звука.wav
После этого переходим к lua коду нашего оружия, и находим там строку self:EmitSound
Если же ее нету, напишите в функции выстрела (PrimaryAttack/SecondaryAttack)
Вот как это должно выглядеть
self:EmitSound("папка_с_звуком/звук.wav")
Главное в путь не пишите папку sound, это не правильно
Завершение
На этом пока что все. Гайд будет дополнятся со временем, постараюсь делать это чаще.
Скорее всего будет вторая часть где говорится о более продвинутой разработке SWEP.
Если вы ее хотите, проявите активность, тогда я ее сделаю. Если возникли вопросы или трудности, напишите в комментарии, постараюсь помочь чем смогу

Так же я оставлю ссылку на скачивание исходника, который вы сможете использовать как шаблон [кликабельно][drive.google.com]
16 Comments
Degazi  [author] 9 Mar @ 12:03am 
рад что мое руководство все еще помогает вам
Mr. Tsunami 8 Mar @ 11:55pm 
p. s. сначала не понял, потом как орнул в голосину))
Mr. Tsunami 8 Mar @ 11:47pm 
Огромное спасибо, чел, отличное руководство. Сначала никак не мог понять почему превью изображение не привязывается к оружию, потом скачал шаблон и понял что у меня перед названием оружия было weapon_, его тоже нужно вписывать если есть. Я не знал кстати что работает и без него, сначала думал у тебя weapon_tutorial.lua. В другом руководстве так было.
zxc1000-7 14 Feb, 2024 @ 4:35am 
а какое число надо ставить чтоб оно не двигалось
Degazi  [author] 14 Feb, 2024 @ 4:29am 
SWEP.SwayScale = 2 -- Масштаб раскачивания модели оружия при поворотах (по умолчанию = 0)
SWEP.BobScale = 2 -- Масштаб раскачивания модели оружия при ходьбе
Degazi  [author] 14 Feb, 2024 @ 4:28am 
SWEP.SwayScale и SWEP.BobScale настраивай
zxc1000-7 14 Feb, 2024 @ 4:02am 
как сделать чтобы оружие не тряслось когда вертишь камерой
jsbv 12 Sep, 2023 @ 8:05am 
спасибо большое братан
sxnrld 8 Sep, 2023 @ 5:55am 
.
KRUF 4 Sep, 2023 @ 10:40pm 
как правильно портировать модельку из блендера для оружия