В этом туториале,вы научитесь созданию собственного оружия. Итак начнём. Сперва заходим в папку addons - D:\Games\Red Garry's Mod\Game\garrysmod\addons Создаём новую папку,переименовываем его название на своё,к примеру SWEP.
Дальше создаём текстовый файл addon.txt. Вписываем в него: "AddonInfo" { "name" "Swep" // Вместо Swep впишите своё название аддона. "author_name" "Author" //Вместо Author впишите свой ник. "author_url" "Url" //Тут можно написать страницу своего сайта.Пример - http://www.gmod-fan.ru/ "info" "Swep" // Тут вписываем информацию о своём оружие. } В принципе можно оставить всё как есть. Дальше создаём папку lua.
В ней создаём папку weapons.Дальше в этой папке создаём наше оружие. Создаём текстовый файл,и переименовываем его в weapon_myswep - Где myswep название нашего оружия.Переименовываем формат .txt в формат .lua
Вот теперь можно создавать оружие. Открываем наш .lua файл,и вписываем в самом начале вот этот код:
SWEP.PrintName = "Chair Thrower" // Это название нашего оружия. SWEP.Author = "I am athor" // Тут можно указать ник автора.Впишите свой ник в кавычках. SWEP.Instructions = "Left mouse to fire a chair!" // Это инструкция по аддону.
Далее мы напишем код для разрешения оружия админу и игрокам.
SWEP.Spawnable = true // Тут можно вписать разрешение простому игроку,если там = true как в нашем случае,то игроку разрешается использовать это оружие,если = false то игроку запрещается использовать его. SWEP.AdminOnly = true // То же самое как и в случае сверху,только тут разрешение/запрещение оружие даётся админу.
Дальше пишем характеристики нашего оружия.
SWEP.Primary.ClipSize = -1 // Это функция отвечает за количество патрон в магазине,если значение = -1 как в нашем случае,то патронов в магазине бесконечно. SWEP.Primary.DefaultClip = -1 // Количество патрон при получения оружия. SWEP.Primary.Automatic = true // Тип оружия автомат или винтовка.В нашем случае = true это автомат,при случае = false это винтовка. SWEP.Primary.Ammo = "none" // Тип патрон.
SWEP.Secondary.ClipSize = -1 // Вот тут всё то же самое как и в верхних // функциях. SWEP.Secondary.DefaultClip = -1 SWEP.Secondary.Automatic = false SWEP.Secondary.Ammo = "none"
SWEP.Slot = 1 // Слот оружия,если = 1,то наше оружие будет в первом слоте рядом с монтировкой. SWEP.SlotPos = 2 // Позиция оружия в слоте. SWEP.DrawAmmo = false // Скрытие количества патрон в hud'е,если = false,то патроны скрываются,если = true то патроны остаются. SWEP.DrawCrosshair = true // Скрытие прицела.
SWEP.ViewModel = "models/weapons/v_pistol.mdl" // ВАЖНО:Тут прописываем путь к оружию.Это модель которую будет держать игрок. SWEP.WorldModel = "models/weapons/w_pistol.mdl" // ВАЖНО:Тут прописываем путь к оружию.Это модель которая будет лежать в не подобранном состоянии.
local ShootSound = Sound( "Metal.SawbladeStick" ) // Звук при выстреле.
Теперь переходим к главным функциям.
function SWEP:PrimaryAttack() // ВАЖНО:Эта функция отвечает за свойства выстрела из левой кнопки мыши.
self.Weapon:SetNextPrimaryFire( CurTime() + 0.5 ) // Тут указано, когда произойдёт следующий выстрел. 0.5 вы можете изменить по своему вкусу.
self:ThrowChair( "models/props/cs_office/Chair_office.mdl" ) // Функция атаки стульями.Если у вас не работает установите контент Counter-Strike Source или переименуйте модель в models/props_c17/FurnitureChair001a.mdl
end
function SWEP:SecondaryAttack() // Функция отвечает за выстрел из правой кнопки мыши.
self:ThrowChair( "models/props_c17/FurnitureChair001a.mdl" ) // Функция атаки стульями.
end
function SWEP:ThrowChair( model_file ) // Вот и сама функция стула.
ent:SetModel( model_file ) // Путь к модели,в данном случае ничего не указываем поскольку модели уже были указаны в функциях выстрела.
ent:SetPos( self.Owner:EyePos() + ( self.Owner:GetAimVector() * 16 ) ) // Указывает где появится модель. ent:SetAngles( self.Owner:EyeAngles() ) ent:Spawn() // Спавнит наше оружие
local phys = ent:GetPhysicsObject() if ( !IsValid( phys ) ) then ent:Remove() return end
local velocity = self.Owner:GetAimVector() velocity = velocity * 100 // Сила выстрела,вы можете указать 7000,чтобы стулья летели со скорости пули. velocity = velocity + ( VectorRand() * 10 ) phys:ApplyForceCenter( velocity )
cleanup.Add( self.Owner, "props", ent ) // Функция удаление стула,как вы видите код относит его к категории пропс.
undo.Create( "Thrown_Chair" ) // Главная функция удаления стула при нажатии кнопки z. undo.AddEntity( ent ) undo.SetPlayer( self.Owner ) undo.Finish() end
//Вот и всё.Ваше оружие готово,вы можете изменить свойства по своему вкусу. //Искать в категории оружия Other.
Как ты додумался до пистолета стреляющего стульями? А пост просто класс! Спасибо! Я сделал себе оружие с текстурой портал гана из Portal 2, которое спавнит мячики :3
А вообще выстрел пулями можно сделать с помощью структуры bullet: local bullet = {} bullet.Num = num_bullets bullet.Src = self.Owner:GetShootPos() // Source bullet.Dir = self.Owner:GetAimVector() // Dir of bullet bullet.Spread = Vector( aimcone, aimcone, 0 ) // Aim Cone bullet.Tracer = 5 // Show a tracer on every x bullets bullet.TracerName = "Tracer" // what Tracer Effect should be used bullet.Force = 1 // Amount of force to give to phys objects bullet.Damage = damage bullet.AmmoType = "Pistol"