Blockland Forums > Modification Help
Syntax Error in Script
Pew446:
--- Quote from: Kalphiter on June 12, 2010, 10:03:32 PM ---1. Pew is stupid, ignore him
2. there are two checks to see if the z velocity is less than -20
3. Player::getVelocity should be Player::onCollision, and should be parented
Player::getVelocity makes no sense, it's not an event and is only called when other add-ons need to get the velocity.
4. tumble isn't closed? That might just be the snip of the whole code.
--- End quote ---
:cookieMonster:
Audax:
Thank you Kalphiter. There are no more syntax errors. The script executes, and is enabled. There is one problem though. While I am falling, and my velocity probally has reached less than or equal to -20, I do not tumble. Here is the code, any idea what is not making me tumble?
--- Code: ---package TumbleOnFall
{
function Player::onCollision(%this,%obj,%col,%pos,%speed)
{
if(getWord(%obj.onCollision(),2) <= -20)
tumble(%obj,2500);
Parent::onCollision(%this,%obj,%col,%pos,%speed);
}
};
function tumble(%obj, %time)
{
//do not tumble non-players
if(!(%obj.getType() & $TypeMasks::PlayerObjectType))
return;
//do not tumble dead people
if(%obj.getDamageLevel() >= 1.0)
return;
//mount the object on a new deathvehicle for %time milliseconds
%currentVehicle = %obj.getObjectMount();
%client = %obj.client;
%newcar = new WheeledVehicle()
{
dataBlock = deathVehicle;
client = %client;
initialPosition = %posX @ " " @ %posY @ " " @ %posZ;
};
MissionCleanup.add(%newcar);
//%newcar = %client.tumbleVehicle;
%newcar.setVelocity("0 0 0");
if(!%newcar)
return;
//neutralize current velocity
%newcar.applyImpulse( %newcar.getPosition(), vectorScale(%newcar.getVelocity() * -1, %newcar.getDataBlock().mass) );
//error("player tumbling!");
%obj.canDismount = false;
if(%currentVehicle && (%currentVehicle.getDataBlock().getName() $= "skiVehicle") )
{
//%obj.client.setControlObject(%obj);
//match ski vehicle
//neutralize velocity first
%newcar.setTransform(%currentVehicle.getTransform());
%newcar.applyImpulse( %newcar.getPosition(), vectorScale(%currentVehicle.getVelocity(), %newcar.getDataBlock().mass) );
%newcar.mountObject(%obj, 0);
%currentVehicle.setTransform("0 0 -1000");
%currentVehicle.schedule(500, delete);
}
else
{
//match player
//error("transform = ",%obj.getTransform());
%newcar.setTransform(%obj.getTransform());
%newcar.applyImpulse( %newcar.getPosition(), vectorScale(%obj.getVelocity(), %newcar.getDataBlock().mass) );
//%newcar.setTransform(%obj.getTransform());
//%obj.setTransform("0 0 0 0 0 1 0");
%newcar.mountObject(%obj, 0);
//error("not skiing");
//error("transform = ",%obj.getTransform());
}
//definitely delete after 45 seconds
%newcar.schedule(45 * 1000, delete);
%newcar.schedule(2000, tumbleCheck);
%client.camera.setMode("Corpse",%obj);
%client.setControlObject(%client.camera);
//remove %player.istumbling after a we stop
//schedule(%time, %obj, stopTumble, %obj);
//%nextTumbleVehicle = new WheeledVehicle()
//{
// dataBlock = deathVehicle;
// client = %client;
// initialPosition = %posX @ " " @ %posY @ " " @ %posZ;
//};
//%obj.client.tumbleVehicle = %nextTumbleVehicle;
//%nextTumbleVehicle.setTransform("0 0 -90");
//%newcar.schedule(%time, unmountobject, %obj);
//%obj.schedule(%time, setcontrolobject, 0);
//%newcar.schedule(%time + 250, setTransform, "0 0 -90");
}
activatePackage(TumbleOnFall);
--- End code ---
Headcrab Zombie:
1. onCollision is only called when you hit something, so you'll tumble when you hit something if your falling faster than 20, not when you get to 20
2. I don't remember exactly what %obj is in this function, but I know %this would definitely be the player object, so try changing all %obj to %this
3. Did you change anything with the tumble function? If not, you don't need it there.
Audax:
--- Code: ---package TumbleOnFall
{
function Player::onCollision(%this,%obj,%col,%pos,%speed)
{
if(getWord(%this.onCollision(),2) <= -20)
tumble(%this,2500);
Parent::onCollision(%this,%obj,%col,%pos,%speed);
}
};
activatePackage(TumbleOnFall);
--- End code ---
Even when I hit the ground falling faster than -20 I did not tumble. There are no more syntax errors, I'm just not tumbling.
--- Quote from: Headcrab Zombie on June 13, 2010, 11:02:57 AM ---1. onCollision is only called when you hit something, so you'll tumble when you hit something if your falling faster than 20, not when you get to 20
--- End quote ---
That's another problem, I need to find something that would work like 'isFalling'. So when the player is falling, once their velocity is less than or equal to -20, they tumble.
Headcrab Zombie:
You could try packaging ShapeBase::PlayThread, and then checking if the animation played is 'fall'.
But I don't know if you can adjust the speed at which that animation automatically plays.
That's the only other thing I could think of, if that won't work you'd need to do a repeating function that checks all clients like I suggested earlier.