function SWEP:Think() local owner = self:GetOwner() local stop = self:RunHook("Hook_PreThink") if stop then return end local cfm = self:GetCurrentFiremode() if self:GetValue("RunawayBurst") and cfm < 0 then if self:GetBurstCount() >= -cfm then self:SetBurstCount(0) self:SetNextPrimaryFire(CurTime() + self:GetValue("PostBurstDelay")) elseif self:GetBurstCount() > 0 and self:GetBurstCount() < -cfm then self:PrimaryAttack() end else if (owner:KeyReleased(IN_ATTACK) or (cfm < 0 and self:GetBurstCount() >= -cfm)) then if cfm < 0 and self:GetBurstCount() > 1 then if !self:GetValue("AutoBurst") then self.Primary.Automatic = false end local add = 0 if self:GetBurstCount() >= -cfm then add = 60 / self:GetValue("RPM") end self:SetNextPrimaryFire(CurTime() + self:GetValue("PostBurstDelay") + add) end self:SetBurstCount(0) end end if self:GetPatternCount() > 0 and (self:GetRecoilAmount() == 0 or self:GetReloading()) then self:SetPatternCount(0) end if owner:KeyPressed(TacRP.IN_CUSTOMIZE) then if self:GetScopeLevel() == 0 then self:ToggleCustomize(!self:GetCustomize()) else if !self:GetValue("AlwaysPeek") then local shouldpeek = !self:GetPeeking() if owner:GetInfoNum("tacrp_togglepeek", 0) == 0 then shouldpeek = true end self:SetPeeking(shouldpeek) if self:GetSightAmount() > 0 then self:SetLastScopeTime(CurTime()) end end end elseif !self:GetValue("AlwaysPeek") and owner:GetInfoNum("tacrp_togglepeek", 0) == 0 and self:GetPeeking() and owner:KeyReleased(TacRP.IN_CUSTOMIZE) then self:SetPeeking(false) if self:GetSightAmount() > 0 then self:SetLastScopeTime(CurTime()) end end if owner:KeyPressed(TacRP.IN_TACTICAL) then self:ToggleTactical() end self:ThinkRecoil() self:ThinkSprint() self:ThinkGrenade() self:ThinkReload() self:ThinkSights() self:ThinkFreeAim() self:ThinkBlindFire() self:ProcessTimers() self:ThinkLockOn() self:ThinkHoldBreath() if self:GetValue("Melee") and self:GetOwner():KeyPressed(TacRP.IN_MELEE) then self:Melee() return end if IsValid(self:GetOwner()) and self:GetOwner():IsPlayer() and self:GetValue("TacticalThink") and self:GetTactical() then self:GetValue("TacticalThink")(self) end -- if IsValid(self:GetOwner()) and self:GetTactical() and self:GetValue("Minimap") and (SERVER and !game.SinglePlayer()) and (self.NextRadarBeep or 0) < CurTime() then -- self.NextRadarBeep = CurTime() + 1.5 -- local f = RecipientFilter() -- f:AddPVS(self:GetPos()) -- f:RemovePlayer(self:GetOwner()) -- local s = CreateSound(self, "plats/elevbell1.wav", f) -- s:SetSoundLevel(75) -- s:PlayEx(0.25, 105) -- end if self:GetJammed() and !self:StillWaiting() and TacRP.ConVars["jam_autoclear"]:GetBool() then local t = self:PlayAnimation("jam", 0.75, true, true) self:GetOwner():DoCustomAnimEvent(PLAYERANIMEVENT_CANCEL_RELOAD, t * 1000) self:SetJammed(false) end if self:GetNextIdle() < CurTime() and (SERVER or !game.SinglePlayer()) then self:Idle() end if self:GetValue("Bipod") and self:GetInBipod() and !self:CanBipod() then self:ExitBipod() end if CLIENT and (IsFirstTimePredicted() or game.SinglePlayer()) then self:ThinkNearWall() if IsValid(self.MuzzleLight) then if (self.MuzzleLightEnd or 0) < UnPredictedCurTime() then self.MuzzleLight:Remove() self.MuzzleLight = nil else self.MuzzleLight:SetBrightness( math.Remap( UnPredictedCurTime(), self.MuzzleLightStart, self.MuzzleLightEnd, self.MuzzleLightBrightness, 0 ) ) self.MuzzleLight:SetFOV( math.Remap( UnPredictedCurTime(), self.MuzzleLightStart, self.MuzzleLightEnd, self.MuzzleLightFOV, 60 ) ) self.MuzzleLight:Update() end end if !self.LoadedPreset then self.LoadedPreset = true if TacRP.ConVars["autosave"]:GetBool() and TacRP.ConVars["free_atts"]:GetBool() then self:LoadPreset() -- self:DoDeployAnimation() end end self:CanBipod() end self:RunHook("Hook_PostThink") end