286 lines
7.9 KiB
Lua
286 lines
7.9 KiB
Lua
if ( SERVER ) then
|
||
AddCSLuaFile( "shared.lua" )
|
||
|
||
util.AddNetworkString("anterg0_guitarTab")
|
||
util.AddNetworkString("anterg0_guitarPlaySong")
|
||
end
|
||
|
||
if CLIENT then
|
||
SWEP.DrawCrosshair = false
|
||
SWEP.PrintName = "Русская гитара"
|
||
end
|
||
|
||
SWEP.Base = "weapon_base"
|
||
|
||
SWEP.PrintName = "Русская гитара"
|
||
SWEP.Slot = 2
|
||
SWEP.SlotPos = 4
|
||
SWEP.DrawAmmo = false
|
||
SWEP.ViewModel = "models/weapons/tayley/v_guitar.mdl"
|
||
SWEP.HoldType = "slam"
|
||
SWEP.ViewModelFOV = 70
|
||
SWEP.ViewModelFlip = false
|
||
SWEP.WorldModel = "models/anterg0_Guitar/marauder_guitar.mdl"
|
||
-- Other settings
|
||
SWEP.Weight = 5
|
||
SWEP.AutoSwitchTo = false
|
||
SWEP.AutoSwitchFrom = false
|
||
SWEP.Spawnable = true
|
||
SWEP.AdminSpawnable = true
|
||
|
||
-- SWEP info
|
||
SWEP.Author = "DuckFlit"
|
||
SWEP.Category = "[FT] Атмосфера"
|
||
SWEP.Instructions = "Левый клик дабы играть случайную песню. Правый клик чтобы выбрать песню."
|
||
|
||
-- Primary fire settings
|
||
SWEP.Primary.Damage = -1
|
||
SWEP.Primary.NumShots = -1
|
||
SWEP.Primary.Delay = 2
|
||
SWEP.Primary.ClipSize = -1
|
||
SWEP.Primary.DefaultClip = 0
|
||
SWEP.Primary.Tracer = -1
|
||
SWEP.Primary.Force = -1
|
||
SWEP.Primary.TakeAmmoPerBullet = false
|
||
SWEP.Primary.Automatic = false
|
||
SWEP.Primary.Ammo = "none"
|
||
|
||
SWEP.ReloadTimer = 1
|
||
|
||
local songsTbl = {
|
||
|
||
[1] = {"Спецназ - Денис Майданов", "weapons/guitar/ad.mp3"},
|
||
[2] = {"Мужество Ведёт на Небеса", "weapons/guitar/ac.mp3"},
|
||
[3] = {"Витязи", "weapons/guitar/ag.mp3"},
|
||
[4] = {"Чёрный Октябрь ", "weapons/guitar/aj.mp3"},
|
||
[5] = {"За что мы пьём", "weapons/guitar/ak.mp3"},
|
||
[6] = {"Набирает высоту", "weapons/guitar/ar.mp3"},
|
||
[7] = {"Стрим - Песня Бритвы", "weapons/guitar/ay.mp3"},
|
||
[8] = {"Простите меня", "weapons/guitar/am.mp3"},
|
||
[9] = {"Владимир Высоцкий - Солдаты Группы", "weapons/guitar/ap.mp3"},
|
||
[10] = {"ГСН-Российскийспецназ", "weapons/guitar/fa.mp3"},
|
||
[11] = {"Егор Авдеев - 333 с ночи до зари", "weapons/guitar/fr.mp3"},
|
||
[12] = {"Николай Анисимов - По самому прямому назначению", "weapons/guitar/fy.mp3"},
|
||
[13] = {"UKRAINE - Гімн Українскої Артилерії", "weapons/guitar/jj.mp3"},
|
||
}
|
||
|
||
if CLIENT then
|
||
|
||
SWEP.WepSelectIcon = surface.GetTextureID("vgui/selection/guitar_ico")
|
||
function SWEP:DrawWeaponSelection(x, y, wide, tall, alpha)
|
||
x = x + wide / 2
|
||
y = y + tall / 2
|
||
|
||
tall = tall * 0.75
|
||
|
||
x = x - tall / 2
|
||
y = y - tall / 2 - 10
|
||
|
||
surface.SetDrawColor(255, 255, 255, alpha)
|
||
surface.SetTexture(self.WepSelectIcon)
|
||
|
||
surface.DrawTexturedRect(x, y, tall, tall)
|
||
end
|
||
|
||
end
|
||
|
||
function SWEP:Initialize()
|
||
self:SetWeaponHoldType(self.HoldType)
|
||
end
|
||
|
||
function SWEP:Holster()
|
||
self.Weapon:EmitSound(Sound("weapons/guitar/squak2.mp3"))
|
||
return true
|
||
end
|
||
|
||
function SWEP:OnRemove()
|
||
self:Holster()
|
||
end
|
||
|
||
function SWEP:PrimaryAttack()
|
||
self:SetNextPrimaryFire(CurTime() + self.Primary.Delay);
|
||
self.Weapon:EmitSound(Sound("weapons/guitar/squak2.mp3"), 50, math.random(85,100), 1, CHAN_SWEP)
|
||
|
||
self.Weapon:SendWeaponAnim( ACT_VM_PRIMARYATTACK )
|
||
self.Owner:SetAnimation( PLAYER_ATTACK1 )
|
||
if SERVER then
|
||
local songChoice = math.random(1, #songsTbl)
|
||
self.Weapon:SetNWBool("guitar_isPlaying", true)
|
||
self.Weapon:SetNWInt("guitar_songNum", songChoice)
|
||
end
|
||
timer.Simple(0.5, function()
|
||
local song = songsTbl[self.Weapon:GetNWInt("guitar_songNum")][2]
|
||
if(song == nil) then
|
||
song = ""
|
||
end
|
||
self.Weapon:EmitSound(song, 80, 100, 1, CHAN_SWEP)
|
||
end)
|
||
end
|
||
|
||
function SWEP:SecondaryAttack()
|
||
local ply = self.Owner
|
||
if SERVER then
|
||
net.Start("anterg0_guitarTab")
|
||
net.Send(ply)
|
||
end
|
||
return false
|
||
end
|
||
|
||
function SWEP:Think()
|
||
end
|
||
|
||
function SWEP:Reload()
|
||
if(self.Weapon:GetNextSecondaryFire() <= CurTime() ) then
|
||
self.Weapon:SetNextSecondaryFire(CurTime() + self.ReloadTimer)
|
||
self.Weapon:SetNWBool("guitar_isPlaying", false)
|
||
self.Weapon:EmitSound(Sound("weapons/guitar/squak2.mp3"), 50, math.random(85,100), 1, CHAN_SWEP)
|
||
return false
|
||
end
|
||
end
|
||
|
||
function SWEP:Deploy()
|
||
self:SetWeaponHoldType(self.HoldType)
|
||
return true
|
||
end
|
||
|
||
SWEP.RenderGroup = RENDERGROUP_BOTH
|
||
|
||
function SWEP:DrawWorldModelTranslucent()
|
||
self:DrawModel()
|
||
|
||
if self.time == nil then self.time = 0 end
|
||
surface.SetFont("Trebuchet24")
|
||
local tag = "Now playing ... "
|
||
if(self.Weapon:GetNWInt("guitar_songNum") ~= 0) then
|
||
songName = songsTbl[self.Weapon:GetNWInt("guitar_songNum")][1]
|
||
tag = "Now playing ... " .. songName
|
||
end
|
||
local textwidth = surface.GetTextSize(tag)
|
||
|
||
if LocalPlayer():GetPos():Distance(self:GetPos()) < 550 then
|
||
if(self.Weapon:GetNWBool("guitar_isPlaying") == false) then return end
|
||
local alpha = (LocalPlayer():GetPos():Distance(self:GetPos()) / 100.0)
|
||
alpha = math.Clamp(2.5 - alpha, 0 ,1)
|
||
local a = Angle(0,0,0)
|
||
a:RotateAroundAxis(Vector(1,0,0),90)
|
||
a.y = LocalPlayer():GetAngles().y - 90
|
||
cam.Start3D2D(self:GetPos() + Vector(0,0,45 + (math.sin(self.time*0.5)*2)), a , 0.15)
|
||
draw.SimpleText(tag,"Trebuchet24", -textwidth*0.5,0,Color(205,225,255,255*alpha) , 0 , 1)
|
||
cam.End3D2D()
|
||
end
|
||
|
||
self.time = self.time + FrameTime()
|
||
end
|
||
|
||
net.Receive("anterg0_guitarTab", function(len, ply)
|
||
local songNum = net.ReadFloat()
|
||
|
||
local wep = ply:GetActiveWeapon()
|
||
if(wep:GetClass() == "guitar") then
|
||
wep:SetNWBool("guitar_isPlaying", true)
|
||
wep:SetNWInt("guitar_songNum", songNum)
|
||
wep:EmitSound( songsTbl[songNum][2], 80, 100, 1, CHAN_SWEP)
|
||
|
||
end
|
||
end)
|
||
|
||
// DERMA STUFF
|
||
|
||
if CLIENT then
|
||
|
||
local PANEL = {}
|
||
|
||
function PANEL:Init()
|
||
local w = ScrW()*0.3
|
||
local h = ScrH()*0.4
|
||
self:SetSize(w, h)
|
||
self:SetPos(ScrW()*0.7, ScrH()/2 - (h/2))
|
||
|
||
self:MakePopup()
|
||
self:SetDeleteOnClose(true)
|
||
self:SetDraggable(true)
|
||
self:ShowCloseButton(true)
|
||
self:SetTitle("")
|
||
|
||
self.Paint = function(_, w, h)
|
||
draw.RoundedBox(0, 0, 0, w, h, Color(0, 0, 0, 225))
|
||
end
|
||
|
||
self.MusicOptions = vgui.Create("anterg0_Guitar:DScroll", self)
|
||
|
||
end
|
||
|
||
vgui.Register("anterg0_Guitar:Menu", PANEL, "DFrame")
|
||
|
||
net.Receive("anterg0_guitarTab", function()
|
||
if(IsValid(guitPanel)) then return end
|
||
guitPanel = vgui.Create("anterg0_Guitar:Menu")
|
||
end)
|
||
|
||
// MUSIC
|
||
local PANEL = {}
|
||
|
||
function PANEL:Init()
|
||
local x,y = self:GetParent():GetSize()
|
||
self:SetSize(x, y + 60)
|
||
self:SetPos(0, 30)
|
||
|
||
--Modify Scroll Bar--
|
||
local sbar = self:GetVBar()
|
||
sbar:SetHideButtons(true)
|
||
sbar.Paint = function(_, w, h)
|
||
draw.RoundedBox(0, 0, 0, (w/2), h, Color(0, 0, 0, 225))
|
||
end
|
||
|
||
sbar.btnGrip.Paint = function(_, w, h)
|
||
draw.RoundedBox(0, 0, 0, (w/2), h, Color(255, 255, 255, 255))
|
||
end
|
||
|
||
self.Paint = function(_, w, h)
|
||
draw.RoundedBox(0, 0, 0, w, h, Color(0, 0, 0, 0))
|
||
end
|
||
|
||
for k, v in ipairs(songsTbl) do
|
||
local btn = self:Add("DButton")
|
||
btn:Dock(TOP)
|
||
btn:DockMargin(10, 0, 10, 10)
|
||
btn:SetSize(0, 25)
|
||
btn:SetText("")
|
||
btn.HoverLerp = 0
|
||
btn.Paint = function(_, w, h)
|
||
if btn:IsHovered() then
|
||
btn.HoverLerp = Lerp( FrameTime() * 10, btn.HoverLerp, 1 )
|
||
else
|
||
btn.HoverLerp = Lerp( FrameTime() * 3, btn.HoverLerp, 0.1)
|
||
end
|
||
draw.RoundedBox(0, 0, 0, w, h, Color(50,50,50,255*btn.HoverLerp))
|
||
draw.SimpleText(v[1], "Trebuchet18", w/2, 2, Color(255,255,255, 255), 1, 0)
|
||
end
|
||
|
||
btn.PaintOver = function(_, w, h)
|
||
surface.SetDrawColor(Color(255, 255, 255, 125), 1, 1)
|
||
surface.DrawOutlinedRect(0, 0, w, h)
|
||
end
|
||
|
||
btn.DoClick = function()
|
||
local wep = LocalPlayer():GetActiveWeapon()
|
||
if(wep ~= nil or IsValid(wep)) then
|
||
LocalPlayer():EmitSound(Sound("weapons/guitar/squak2.mp3") )
|
||
wep:EmitSound( v[2], 100, 100, 1, CHAN_SWEP )
|
||
end
|
||
net.Start("anterg0_guitarTab")
|
||
net.WriteFloat(k)
|
||
net.SendToServer()
|
||
|
||
self:GetParent():Close()
|
||
end
|
||
|
||
end
|
||
|
||
self:Dock(FILL)
|
||
self:DockMargin(0, 0, 0, 10)
|
||
end
|
||
|
||
vgui.Register("anterg0_Guitar:DScroll", PANEL, "DScrollPanel")
|
||
end
|