Создаем оружие стреляющее пулями (SWEP )

0
Посетители
0
Активный участник
Итак, в этом туториале вы узнаете как создать собственную пушку стреляющую пулями.
И мы создадим... Кольт Питон(.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

Ну, вот и всё,если у вас все получилось как по туториалу и вы не допустили ошибок,ваш свэп должен работать.
Скриншоты:






Чистый код,без комментов: https://yadi.sk/d/6lh3BmZJdYZ5N

Попробуйте также сделать автомат,миниган,дробовик.
Mega Upload.
Посетители
0
Активный участник
Вот все типы патрон(нужно писать в 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
Mega Upload.
Посетители
0
Активный участник
Типы анимаций для игрока(нужно писать в SWEP.HoldType и тоже в кавычках):
pistol
smg
grenade
ar2
shotgun
rpg
physgun
crossbow
melee
slam
normal
fist
melee2
passive
knife
duel
camera
magic
revolver
Mega Upload.
Посетители
0
Активный участник
Ты бы это в статьи запихнул.
Посетители
0
Ветеран!
Закрепил, чтоб не потерялась.
Посетители
0
Активный участник
Изменил ссылку.
Вот код.
Mega Upload.
 
Доступ закрыт.
  • Вам запрещено отвечать в темах данного форума.