Post by probaddie on Nov 13, 2013 11:37:35 GMT -5
Marvel4 has just discovered the re-emergence in Ghosts of an exploit that existed in Modern Warfare 3 on PC. It allows you to receive the accuracy bonus you'd normally get with LMGs and SRs by going prone or crouching but while remaining upright:
To execute the bug, you simply need to go prone by holding the "Change Stance" key. Then, you raise your stance using one of those same commands. (A command to go prone while already prone will make you stand again.) The game will give you the accuracy bonus when you go down, but will not update your accuracy when you come back up, thus leaving you with the accuracy bonus. The relevant GSC script - taken from Modern Warfare 3 and assumed to still be active in Ghosts - that allows this exploit is here:
The bug is highlighted in red: there need to be specific calls to "notifyOnPlayerCommand" that cover the "+togglecrouch", "toggleprone", "+movedown" and "+prone" commands. In other words, amend the code in red to also contain:
Note that, if someone were able to map any of these to a button on a console controller, then the bug could be exploited there, too.
Edit: Fixed a mistake pointed out by Mousey.
To execute the bug, you simply need to go prone by holding the "Change Stance" key. Then, you raise your stance using one of those same commands. (A command to go prone while already prone will make you stand again.) The game will give you the accuracy bonus when you go down, but will not update your accuracy when you come back up, thus leaving you with the accuracy bonus. The relevant GSC script - taken from Modern Warfare 3 and assumed to still be active in Ghosts - that allows this exploit is here:
stanceRecoilAdjuster()
{
self endon ( "death" );
self endon ( "disconnect" );
self notifyOnPlayerCommand( "adjustedStance", "+stance" );
self notifyOnPlayerCommand( "adjustedStance", "+goStand" );
for ( ;; )
{
self waittill_any( "adjustedStance", "sprint_begin" );
weapClass = getWeaponClass( self GetCurrentPrimaryWeapon() );
if ( weapClass != "weapon_lmg" && weapClass != "weapon_sniper" )
continue;
wait (.5 ); //necessary to ensure proper stance is given and to balance to ensure duck diving isnt a valid tactic
self.stance = self GetStance();
if ( self.stance == "prone" )
{
if ( weapClass == "weapon_lmg" )
self setRecoilScale( 0,40 );
else if ( weapClass == "weapon_sniper" )
self setRecoilScale( 0,60 );
else
self setRecoilScale();
}
else if ( self.stance == "crouch" )
{
if ( weapClass == "weapon_lmg" )
self setRecoilScale( 0,10 );
else if ( weapClass == "weapon_sniper" )
self setRecoilScale( 0,30 );
else
self setRecoilScale();
}
else
{
self setRecoilScale();
}
}
}
{
self endon ( "death" );
self endon ( "disconnect" );
self notifyOnPlayerCommand( "adjustedStance", "+stance" );
self notifyOnPlayerCommand( "adjustedStance", "+goStand" );
for ( ;; )
{
self waittill_any( "adjustedStance", "sprint_begin" );
weapClass = getWeaponClass( self GetCurrentPrimaryWeapon() );
if ( weapClass != "weapon_lmg" && weapClass != "weapon_sniper" )
continue;
wait (.5 ); //necessary to ensure proper stance is given and to balance to ensure duck diving isnt a valid tactic
self.stance = self GetStance();
if ( self.stance == "prone" )
{
if ( weapClass == "weapon_lmg" )
self setRecoilScale( 0,40 );
else if ( weapClass == "weapon_sniper" )
self setRecoilScale( 0,60 );
else
self setRecoilScale();
}
else if ( self.stance == "crouch" )
{
if ( weapClass == "weapon_lmg" )
self setRecoilScale( 0,10 );
else if ( weapClass == "weapon_sniper" )
self setRecoilScale( 0,30 );
else
self setRecoilScale();
}
else
{
self setRecoilScale();
}
}
}
The bug is highlighted in red: there need to be specific calls to "notifyOnPlayerCommand" that cover the "+togglecrouch", "toggleprone", "+movedown" and "+prone" commands. In other words, amend the code in red to also contain:
self notifyOnPlayerCommand( "adjustedStance", "+stance" );
self notifyOnPlayerCommand( "adjustedStance", "+goStand" );
self notifyOnPlayerCommand( "adjustedStance", "+togglecrouch" );
self notifyOnPlayerCommand( "adjustedStance", "toggleprone" );
self notifyOnPlayerCommand( "adjustedStance", "+movedown" );
self notifyOnPlayerCommand( "adjustedStance", "+prone" );
self notifyOnPlayerCommand( "adjustedStance", "+goStand" );
self notifyOnPlayerCommand( "adjustedStance", "+togglecrouch" );
self notifyOnPlayerCommand( "adjustedStance", "toggleprone" );
self notifyOnPlayerCommand( "adjustedStance", "+movedown" );
self notifyOnPlayerCommand( "adjustedStance", "+prone" );
Note that, if someone were able to map any of these to a button on a console controller, then the bug could be exploited there, too.
Edit: Fixed a mistake pointed out by Mousey.