Jump to content

[REL] Script to fix "strafing / walking sidewards" bug on high FPS // Move with a gun on 100 FPS!


Recommended Posts

  • MTA Anti-Cheat Team

We all know high FPS limits cause various GTA bugs. But the most common annoyance, is that at FPS limits higher than 70, it becomes hard to move around while aiming a weapon (e.g start walking sidewards) which happens between 71-74 FPS, after which at extremely high FPS limits (80-100 FPS) it's no longer possible to strafe.

For all server owners that have a reason to set high FPS limit but don't want to get this annoying bug, i wrote this scripted solution:

local previousTask = false
local defaultFpsLimit


-- Store FPS limit on resource start to ensure its reliability (as server FPS limit)
function getLimit()
	defaultFpsLimit = getFPSLimit()
end
addEventHandler("onClientResourceStart", resourceRoot, getLimit)

local isAdded = false

-- Just optimization for the render event to limit unnecesary execution
function optimizeRender(prevSlot, curSlot)
	if not isAdded and (curSlot >= 2 and curSlot <= 6) then
		addEventHandler("onClientRender", getRootElement(), fixStrafing)
		isAdded = true
	elseif isAdded and (curSlot <= 1 or curSlot >= 7) then
		removeEventHandler("onClientRender", getRootElement(), fixStrafing)
		isAdded = false
	end
end
addEventHandler("onClientPlayerWeaponSwitch", localPlayer, optimizeRender)


function fixStrafing()

	local weapon = getPedWeaponSlot(localPlayer)

	-- Don't execute if player isn't holding a (suitable) weapon
	-- This selects only weapons that are guns and suffer from strafing bug (slot 2, 3, 4, 5 and 6)
	-- Allowing other weapon types will bug the script as throwing/punch weapons don't support 'release' state of TASK_SIMPLE_USE_GUN
	if not (weapon >= 2 and weapon <= 6)
		then return
	end

	local newTask = getPedTask(localPlayer, "secondary", 0)

	if (previousTask ~= "TASK_SIMPLE_USE_GUN" or false) and (previousTask ~= newTask) then
		setFPSLimit(70)
	elseif (previousTask == "TASK_SIMPLE_USE_GUN") and (previousTask ~= newTask) then
		setFPSLimit(defaultFpsLimit)
	end

	previousTask = newTask
end

So basically it temporarily sets the player's local FPS limit to 70 (which fully supports walking sideways) only when you are aiming a weapon and restores it when they stop aiming down the sights. Now it works perfectly and seamlessly (player doesn't feel it) and it's also optimized.

Again, if you have a reason to use high FPS limits.. this script only lifts the boundary (takes away the first serious GTA bug in line - moving while aiming) but when you reach the next boundary, you'll get a range of other FPS and physics related GTA bugs. But yeah, depending on your server, using this script may allow you to use even higher FPS limits than 70 / 74 by delaying the problems.

Download link (community): TBA

  • Like 6
  • Thanks 2
  • Haha 1
Link to post
  • 2 weeks later...
  • MTA Anti-Cheat Team
5 hours ago, cocowen said:

i fix conf to handle this

You reduced the FPS limit in mtaserver.conf, basically this script makes it so you don't need to do that.

3 hours ago, cocowen said:

i find the problem is just as u say ,if fps more than fps it have this problem

Yes, that's known.

Maybe you should read the topic

  • Thanks 1
Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...