2014-10-02 08:49:54 +08:00
|
|
|
|
|
|
|
if SERVER then
|
|
|
|
AddCSLuaFile("shared.lua")
|
|
|
|
AddCSLuaFile("client.lua")
|
|
|
|
AddCSLuaFile("glon.lua")
|
|
|
|
AddCSLuaFile("menu/tool.lua")
|
|
|
|
AddCSLuaFile("menu/weapon.lua")
|
|
|
|
AddCSLuaFile("menu/ironsights.lua")
|
|
|
|
AddCSLuaFile("menu/models.lua")
|
|
|
|
AddCSLuaFile("base_code.lua")
|
|
|
|
end
|
|
|
|
|
|
|
|
if CLIENT then
|
|
|
|
|
|
|
|
SWEP.PrintName = "SWEP Construction Kit"
|
|
|
|
SWEP.Author = "Clavus"
|
|
|
|
SWEP.Contact = "clavus@clavusstudios.com"
|
|
|
|
SWEP.Purpose = "Design SWEP ironsights and clientside models"
|
|
|
|
SWEP.Instructions = "http://tinyurl.com/swepkit"
|
|
|
|
SWEP.Slot = 5
|
|
|
|
SWEP.SlotPos = 10
|
|
|
|
SWEP.ViewModelFlip = false
|
|
|
|
|
|
|
|
SWEP.DrawCrosshair = false
|
|
|
|
|
|
|
|
SWEP.ShowViewModel = true
|
|
|
|
SWEP.ShowWorldModel = true
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
local debugging = false
|
|
|
|
|
|
|
|
function SCKDebug( msg )
|
|
|
|
if !debugging then return end
|
|
|
|
MsgN("[SCK] "..msg)
|
|
|
|
end
|
|
|
|
|
|
|
|
local repmsg = {}
|
|
|
|
function SCKDebugRepeat( tag, msg )
|
|
|
|
if !debugging then return end
|
|
|
|
if !repmsg[tag] then repmsg[tag] = { last = 0, num = 0 } end
|
|
|
|
repmsg[tag].num = repmsg[tag].num + 1
|
|
|
|
if (CurTime() - repmsg[tag].last >= 1) then
|
|
|
|
MsgN("[SCK][Repeated "..repmsg[tag].num.." times in last sec] "..msg)
|
|
|
|
repmsg[tag].num = 0
|
|
|
|
repmsg[tag].last = CurTime()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
SWEP.HoldType = "pistol"
|
|
|
|
SWEP.HoldTypes = { "normal", "melee", "melee2", "fist",
|
|
|
|
"knife", "smg", "ar2", "pistol", "revolver", "rpg", "physgun",
|
|
|
|
"grenade", "shotgun", "crossbow", "slam", "duel", "passive",
|
|
|
|
"camera" }
|
|
|
|
|
|
|
|
SWEP.Spawnable = true
|
|
|
|
SWEP.AdminSpawnable = true
|
|
|
|
|
|
|
|
SWEP.ViewModel = "models/weapons/v_pistol.mdl"
|
|
|
|
SWEP.WorldModel = "models/weapons/w_pistol.mdl"
|
|
|
|
SWEP.CurWorldModel = "models/weapons/w_pistol.mdl" // this is where shit gets hacky
|
|
|
|
|
|
|
|
SWEP.ViewModelFOV = 70
|
|
|
|
SWEP.BobScale = 0
|
|
|
|
SWEP.SwayScale = 0
|
|
|
|
|
|
|
|
SWEP.Primary.Automatic = false
|
|
|
|
|
|
|
|
SWEP.IronsightTime = 0.2
|
|
|
|
|
|
|
|
SWEP.IronSightsPos = Vector(0, 0, 0)
|
|
|
|
SWEP.IronSightsAng = Vector(0, 0, 0)
|
|
|
|
|
|
|
|
local sck_class = ""
|
|
|
|
|
|
|
|
function SWEP:Initialize()
|
|
|
|
|
2014-11-12 08:15:49 +08:00
|
|
|
self:SetWeaponHoldType(self.HoldType)
|
2014-10-02 08:49:54 +08:00
|
|
|
|
|
|
|
self:SetIronSights( true )
|
|
|
|
self:ResetIronSights()
|
|
|
|
|
|
|
|
if CLIENT then
|
|
|
|
self:CreateWeaponWorldModel()
|
|
|
|
self:ClientInit()
|
|
|
|
if (not file.IsDir("swep_construction_kit", "DATA")) then
|
|
|
|
file.CreateDir("swep_construction_kit")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
self.Dropped = false
|
|
|
|
|
|
|
|
sck_class = self:GetClass()
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
function SWEP:Equip()
|
|
|
|
|
|
|
|
self.Dropped = false
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
function SWEP:PrimaryAttack()
|
|
|
|
|
|
|
|
self.Weapon:SetNextPrimaryFire(CurTime() + 0.2)
|
|
|
|
|
|
|
|
if CLIENT then
|
|
|
|
self:OpenMenu()
|
|
|
|
end
|
|
|
|
if game.SinglePlayer() then
|
|
|
|
self.Owner:SendLua("LocalPlayer():GetActiveWeapon():OpenMenu()")
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
function SWEP:SecondaryAttack()
|
|
|
|
|
|
|
|
self.Weapon:SetNextSecondaryFire(CurTime() + 0.2)
|
|
|
|
|
|
|
|
if CLIENT then
|
|
|
|
self:OpenMenu()
|
|
|
|
end
|
|
|
|
if game.SinglePlayer() then
|
|
|
|
self.Owner:SendLua("LocalPlayer():GetActiveWeapon():OpenMenu()")
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
function SWEP:SetupDataTables()
|
|
|
|
|
|
|
|
self:DTVar( "Bool", 0, "ironsights" )
|
|
|
|
self:DTVar( "Bool", 1, "thirdperson" )
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
function SWEP:ToggleIronSights()
|
|
|
|
self.dt.ironsights = !self.dt.ironsights
|
|
|
|
end
|
|
|
|
|
|
|
|
function SWEP:SetIronSights( b )
|
|
|
|
self.dt.ironsights = b
|
|
|
|
end
|
|
|
|
|
|
|
|
function SWEP:GetIronSights()
|
|
|
|
return self.dt.ironsights
|
|
|
|
end
|
|
|
|
|
|
|
|
function SWEP:ResetIronSights()
|
|
|
|
RunConsoleCommand("_sp_ironsight_x", 0)
|
|
|
|
RunConsoleCommand("_sp_ironsight_y", 0)
|
|
|
|
RunConsoleCommand("_sp_ironsight_z", 0)
|
|
|
|
RunConsoleCommand("_sp_ironsight_pitch", 0)
|
|
|
|
RunConsoleCommand("_sp_ironsight_yaw", 0)
|
|
|
|
RunConsoleCommand("_sp_ironsight_roll", 0)
|
|
|
|
end
|
|
|
|
|
|
|
|
function SWEP:ToggleThirdPerson()
|
|
|
|
self:SetThirdPerson( !self.dt.thirdperson )
|
|
|
|
end
|
|
|
|
|
|
|
|
function SWEP:SetThirdPerson( b )
|
|
|
|
self.dt.thirdperson = b
|
|
|
|
|
|
|
|
local owner = self.Owner
|
|
|
|
if (!IsValid(owner)) then owner = self.LastOwner end
|
|
|
|
if (!IsValid(owner)) then return end
|
|
|
|
|
|
|
|
if (self.dt.thirdperson) then
|
|
|
|
owner:SetViewEntity(game.GetWorld())
|
|
|
|
owner:CrosshairDisable()
|
|
|
|
else
|
|
|
|
owner:SetViewEntity(owner)
|
|
|
|
owner:CrosshairEnable()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function SWEP:GetThirdPerson()
|
|
|
|
return self.dt.thirdperson
|
|
|
|
end
|
|
|
|
|
|
|
|
function SWEP:GetViewModelPosition(pos, ang)
|
|
|
|
|
|
|
|
//if true then return pos, ang end
|
|
|
|
//SCKDebugRepeat( "SWEP:VMPos", "Getting viewmodel pos" )
|
|
|
|
|
|
|
|
local bIron = self.dt.ironsights
|
|
|
|
local fIronTime = self.fIronTime or 0
|
|
|
|
|
|
|
|
if (not bIron and fIronTime < CurTime() - self.IronsightTime) then
|
|
|
|
return pos, ang
|
|
|
|
end
|
|
|
|
|
|
|
|
self.IronSightsPos, self.IronSightsAng = self:GetIronSightCoordination()
|
|
|
|
|
|
|
|
local Mul = 1.0
|
|
|
|
|
|
|
|
if (fIronTime > CurTime() - self.IronsightTime) then
|
|
|
|
Mul = math.Clamp((CurTime() - fIronTime) / self.IronsightTime, 0, 1)
|
|
|
|
|
|
|
|
if not bIron then Mul = 1 - Mul end
|
|
|
|
end
|
|
|
|
|
|
|
|
local Offset = self.IronSightsPos
|
|
|
|
|
|
|
|
if (self.IronSightsAng) then
|
|
|
|
ang = ang * 1
|
|
|
|
ang:RotateAroundAxis(ang:Right(), self.IronSightsAng.x * Mul)
|
|
|
|
ang:RotateAroundAxis(ang:Up(), self.IronSightsAng.y * Mul)
|
|
|
|
ang:RotateAroundAxis(ang:Forward(), self.IronSightsAng.z * Mul)
|
|
|
|
end
|
|
|
|
|
|
|
|
local Right = ang:Right()
|
|
|
|
local Up = ang:Up()
|
|
|
|
local Forward = ang:Forward()
|
|
|
|
|
|
|
|
pos = pos + Offset.x * Right * Mul
|
|
|
|
pos = pos + Offset.y * Forward * Mul
|
|
|
|
pos = pos + Offset.z * Up * Mul
|
|
|
|
|
|
|
|
return pos, ang
|
|
|
|
end
|
|
|
|
|
|
|
|
SWEP.ir_x = CreateConVar( "_sp_ironsight_x", 0.0 )
|
|
|
|
SWEP.ir_y = CreateConVar( "_sp_ironsight_y", 0.0 )
|
|
|
|
SWEP.ir_z = CreateConVar( "_sp_ironsight_z", 0.0 )
|
|
|
|
SWEP.ir_p = CreateConVar( "_sp_ironsight_pitch", 0.0 )
|
|
|
|
SWEP.ir_yw = CreateConVar( "_sp_ironsight_yaw", 0.0 )
|
|
|
|
SWEP.ir_r = CreateConVar( "_sp_ironsight_roll", 0.0 )
|
|
|
|
|
|
|
|
function SWEP:GetIronSightCoordination()
|
|
|
|
|
|
|
|
local vec = Vector( self.ir_x:GetFloat(), self.ir_y:GetFloat(), self.ir_z:GetFloat() )
|
|
|
|
local ang = Vector( self.ir_p:GetFloat(), self.ir_yw:GetFloat(), self.ir_r:GetFloat() )
|
|
|
|
return vec, ang
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
function SWEP:GetHoldTypes()
|
|
|
|
return self.HoldTypes
|
|
|
|
end
|
|
|
|
|
|
|
|
SWEP.LastOwner = nil
|
|
|
|
/***************************
|
|
|
|
Helper functions
|
|
|
|
***************************/
|
|
|
|
SWEP.IsSCK = true
|
|
|
|
function GetSCKSWEP( pl )
|
|
|
|
local wep = pl:GetActiveWeapon()
|
|
|
|
if (IsValid(wep) and wep.IsSCK) then
|
|
|
|
return wep
|
|
|
|
end
|
|
|
|
//Error("Not holding SWEP Construction Kit!")
|
|
|
|
return NULL
|
|
|
|
end
|
|
|
|
|
|
|
|
if SERVER then
|
|
|
|
include("server.lua")
|
|
|
|
end
|
|
|
|
|
|
|
|
if CLIENT then
|
|
|
|
include("client.lua")
|
|
|
|
end
|