Wait what's wrong with Client_OrbShift? I don't think it actually has this issue.
The package:
package orbshifting
{
function dropcameraatplayer(%x)
{
if(!$OrbShift_VersionChecked)
{
$OrbShift_VersionChecked = true;
OrbShift_versioncheck(false);
}
if(%x)
$OrbShift::Player = serverconnection.getcontrolobject();
parent::dropcameraatplayer(%x);
}
function shiftbrickaway(%x)
{
if($OrbShift::override)
return parent::shiftbrickaway(%x);
if(!%x && $OrbShift::Away !$= "")
{
OrbShift_activatedirection($OrbShift::Away, false);
$OrbShift::Away = "";
return;
}
$OrbShift::Away = "";
if(%x && serverconnection.getcontrolobject().getclassname() $= "camera" && isObject($OrbShift::Player))
{
%camvec = OrbShift_getthisdirection(serverconnection.getcontrolobject().getforwardvector());
%plvec = OrbShift_getthisdirection($OrbShift::Player.getforwardvector());
if(mabs(%camvec - %plvec) == 2)
%dir = 2;
else if(%camvec == %plvec+1 || %camvec == 0 && %plvec == 3) //ugly im sorry :(
%dir = 1;
else if(%camvec == %plvec)
%dir = 0;
else
%dir = 3;
$OrbShift::Away = %dir;
OrbShift_activatedirection($Orbshift::Away, true);
}
else
return parent::shiftbrickaway(%x);
}
function shiftbricktowards(%x)
{
if($OrbShift::override)
return parent::shiftbricktowards(%x);
if(!%x && $OrbShift::Towards !$= "")
{
OrbShift_activatedirection($OrbShift::Towards, false);
$OrbShift::Towards = "";
return;
}
$OrbShift::Towards = "";
if(%x && serverconnection.getcontrolobject().getclassname() $= "camera" && isObject($OrbShift::Player))
{
%camvec = OrbShift_getthisdirection(serverconnection.getcontrolobject().getforwardvector());
%plvec = OrbShift_getthisdirection($OrbShift::Player.getforwardvector());
if(mabs(%camvec - %plvec) == 2)
%dir = 0;
else if(%camvec == %plvec+1 || %camvec == 0 && %plvec == 3) //ugly im sorry :(
%dir = 3;
else if(%camvec == %plvec)
%dir = 2;
else
%dir = 1;
$OrbShift::Towards = %dir;
OrbShift_activatedirection($Orbshift::Towards, true);
}
else
return parent::shiftbrickTowards(%x);
}
function shiftbrickright(%x)
{
if($OrbShift::override)
return parent::shiftbrickright(%x);
if(!%x && $OrbShift::Right !$= "")
{
OrbShift_activatedirection($Orbshift::Right, false);
$OrbShift::Right = "";
return;
}
$OrbShift::Right = "";
if(%x && serverconnection.getcontrolobject().getclassname() $= "camera" && isObject($OrbShift::Player))
{
%camvec = OrbShift_getthisdirection(serverconnection.getcontrolobject().getforwardvector());
%plvec = OrbShift_getthisdirection($OrbShift::Player.getforwardvector());
if(mabs(%camvec - %plvec) == 2)
%dir = 1;
else if(%camvec == %plvec+1 || %camvec == 0 && %plvec == 3) //ugly im sorry :(
%dir = 0;
else if(%camvec == %plvec)
%dir = 3;
else
%dir = 2;
$OrbShift::Right = %dir;
OrbShift_activatedirection($Orbshift::Right, true);
}
else
return parent::shiftbrickright(%x);
}
function shiftbrickleft(%x)
{
if($OrbShift::override)
return parent::shiftbrickleft(%x);
if(!%x && $OrbShift::Left !$= "")
{
OrbShift_activatedirection($Orbshift::Left, false);
$OrbShift::Left = "";
return;
}
$OrbShift::Left = "";
if(%x && serverconnection.getcontrolobject().getclassname() $= "camera" && isObject($OrbShift::Player))
{
%camvec = OrbShift_getthisdirection(serverconnection.getcontrolobject().getforwardvector());
%plvec = OrbShift_getthisdirection($OrbShift::Player.getforwardvector());
if(mabs(%camvec - %plvec) == 2)
%dir = 3;
else if(%camvec == %plvec+1 || %camvec == 0 && %plvec == 3) //ugly im sorry :(
%dir = 2;
else if(%camvec == %plvec)
%dir = 1;
else
%dir = 0;
$OrbShift::Left = %dir;
OrbShift_activatedirection($Orbshift::Left, true);
}
else
return parent::shiftbrickleft(%x);
}
};
activatepackage(orbshifting);