So, I’m trying to basically have the same exact animations/sounds from the stun-stick from HL2 by editing this script, but to arrest (LMB) and unarrest (RMB). The animation doesn’t work and the swing speed is nowhere near the actual stun-stick. I’m awfully new at this, so if someone could clue me in, It’d be much appreciated. :buckteeth:
if SERVER then
AddCSLuaFile("shared.lua")
end
if CLIENT then
SWEP.PrintName = "Arrest Baton"
SWEP.Slot = 5
SWEP.SlotPos = 5
SWEP.DrawAmmo = false
SWEP.DrawCrosshair = false
end
SWEP.Base = "weapon_cs_base2"
SWEP.Author = "sweetbabyraysbbq"
SWEP.Instructions = "Left click to unarrest
Right click to arrest
Reload to warn"
SWEP.Contact = ""
SWEP.Purpose = "Arresting and Unarresting criminals"
SWEP.IconLetter = ""
SWEP.Category = "DarkRP"
SWEP.ViewModelFOV = 62
SWEP.ViewModelFlip = false
SWEP.AnimPrefix = "stunstick"
SWEP.Spawnable = true
SWEP.AdminSpawnable = true
SWEP.AdminOnly = true
SWEP.Category = "sweetbabyraysbbq"
SWEP.NextStrike = 0
SWEP.ViewModel = Model("models/weapons/v_stunstick.mdl")
SWEP.WorldModel = Model("models/weapons/w_stunbaton.mdl")
SWEP.Sound = Sound("weapons/stunstick/stunstick_swing1.wav")
SWEP.Primary.ClipSize = -1
SWEP.Primary.DefaultClip = 0
SWEP.Primary.Automatic = false
SWEP.Primary.Ammo = ""
SWEP.Secondary.ClipSize = -1
SWEP.Secondary.DefaultClip = 0
SWEP.Secondary.Automatic = false
SWEP.Secondary.Ammo = ""
function SWEP:Initialize()
self:SetHoldType("normal")
end
function SWEP:PrimaryAttack() -- Unarresting
if CurTime() < self.NextStrike then return end
self:SetHoldType("melee")
timer.Simple(0.3, function() if self:IsValid() then self:SetHoldType("normal") end end)
self.NextStrike = CurTime() + 0.51 -- Actual delay is set later
if CLIENT then return end
timer.Stop(self:GetClass() .. "_idle" .. self:EntIndex())
local vm = self.Owner:GetViewModel()
if IsValid(vm) then
vm:ResetSequence(vm:LookupSequence("idle01"))
timer.Simple(0, function()
if not IsValid(self) or not IsValid(self.Owner) or not IsValid(self.Owner:GetActiveWeapon()) or self.Owner:GetActiveWeapon() ~= self then return end
self.Owner:SetAnimation(PLAYER_ATTACK1)
if IsValid(self.Weapon) then
self.Weapon:EmitSound(self.Sound)
end
local vm = self.Owner:GetViewModel()
if not IsValid(vm) then return end
vm:ResetSequence(vm:LookupSequence("attackch"))
vm:SetPlaybackRate(1 + 1/3)
local duration = vm:SequenceDuration() / vm:GetPlaybackRate()
timer.Create(self:GetClass() .. "_idle" .. self:EntIndex(), duration, 1, function()
if not IsValid(self) or not IsValid(self.Owner) then return end
local vm = self.Owner:GetViewModel()
if not IsValid(vm) then return end
vm:ResetSequence(vm:LookupSequence("idle01"))
end)
self.NextStrike = CurTime() + duration
end)
end
self.Owner:LagCompensation(true)
local trace = util.QuickTrace(self.Owner:EyePos(), self.Owner:GetAimVector() * 90, {self.Owner})
self.Owner:LagCompensation(false)
if IsValid(trace.Entity) and trace.Entity.onUnArrestStickUsed then
trace.Entity:onUnArrestStickUsed(self.Owner)
return
end
local ent = self.Owner:getEyeSightHitEntity(nil, nil, function(p) return p ~= self.Owner and p:IsPlayer() and p:Alive() end)
if not ent then return end
if not IsValid(ent) or not ent:IsPlayer() or (self.Owner:EyePos():Distance(ent:GetPos()) > 115) or not ent:getDarkRPVar("Arrested") then
return
end
ent:unArrest(self.Owner)
DarkRP.notify(ent, 0, 4, DarkRP.getPhrase("youre_unarrested_by", self.Owner:Nick()))
if self.Owner.SteamName then
DarkRP.log(self.Owner:Nick().." ("..self.Owner:SteamID()..") unarrested "..ent:Nick(), Color(0, 255, 255))
end
end
function SWEP:SecondaryAttack() -- Arresting
if CurTime() < self.NextStrike then return end
self:SetHoldType("melee")
timer.Simple(0.3, function() if self:IsValid() then self:SetHoldType("normal") end end)
self.NextStrike = CurTime() + 0.51 -- Actual delay is set later.
if CLIENT then return end
timer.Stop(self:GetClass() .. "_idle" .. self:EntIndex())
local vm = self.Owner:GetViewModel()
if IsValid(vm) then
vm:ResetSequence(vm:LookupSequence("idle01"))
timer.Simple(0, function()
if not IsValid(self) or not IsValid(self.Owner) or not IsValid(self.Owner:GetActiveWeapon()) or self.Owner:GetActiveWeapon() ~= self then return end
self.Owner:SetAnimation(PLAYER_ATTACK1)
if IsValid(self.Weapon) then
self.Weapon:EmitSound(self.Sound)
end
local vm = self.Owner:GetViewModel()
if not IsValid(vm) then return end
vm:ResetSequence(vm:LookupSequence("attackch"))
vm:SetPlaybackRate(1 + 1/3)
local duration = vm:SequenceDuration() / vm:GetPlaybackRate()
timer.Create(self:GetClass() .. "_idle" .. self:EntIndex(), duration, 1, function()
if not IsValid(self) or not IsValid(self.Owner) then return end
local vm = self.Owner:GetViewModel()
if not IsValid(vm) then return end
vm:ResetSequence(vm:LookupSequence("idle01"))
end)
self.NextStrike = CurTime() + duration
end)
end
self.Owner:LagCompensation(true)
local trace = util.QuickTrace(self.Owner:EyePos(), self.Owner:GetAimVector() * 90, {self.Owner})
self.Owner:LagCompensation(false)
if IsValid(trace.Entity) and trace.Entity.onArrestStickUsed then
trace.Entity:onArrestStickUsed(self.Owner)
return
end
local ent = self.Owner:getEyeSightHitEntity(nil, nil, function(p) return p ~= self.Owner and p:IsPlayer() and p:Alive() end)
if not IsValid(ent) or (self.Owner:EyePos():Distance(ent:GetPos()) > 90) or (not ent:IsPlayer() and not ent:IsNPC()) then
return
end
if ent:GetClass() == "prop_ragdoll" then
for k,v in pairs(player.GetAll()) do
if ent.OwnerINT and ent.OwnerINT == v:EntIndex() and GAMEMODE.KnockoutToggle then
DarkRP.toggleSleep(v, true)
return
end
end
end
if not GAMEMODE.Config.npcarrest and ent:IsNPC() then
return
end
if FAdmin and ent:IsPlayer() and ent:FAdmin_GetGlobal("fadmin_jailed") then
DarkRP.notify(self.Owner, 1, 5, DarkRP.getPhrase("cant_arrest_fadmin_jailed"))
return
end
local jpc = DarkRP.jailPosCount()
if not jpc or jpc == 0 then
DarkRP.notify(self.Owner, 1, 4, DarkRP.getPhrase("cant_arrest_no_jail_pos"))
else
-- Send NPCs to Jail
if ent:IsNPC() then
ent:SetPos(DarkRP.retrieveJailPos())
else
if not ent.Babygod then
ent:arrest(nil, self.Owner)
DarkRP.notify(ent, 0, 20, DarkRP.getPhrase("youre_arrested_by", self.Owner:Nick()))
if self.Owner.SteamName then
DarkRP.log(self.Owner:Nick().." ("..self.Owner:SteamID()..") arrested "..ent:Nick(), Color(0, 255, 255))
end
else
DarkRP.notify(self.Owner, 1, 4, DarkRP.getPhrase("cant_arrest_spawning_players"))
end
end
end
end
function SWEP:Reload()
self:SetHoldType("melee")
timer.Destroy("rp_stunstick_threaten")
timer.Create("rp_stunstick_threaten", 1, 1, function()
if not IsValid(self) then return end
self:SetHoldType("normal")
end)
if not SERVER then return end
if self.LastReload and self.LastReload > CurTime() - 0.1 then self.LastReload = CurTime() return end
self.LastReload = CurTime()
self.Owner:EmitSound("weapons/stunstick/spark"..math.random(1,3)..".wav")
end