132 lines
3.8 KiB
Lua
132 lines
3.8 KiB
Lua
hook.Add("Move","RopeKnifeMove", function(ply,mv,cmd)
|
|
local ent = ply:GetNWEntity("ClimbingEnt")
|
|
if IsValid( ent ) and ply:GetMoveType() == MOVETYPE_CUSTOM then
|
|
|
|
local deltaTime = FrameTime()
|
|
local pos = mv:GetOrigin()
|
|
local targetpos = ply:GetNWEntity("ClimbingEnt"):GetPos()
|
|
local maxspeed = ply:GetMaxSpeed()*0.6
|
|
local forward = mv:GetForwardSpeed()/10000
|
|
local vel = mv:GetVelocity()
|
|
|
|
ply:SetNWInt("MoveSpeed", forward*maxspeed)
|
|
|
|
local newVelocity = (Vector(0,0,1)*forward*maxspeed)
|
|
local newOrigin = pos + newVelocity * deltaTime
|
|
|
|
if mv:KeyDown(IN_JUMP) and SERVER then
|
|
ply:SetMoveType( MOVETYPE_WALK )
|
|
ply:SetGroundEntity( NULL )
|
|
ply:SetNWEntity("ClimbingEnt", NULL)
|
|
ply:DrawViewModel(true)
|
|
ply:DrawWorldModel(true)
|
|
|
|
-- Give a small boost
|
|
mv:SetVelocity( ply:GetForward() * -50 + Vector(0,0,200) )
|
|
|
|
-- Multi-use: Hook remains until its global 60s timer finishes
|
|
return true
|
|
end
|
|
|
|
if pos.z >= targetpos.z + 50 and SERVER then
|
|
ply:SetMoveType( MOVETYPE_WALK )
|
|
ply:SetGroundEntity( NULL )
|
|
ply:SetNWEntity("ClimbingEnt", NULL)
|
|
ply:DrawViewModel(true)
|
|
ply:DrawWorldModel(true)
|
|
|
|
-- Multi-use: Hook remains until its global 60s timer finishes
|
|
end
|
|
if pos.z <= ent:GetNWVector("DownHit").z + 5 and ply:KeyDown(IN_BACK) and SERVER then
|
|
newOrigin = newOrigin - ply:GetNWEntity("ClimbingEnt"):GetNWVector("HitNormal"):Angle():Forward()*18
|
|
ply:SetMoveType( MOVETYPE_WALK )
|
|
ply:SetGroundEntity( NULL )
|
|
ply:SetNWEntity("ClimbingEnt", NULL)
|
|
ply:DrawViewModel(true)
|
|
ply:DrawWorldModel(true)
|
|
|
|
-- Multi-use: Hook remains until its global 60s timer finishes
|
|
end
|
|
|
|
mv:SetVelocity( newVelocity )
|
|
|
|
mv:SetOrigin( newOrigin )
|
|
|
|
return true;
|
|
end
|
|
end)
|
|
|
|
function RopeKnifeThink( ply )
|
|
if IsValid(ply:GetNWEntity("ClimbingEnt")) then
|
|
if ply:GetMoveType() == MOVETYPE_CUSTOM then
|
|
local wep = ply:GetActiveWeapon()
|
|
if IsValid(wep) and GetConVar( "gk_enableshooting" ):GetBool() == false then
|
|
wep:SetNextPrimaryFire(CurTime() + 0.5)
|
|
ply:DrawViewModel(false)
|
|
if SERVER then
|
|
ply:DrawWorldModel(false)
|
|
end
|
|
end
|
|
elseif SERVER then
|
|
ply:SetNWEntity("ClimbingEnt", NULL)
|
|
ply:DrawViewModel(true)
|
|
ply:DrawWorldModel(true)
|
|
end
|
|
end
|
|
end
|
|
hook.Add("PlayerPostThink", "RopeKnifeThink", RopeKnifeThink)
|
|
|
|
function PlayerDieClimb( victim, weapon, killer )
|
|
-- Multi-use: Hook remains until its global 60s timer finishes
|
|
victim:SetNWEntity("ClimbingEnt", NULL)
|
|
end
|
|
hook.Add( "PlayerDeath", "PlayerClimbDeath", PlayerDieClimb )
|
|
|
|
CreateConVar("gk_enableshooting", "0", {FCVAR_ARCHIVE})
|
|
CreateConVar("gk_forcefirstperson", "0", {FCVAR_ARCHIVE})
|
|
CreateConVar("gk_enabledamage", "1", {FCVAR_ARCHIVE})
|
|
|
|
if CLIENT then
|
|
if GetConVar("gk_thirdperson") == nil then
|
|
CreateClientConVar("gk_thirdperson", "1", true, true)
|
|
end
|
|
if GetConVar("gk_ropemat") == nil then
|
|
CreateClientConVar("gk_ropemat", "", true, true)
|
|
end
|
|
end
|
|
|
|
|
|
local function GKSettingsPanel(panel)
|
|
panel:ClearControls()
|
|
|
|
panel:AddControl("CheckBox", {
|
|
Label = "Thirdperson",
|
|
Command = "gk_thirdperson"
|
|
})
|
|
|
|
end
|
|
|
|
local function GKAdminSettingsPanel(panel)
|
|
panel:ClearControls()
|
|
|
|
panel:AddControl("CheckBox", {
|
|
Label = "Shoot while climbing",
|
|
Command = "gk_enableshooting"
|
|
})
|
|
panel:AddControl("CheckBox", {
|
|
Label = "Enable grapple damage",
|
|
Command = "gk_enabledamage"
|
|
})
|
|
panel:AddControl("CheckBox", {
|
|
Label = "Force First-person",
|
|
Command = "gk_forcefirstperson"
|
|
})
|
|
|
|
end
|
|
|
|
local function PopulateGKMenu()
|
|
spawnmenu.AddToolMenuOption("Options", "Grappling Knife", "Grappling Knife", "Settings", "", "", GKSettingsPanel)
|
|
spawnmenu.AddToolMenuOption("Options", "Grappling Knife", "Admin Grappling Knife", "Admin Settings", "", "", GKAdminSettingsPanel)
|
|
end
|
|
hook.Add("PopulateToolMenu", "GK Cvars", PopulateGKMenu)
|