Since it's the datablock, would %obj not be the vehicle calling it?
function gsfseacopterVehicle::OnTrigger(%this, %obj, %triggerNum, %val)
{
if(%val)
{
if(%triggerNum == 2)
{
%vel = %obj.getVelocity();
if(getWord(%vel,2) < 30)
%obj.setVelocity(vectorAdd(%vel,"0 0 3"));
}
}
}
Though I'm not entirely sure that vehicles call ontrigger when the pilot does anyway, so:
package SeaCopterTrigger
{
function Armor::onTrigger(%datablock,%player,%slot,%val)
{
Parent::onTrigger(%datablock,%player,%slot,%val);
%mount = %player.getObjectMount();
if(%slot == 2 && isObject(%mount))
{
if(%val)
{
%mountdatablock = %mount.getDatablock();
if(%mountdatablock.getName() $= "GSFSeaCopterVehicle")
{
%mountdatablock.climbUp(%mount);
}
} else {
cancel(%mount.climbUpSchedule);
}
}
}
};
ActivatePackage(SeaCopterTrigger);
function GSFSeaCopterVehicle::climbUp(%datablock,%vehicle)
{
%vel = %vehicle.getVelocity();
if(getWord(%vel,2) < 20)
{
%vehicle.setVelocity(vectorAdd(%vel,"0 0 1"));
}
%vehicle.climbUpSchedule = %datablock.schedule(50,"climbUp",%vehicle);
}
110% untested but theoretically works provided I didn't make a silly syntax error somewhere.