Author Topic: code flips player upside down, any idea why?  (Read 789 times)

function Player::startSkiJumping(%obj)
{
   //make a new ski vehicle and mount the player on it
   %client = %obj.client;
   %position = %obj.getTransform();
   %posX = getword(%position, 0);
   %posY = getword(%position, 1);
   %posZ = getword(%position, 2);
   %rot = getWords(%position, 3, 8);

   %posZ += 0.3;

   %vel = %obj.getVelocity();

   %newcar = new WheeledVehicle()
   {
      dataBlock = skijumpvehicle;
      client = %client;
      initialPosition = %posX @ " " @ %posY @ " " @ %posZ;
   };
   %newcar.setVelocity(%vel);
   %newcar.setTransform(%posX @ " " @ %posY @ " " @ %posZ @ " " @ %rot);
   %newcar.schedule(250, mountObject, %obj, 0);
}


function ParkourJumpCheckImage::onCheck(%this,%obj,%slot)
{
   %pos = %obj.getPosition();
   %targets = $TypeMasks::FxBrickAlwaysObjectType | $TypeMasks::PlayerObjectType | $TypeMasks::StaticObjectType | $TypeMasks::TerrainObjectType | $TypeMasks::VehicleObjectType;
   %ray = ContainerRayCast(%pos, vectorAdd(%pos,"0 0 -0.3"), %targets, %obj);
   %col = getWord(%ray,0);
        
   if(!isObject(%col))
      return;
   if(%col.getType() & $TypeMasks::FxBrickAlwaysObjectType && !%col.isColliding())
      return;
   
   %obj.unMountImage(%slot);
}

package ParkourPhysics
{
   function Armor::onTrigger(%this,%obj,%slot,%on)
   {
      %r = Parent::onTrigger(%this,%obj,%slot,%on);
      if(%slot == 2 && %on)
      {
         %bat = 0;
         for(%i=0;%i<%this.maxTools;%i++)
         {
            if(%obj.tool[%i] == TF2BatItem.getID())
            {
               %bat = 1;
               break;
            }
         }
         if(%obj.getMountedImage(2) == ParkourJumpCheckImage.getID())
            return %r;
        
         %pos = %obj.getPosition();
         %targets = $TypeMasks::FxBrickAlwaysObjectType | $TypeMasks::PlayerObjectType | $TypeMasks::StaticObjectType | $TypeMasks::TerrainObjectType | $TypeMasks::VehicleObjectType;
         %ray = ContainerRayCast(%pos, vectorAdd(%pos,"0 0 -0.3"), %targets, %obj);
         %col = getWord(%ray,0);
        
         if(isObject(%col) && (!(%col.getType() & $TypeMasks::FxBrickAlwaysObjectType) || %col.isColliding()))
            return %r;
        
         %obj.mountImage(ParkourJumpCheckImage,2);
    %obj.setVelocity("0 0 0");
         %obj.applyImpulse("0 0 0","0 0" SPC %obj.dataBlock.jumpForce);
    %obj.schedule(0,"startSkiJumping");
         %obj.playThread(3,jump);
        
         //Only change if you're a 'standard' player type and not already using a different datablock
         if(fileName(%obj.dataBlock.shapeFile) $= "m.dts" && %obj.dataBlock.getID() != PlayerBatJumpArmor.getID() && %obj.getState() !$= "Dead" && %obj.altDataNum <= 1)
         {
            %health = %obj.dataBlock.maxDamage - %obj.getDamageLevel();
            %flash = %obj.getDamageFlash();
            %obj.pushDatablock(PlayerBatJumpArmor.getID());
            %obj.resetTF2Data = %obj.schedule(200,popDatablock,PlayerBatJumpArmor.getID());
         }
      }
      return %r;
   }
};
activatePackage(ParkourPhysics);

player would flip occasionally instead of entering flip mode normally.
« Last Edit: October 08, 2012, 11:54:33 AM by Ark5 »

Code: [Select]
function Player::startSkiJumping(%obj)
{
//make a new ski vehicle and mount the player on it
%client = %obj.client;
%position = %obj.getTransform();
%posX = getword(%position, 0);
%posY = getword(%position, 1);
%posZ = getword(%position, 2);
%rot = getWords(%position, 3, 8);

%posZ += 0.3;

%vel = %obj.getVelocity();

%newcar = new WheeledVehicle()
{
dataBlock = skijumpvehicle;
client = %client;
initialPosition = %posX @ " " @ %posY @ " " @ %posZ;
};
%newcar.setVelocity(%vel);
%newcar.setTransform(%posX @ " " @ %posY @ " " @ %posZ @ " " @ %rot);
%newcar.schedule(250, mountObject, %obj, 0);
}


function ParkourJumpCheckImage::onCheck(%this,%obj,%slot)
{
%pos = %obj.getPosition();
%targets = $TypeMasks::FxBrickAlwaysObjectType | $TypeMasks::PlayerObjectType | $TypeMasks::StaticObjectType | $TypeMasks::TerrainObjectType | $TypeMasks::VehicleObjectType;
%ray = ContainerRayCast(%pos, vectorAdd(%pos,"0 0 -0.3"), %targets, %obj);
%col = getWord(%ray,0);
        
if(!isObject(%col))
return;
if(%col.getType() & $TypeMasks::FxBrickAlwaysObjectType && !%col.isColliding())
return;

%obj.unMountImage(%slot);
}

package ParkourPhysics
{
   function Armor::onTrigger(%this,%obj,%slot,%on)
   {
      %r = Parent::onTrigger(%this,%obj,%slot,%on);
      if(%slot == 2 && %on)
      {
         %bat = 0;
         for(%i=0;%i<%this.maxTools;%i++)
         {
            if(%obj.tool[%i] == TF2BatItem.getID())
            {
               %bat = 1;
               break;
            }
         }
         if(%obj.getMountedImage(2) == ParkourJumpCheckImage.getID())
            return %r;
        
         %pos = %obj.getPosition();
         %targets = $TypeMasks::FxBrickAlwaysObjectType | $TypeMasks::PlayerObjectType | $TypeMasks::StaticObjectType | $TypeMasks::TerrainObjectType | $TypeMasks::VehicleObjectType;
         %ray = ContainerRayCast(%pos, vectorAdd(%pos,"0 0 -0.3"), %targets, %obj);
         %col = getWord(%ray,0);
        
         if(isObject(%col) && (!(%col.getType() & $TypeMasks::FxBrickAlwaysObjectType) || %col.isColliding()))
            return %r;
        
         %obj.mountImage(ParkourJumpCheckImage,2);
%obj.setVelocity("0 0 0");
         %obj.applyImpulse("0 0 0","0 0" SPC %obj.dataBlock.jumpForce);
%obj.schedule(0,"startSkiJumping");
         %obj.playThread(3,jump);
        
         //Only change if you're a 'standard' player type and not already using a different datablock
         if(fileName(%obj.dataBlock.shapeFile) $= "m.dts" && %obj.dataBlock.getID() != PlayerBatJumpArmor.getID() && %obj.getState() !$= "Dead" && %obj.altDataNum <= 1)
         {
            %health = %obj.dataBlock.maxDamage - %obj.getDamageLevel();
            %flash = %obj.getDamageFlash();
            %obj.pushDatablock(PlayerBatJumpArmor.getID());
            %obj.resetTF2Data = %obj.schedule(200,popDatablock,PlayerBatJumpArmor.getID());
         }
      }
      return %r;
   }
};
activatePackage(ParkourPhysics);
Yeah for whatever reason, the player sometimes flips automatically, instead of you having full control over the flip.