Итак, в этом туториале вы узнаете как создать собственную пушку стреляющую пулями. И мы создадим... Кольт Питон(.357 Магнум) собственный персоной! Для начала, нам нужно естественно создать папку и файл.(Подробнее в моем прошлом туториале ) Файл addon.txt теперь больше не нужно создавать. Создайте луа файл, например: weapon_scripted_357.lua в папке 357 Scripted SWEP/lua/weapons.
Теперь соответственно напишем сам код. Там где кавычки, нужно указывать названия в кавычках.
SWEP.Author = "Hds46" // Ник автора свепа.Нужно указывать в кавычках. SWEP.PrintName = "357 Magnum" // Название свепа которое будет отображаться. SWEP.Contact = "Your site or mail" // Контактная информация по которой вам будут писать об ошибках и предложениях. SWEP.Purpose = "357 Scripted Weapon" // Краткая информация об оружии. SWEP.Instructions = "Shoot" // Инструкция об том,как использовать наш свеп. SWEP.Category = "My Weapons" // Категория, где будет лежать оружие. SWEP.Spawnable = true // Если false то оружие нельзя заспавнить,если true то можно. SWEP.AdminOnly = false // Если false то оружие может использовать каждый,если true то только админы.
SWEP.ViewModelFOV = 64 // Тут можно указать приближать/отдалять модель оружия от экрана игрока. SWEP.AutoSwitchTo = true // Если true то игрок автоматически переключается на это оружие(если подбирает его),если false то нет. SWEP.AutoSwitchFrom = false // То же самое,но с другими свепами. SWEP.Slot = 1 // Позиция оружия в Hud'е. SWEP.SlotPos = 3 // Позиция оружия в Hud'е.(в нижней части) SWEP.Weight = 5 // Вес оружия. SWEP.DrawCrosshair = true // Если true то показывается прицел,если false то нет. SWEP.DrawAmmo = true // Если true то показывается индикатор патрон магазина игрока,если false то нет.
SWEP.ViewModel = "models/weapons/c_357.mdl" // Директория модели от первого лица. SWEP.WorldModel = "models/weapons/w_357.mdl" // Директория модели от третьего лица.
SWEP.Primary.Sound = "Weapon_357.Single" // Звук выстрела.Можно указывать директорию,а можно и указывать звуки прописанные в папке script. SWEP.Primary.Tracer = "Tracer" // Название трассы(следа) пули. SWEP.Primary.TakeAmmo = 1 // Количество патрон которое расходуется при каждом выстреле SWEP.Primary.Spread = 0.01 // Точность оружие,чтобы оружие стреляло точно как слонобой из кс,напишите 0 или 0.01 SWEP.Primary.Delay = 1 // Скорострельность оружие(можно сделать автомат или пулемет ) SWEP.Primary.Recoil_pitch = -8 // Значение необходимое для отдачи оружия(Отдача наверх) SWEP.Primary.Recoil_yaw_min = -2 // Минимальное значение для кода math.Rand SWEP.Primary.Recoil_yaw_max = 2 // Максимальное значение для кода math.Rand,он будет выбирать случайное десятичное число в диапазоне от -2 до 2. Значение необходимое для отдачи оружия(Отдача вправо и влево) SWEP.Primary.Recoil_roll = 0 // Значение необходимое для отдачи оружия(Отдача спереди) SWEP.Primary.Damage = 65 // Урон наносимый оружием. SWEP.Primary.NumberofShots = 1 // Количество пуль выпускаемых при каждом выстреле(Дробовик) SWEP.Primary.ClipSize = 6 // Максимальное количество пуль в магазине. SWEP.Primary.DefaultClip = 6 // Максимальное количество пуль в магазине при подборе оружия. SWEP.Primary.Automatic = true // Если true то можно будет удерживать кнопку мыши и стрелять не останавливаясь,если false то нужно нажать кнопку атаки еще раз. SWEP.Primary.Ammo = "357" // Название используемых боеприпасов. SWEP.HoldType = "revolver" // Тип анимаций которые воспроизводит игрок.
SWEP.UseHands = true // Если true то c_модели используют кастомные руки,если false то нет.
SWEP.Base = "weapon_base" // База для оружия.Нужна чтобы позаимствовать пару нужных фич. // У нашего оружия нет функций альтернативного выстрела,так что Secodary значения нам не нужны. SWEP.Secondary.Delay = 0.1 SWEP.Secondary.Recoil = 0 SWEP.Secondary.Damage = 0 SWEP.Secondary.NumberofShots = 1 SWEP.Secondary.ClipSize = 0 SWEP.Secondary.DefaultClip = 0 SWEP.Secondary.Automatic = true SWEP.Secondary.Ammo = "none"
function SWEP:Initialize() // Инциализация оружия где нужно запрекэкшить звуки и указать тип анимаций. util.PrecacheSound( self.Primary.Sound ) self:SetWeaponHoldType( self.HoldType ) end
function SWEP:Reload() // Функция при перезарядке if ( self:GetNextPrimaryFire() > CurTime() ) then return end // Это нужно чтобы во время выстрела не перезаряжалось. if ( self.Weapon:Clip1() < self.Primary.ClipSize && self.Owner:GetAmmoCount( self.Primary.Ammo ) > 0 ) then // Проверка на патроны.Если у оружия меньше патрон чем обычно и есть патроны у игрока тогда дальше код. self:SetNextPrimaryFire( CurTime() + 3) // Время следующего выстрела,ведь не будет же игрок стрелять прямо во время перезарядки. self:DefaultReload(ACT_VM_RELOAD) // Анимация перезарядки(от первого лица) self.Owner:SetAnimation( PLAYER_RELOAD ) // Анимация перезарядки игрока(от третьего лица) end end
function SWEP:PrimaryAttack() // Функция выстрела левой кнопки мыши. if ( !self:CanPrimaryAttack() ) then return end // Если нет патрон, то оружие не может стрелять. local tr = self.Owner:GetEyeTrace() // Направление прицела игрока. local bullet = {} // Структура пули,значения будут использоваться из значений описанных выше,только вместо SWEP - self. bullet.Num = self.Primary.NumberofShots bullet.Src = self.Owner:GetShootPos() bullet.Dir = self.Owner:GetAimVector() bullet.Spread = Vector( self.Primary.Spread * 0.1 , self.Primary.Spread * 0.1, 0) bullet.Tracer = self.Primary.Tracer bullet.Damage = self.Primary.Damage bullet.AmmoType = self.Primary.Ammo
self:TakePrimaryAmmo(self.Primary.TakeAmmo)
self.Weapon:MuzzleFlash() // Вспышка выстрела. self.Owner:FireBullets( bullet ) // Вот этот код берет все значения от bullet(выше) и позволяет игроку стрелять пулями. self:EmitSound(Sound(self.Primary.Sound)) // Воспроизводит звук выстрела. self.Owner:ViewPunch( Angle( self.Primary.Recoil_pitch,math.Rand(self.Primary.Recoil_yaw_min,self.Primary.Rec oil_yaw_max),self.Primary.Recoil_roll) ) // Отдача,берет значения которые я описал выше. self.Weapon:SendWeaponAnim(ACT_VM_PRIMARYATTACK) // Воспроизводит анимацию выстрела(от первого лица) self.Owner:SetAnimation( PLAYER_ATTACK1 ) // Воспроизводит анимацию выстрела(от третьего лица) self:SetNextPrimaryFire( CurTime() + self.Primary.Delay ) // Время следующего выстрела. end
function SWEP:SecondaryAttack() // Функция выстрела правой кнопки мыши.(Она нам не понадобится) end
function SWEP:Deploy() // Функция при подбирании оружия. self:SetNextPrimaryFire( CurTime() + self.Primary.Delay ) // Время следующего выстрела,игрок не будет стрелять,пока не достанет оружие из кобуры. self.Weapon:SendWeaponAnim(ACT_VM_DRAW) // Анимация подбирания оружия(от первого лица) return true // Если true то разрешает поднимать оружие,если false то нет. end
function SWEP:Holster() // Функция при убирании оружия в кобуру. return true // Если true то разрешает убирать оружие в кобуру,если false то нет. end
function SWEP:Think() // Функция которая будет воспроизводится когда игрок держит оружие,каждые 0.01 миллисекунд. end
Ну, вот и всё,если у вас все получилось как по туториалу и вы не допустили ошибок,ваш свэп должен работать. Скриншоты:
Вот все типы патрон(нужно писать в SWEP.Primary.Ammo и в кавычках): AR2 AlyxGun Pistol SMG1 357 XBowBolt Buckshot RPG_Round SMG1_Grenade SniperRound SniperPenetratedRound Grenade Thumper Gravity Battery GaussEnergy CombineCannon AirboatGun StriderMinigun HelicopterGun AR2AltFire slam
Типы анимаций для игрока(нужно писать в SWEP.HoldType и тоже в кавычках): pistol smg grenade ar2 shotgun rpg physgun crossbow melee slam normal fist melee2 passive knife duel camera magic revolver