Code:
//ZeroFlight XLR8
//hacked together script by Burke Prefect, peices from other people's code.
//NOT RESPONSIBLE... FOR ANYTHING
float speed = 15; // this is starting speed.
set_hover() // this keeps you from falling at extreme altitudes. just 'fly' normally. works in either mode.
{
vector pos = llGetPos();
float ground = llGround(<0,0,0>);
if(llGetAgentInfo(llGetOwner()) & AGENT_FLYING)
{
if((pos.z > 75) && (pos.z > (ground + 35)))
{
llSetForce(<0,0,9.8> * llGetMass(), FALSE);
}
else
{
llSetForce(<0,0,0>, FALSE);
}
}
else
{
llSetForce(<0,0,0>, FALSE);
}
}
default // this is where the script starts off. it's not active, it's just waiting for a command.
{
state_entry()
{
key id = llGetOwner();
llListen(0,"",id,"");
llSetTimerEvent(.5);
llReleaseControls();
}
timer()
{
set_hover();
}
listen( integer channel, string name, key id, string message ) {
if (message == "fly")
state freakpack;
}
}
//// By making 'freakpack' it's own state, we can control it much easier.
state freakpack
{
state_entry()
{
llSetTimerEvent(.5);
llListen(0,"",llGetOwner(),"");
llRequestPermissions(llGetOwner(),PERMISSION_TAKE_CONTROLS);
}
// on_rez(integer total_number)
//{llResetScript();}
touch_start(integer total_number)
{
if (llDetectedKey(0) == llGetOwner())
{
llReleaseControls();
state default;
}
}
timer()
{
set_hover();
}
run_time_permissions(integer perm)
{
if(perm & PERMISSION_TAKE_CONTROLS)
{
llTakeControls(CONTROL_FWD|CONTROL_BACK|CONTROL_LEFT|CONTROL_RIGHT|CONTROL_UP|CONTROL_DOWN,TRUE,TRUE);
}
}
control(key av, integer level, integer edge)
{
if(level & CONTROL_UP)
{
llApplyImpulse(<0,0,speed*3>,FALSE);
}
if(level & CONTROL_DOWN)
{
llApplyImpulse(<0,0,-speed*3>,FALSE);
}
if(level & CONTROL_LEFT)
{
if(llGetAgentInfo(llGetOwner()) & AGENT_FLYING)
{ llApplyImpulse(<0,speed,0>,TRUE);}
}
if(level & CONTROL_RIGHT)
{
if(llGetAgentInfo(llGetOwner()) & AGENT_FLYING)
{llApplyImpulse(<0,-speed,0>,TRUE);}
}
if(level & CONTROL_FWD)
{
if(llGetAgentInfo(llGetOwner()) & AGENT_FLYING)
{llApplyImpulse(<speed,0,0>,TRUE);}
}
if(level & CONTROL_BACK)
{
if(llGetAgentInfo(llGetOwner()) & AGENT_FLYING)
{llApplyImpulse(<-speed,0,0>,TRUE);}
}
}
timer()
{
if(llGetAgentInfo(llGetOwner()) & AGENT_FLYING)
set_hover();
else {
llReleaseControls();
state default;
}
}
changed(integer change)
{
llReleaseControls();
state default;
}
listen(integer channel, string name, key id, string m)
{
string ml = llToLower(m);
list parsed = llParseString2List(ml,[" "],[]);
if(llList2String(parsed,0) == "speed")
{
speed = (float)llList2String(parsed,1);
}
if (m=="fly")
{
llReleaseControls();
state default;
}
}
}