I'm making a script that lets player hover in one spot, i.e. hang from a ledge. I was using just setVelocity before, but it was pretty shaky, so I decided to try zones. The problem now is that every 2-4 seconds it says ghosting, and the zones stop creating temporarily. The solution I was thinking of is to create one zone, and transform it to the player's location continuously. I do not, however, know how to do this. Here's my code so far: function Player::GrabPlace(%obj)
{
	if(%obj.isJumping)
	{
		%obj.schedule(5,HoldPlace);
		%obj.addVelocity(vectorScale(%obj.getForwardVector(),1));
		%vel = %obj.getVelocity();
		%upv = getWord(%vel,2);
		if(%upv < 0.645)
		{
			%obj.setVelocity("0 0 0.655");
		}
		if(!%obj.isAnim)
		{
			%obj.playthread(3,fall);
			%obj.playthread(2,armreadyboth);
			%obj.changedatablock(PlayerSleepingDogsClimb);
			%obj.isAnim=1;
		}
	}
}
function Player::GrabZone(%obj)
{
	if(%obj.isJumping)
	{
		%zoneShape = "1.5 1.5 3";
		%position = %obj.getPosition();
		%newZone = new PhysicalZone()
		{
			velocityMod = "0.0";
			gravityMod = "0.0";
			extraDrag = "0";	
		};
		missionCleanup.add(%newZone);
		%newZone.setTransform(%position);
		%newZone.schedule(5,delete);
	}
}
function Player::HoldPlace(%obj)
{
    %start = %obj.getHackPosition();
    %beam = vectorScale(%obj.getForwardVector(),0.65);
	%end = vectorAdd(%start, %beam);
	%ray = containerRayCast(%start, %end, $TypeMasks::fxBrickObjectType, %obj);
	if(!isObject(%col = firstWord(%ray)))
	{
		%obj.schedule(5,HoldPlace);
	}
	else
	{
		%start = %obj.getEyePoint();
		%beam = vectorScale(%obj.getForwardVector(),0.55);
		%end = vectorAdd(%start, %beam);
		%ray = containerRayCast(%start, %end, $TypeMasks::fxBrickObjectType, %obj);
		if(!isObject(%col = firstWord(%ray)))
		{
			%obj.GrabPlace();
			%obj.GrabZone();
		}
		else
		{
			%obj.schedule(5,HoldPlace);
		}
	}
}