Grappling hook entity only visible to player who shot it
7 replies, posted
-----
title does not say it all, is this a bug with grappling hook, or something you want added? or maybe just a statement of fact
This is a bug I'm trying to fix, sorry if that wasn't clear
[QUOTE=GregT2207;49830839]This is a bug I'm trying to fix, sorry if that wasn't clear[/QUOTE]
You mean, you want us to fix it, and say your users you did it.
[QUOTE=deinemudda32;49831373]You mean, you want us to fix it, and say your users you did it.[/QUOTE]
What?
Post the SWEP code aswell, most likely ENT:SetEndPos() is not called shared or not properly networked inside the SWEP. Or the whole ENT is only created clientside, I can't tell without the SWEP code.
[QUOTE=deinemudda32;49831373]You mean, you want us to fix it, and say your users you did it.[/QUOTE]
He wants help fixing a [single] bug in the addon, so he can "say his users he did it"? How about just not posting.
I didn't make this addon I'm just trying to fix it
Weapon Code
Server
[CODE]
AddCSLuaFile( "cl_init.lua" )
AddCSLuaFile( "shared.lua" )
include('shared.lua')
-- Distance CVAR
CreateConVar("grapple_distance", -1, false)
[/CODE]
Client
[CODE]
include('shared.lua')
function SWEP:CustomAmmoDisplay()
self.AmmoDisplay = self.AmmoDisplay or {}
-- attempt to remove ammo display
self.AmmoDisplay.Draw = false
self.AmmoDisplay.PrimaryClip = 1
self.AmmoDisplay.PrimaryAmmo = -1
self.AmmoDisplay.SecondaryAmmo = -1
return self.AmmoDisplay
end
function SWEP:SetWeaponHoldType( t )
-- Just a fake function so we can define
-- weapon holds in shared files without errors
end
[/CODE]
Shared
[CODE]
SWEP.Author = "Hxrmn, HOLOGRAPHICpizza"
SWEP.Contact = "mcraft@peak15.org"
SWEP.Purpose = "A Grappling Hook"
SWEP.Instructions = "Left click to fire"
SWEP.Spawnable = true
SWEP.AdminSpawnable = false
SWEP.PrintName = "Grappling Hook"
SWEP.Slot = 2
SWEP.SlotPos = 0
SWEP.DrawAmmo = false
SWEP.DrawCrosshair = true
SWEP.ViewModel = "models/weapons/v_crossbow.mdl"
SWEP.WorldModel = "models/weapons/w_crossbow.mdl"
local sndPowerUp = Sound("weapons/crossbow/hit1.wav")
local sndPowerDown = Sound("Airboat.FireGunRevDown")
local sndTooFar = Sound("buttons/button10.wav")
JustShot = false
function SWEP:Initialize()
nextshottime = CurTime()
self:SetWeaponHoldType( "smg" )
self.zoomed = false
end
function SWEP:Think()
if (!self.Owner || self.Owner == NULL) then return end
if ( self.Owner:KeyPressed( IN_ATTACK ) ) then
if JustShot == false then
self:StartAttack()
end
elseif ( self.Owner:KeyDown( IN_ATTACK ) && inRange ) then
self:UpdateAttack()
elseif ( self.Owner:KeyReleased( IN_ATTACK ) && inRange ) then
self:EndAttack( true )
end
--Changed from KeyDown to prevent random stuck-in-zoom bug.
if ( self.Owner:KeyPressed( IN_ATTACK2 ) ) then
self:Attack2()
end
end
function SWEP:DoTrace( endpos )
local trace = {}
trace.start = self.Owner:GetShootPos()
trace.endpos = trace.start + (self.Owner:GetAimVector() * 14096) --14096 is length modifier.
if(endpos) then trace.endpos = (endpos - self.Tr.HitNormal * 7) end
trace.filter = { self.Owner, self.Weapon }
self.Tr = nil
self.Tr = util.TraceLine( trace )
end
function SWEP:StartAttack()
Attacking = true
timer.Stop("JustShotFalse")
-- Get begining and end poins of trace.
local gunPos = self.Owner:GetShootPos() -- Start of distance trace.
local disTrace = self.Owner:GetEyeTrace() -- Store all results of a trace in disTrace.
local hitPos = disTrace.HitPos -- Stores Hit Position of disTrace.
-- Calculate Distance
-- Thanks to rgovostes for this code.
local x = (gunPos.x - hitPos.x)^2;
local y = (gunPos.y - hitPos.y)^2;
local z = (gunPos.z - hitPos.z)^2;
local distance = math.sqrt(x + y + z);
-- Only latches if distance is less than distance CVAR, or CVAR negative
local distanceCvar = GetConVarNumber("grapple_distance")
inRange = false
if distanceCvar < 0 or distance <= distanceCvar then
inRange = true
end
if inRange then
if (SERVER) then
if (!self.Beam) then -- If the beam does not exist, draw the beam.
-- grapple_beam
self.Beam = ents.Create( "trace1" )
self.Beam:SetPos( self.Owner:GetShootPos() )
self.Beam:Spawn()
end
self.Beam:SetParent( self.Owner )
self.Beam:SetOwner( self.Owner )
end
self:DoTrace()
self.speed = 1000 -- Rope latch speed. Was 3000.
self.startTime = CurTime()
self.endTime = CurTime() + self.speed
self.dt = -1
if (SERVER && self.Beam) then
self.Beam:GetTable():SetEndPos( self.Tr.HitPos )
end
self:UpdateAttack()
self.Weapon:EmitSound( sndPowerDown )
self.Weapon:SendWeaponAnim(ACT_VM_PRIMARYATTACK)
else
-- Play a sound
self.Weapon:EmitSound( sndTooFar )
end
end
function SWEP:UpdateAttack()
if Attacking == true then
self.Owner:LagCompensation( true )
if (!endpos) then endpos = self.Tr.HitPos end
if (SERVER && self.Beam) then
self.Beam:GetTable():SetEndPos( endpos )
end
lastpos = endpos
if ( self.Tr.Entity:IsValid() ) then
endpos = self.Tr.Entity:GetPos()
if ( SERVER ) then
self.Beam:GetTable():SetEndPos( endpos )
end
end
local vVel = (endpos - self.Owner:GetPos())
local Distance = endpos:Distance(self.Owner:GetPos())
local et = (self.startTime + (Distance/self.speed))
if(self.dt != 0) then
self.dt = (et - CurTime()) / (et - self.startTime)
end
if(self.dt < 0) then
self.Weapon:EmitSound( sndPowerUp )
self.dt = 0
end
if(self.dt == 0) then
zVel = self.Owner:GetVelocity().z
vVel = vVel:GetNormalized()*(math.Clamp(Distance,0,7))
if( SERVER ) then
local gravity = GetConVarNumber("sv_Gravity")
vVel:Add(Vector(0,0,(gravity/100)*1.5)) -- Player speed. DO NOT MESS WITH THIS VALUE!
if(zVel < 0) then
vVel:Sub(Vector(0,0,zVel/100))
end
self.Owner:SetVelocity(vVel)
end
end
endpos = nil
self.Owner:LagCompensation( false )
end
end
function SWEP:EndAttack( shutdownsound )
Attacking = false
if JustShot == false then
JustShot = true
timer.Create("JustShotFalse", 5, 1, function()
JustShot = false
end)
end
self.zoomed = false
self:ReloadAnimation()
if ( shutdownsound ) then
self.Weapon:EmitSound( sndPowerDown )
end
if ( CLIENT ) then return end
if ( !self.Beam ) then return end
self.Beam:Remove()
self.Beam = nil
end
function SWEP:Attack2() -- Zoom.
if self.zoomed then
self.zoomed = false
if SERVER then
self.Owner:SetFOV(0, 0.1)
end
else
self.zoomed = true
if SERVER then
self.Owner:SetFOV(30, 0.1)
end
end
end
function SWEP:Holster()
self:EndAttack( false )
return true
end
function SWEP:OnRemove()
self:EndAttack( false )
return true
end
function SWEP:PrimaryAttack()
end
function SWEP:SecondaryAttack()
end
--[[---------------------------------------------------------
Name: SWEP:IdleAnimation()
Desc: Are you seriously too stupid to understand the function by yourself?
---------------------------------------------------------]]--
function SWEP:IdleAnimation(time)
self.IdleApply = true
self.ActionDelay = CurTime() + time
self.IdleDelay = CurTime() + time
end
--[[---------------------------------------------------------
Name: SWEP:Deploy()
Desc: Whip mine out.
---------------------------------------------------------]]--
function SWEP:Deploy()
self:DeployAnimation()
if (IsValid(self.Owner) and self.Owner:GetViewModel()) then
self:IdleAnimation(self.Owner:GetViewModel():SequenceDuration())
end
self.Weapon:SetNextPrimaryFire(CurTime() + 5 + 0.05)
self.Weapon:SetNextSecondaryFire(CurTime() + 5 + 0.05)
self.ActionDelay = (CurTime() + 5 + 0.05)
return true
end
--[[---------------------------------------------------------
Name: SWEP:DeployAnimation()
---------------------------------------------------------]]--
function SWEP:DeployAnimation()
self.Weapon:SendWeaponAnim(ACT_VM_DRAW)
end
--[[---------------------------------------------------------
Name: SWEP:ReloadAnimation()
---------------------------------------------------------]]--
function SWEP:ReloadAnimation()
self.Weapon:SendWeaponAnim(ACT_VM_RELOAD)
end
--[[---------------------------------------------------------
Name: YERP()
---------------------------------------------------------]]--
SWEP.VElements = {
["bolt"] = { type = "Model", model = "models/props_junk/harpoon002a.mdl", bone = "Crossbow_model.bolt", rel = "", pos = Vector(0, 0.2, 9.199), angle = Angle(90, 0, 0), size = Vector(0.25, 0.25, 0.25), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} }
}
SWEP.ViewModelBoneMods = {
["Crossbow_model.bolt"] = { scale = Vector(0.009, 0.009, 0.
Sorry, you need to Log In to post a reply to this thread.