Difference between revisions of "Grenade Script"
Jump to navigation
Jump to search
(Created page with "Uses two methods within separate states to 'throw' objects at a velocity dependent on how long you hold the mouse button down. <lsl> vector pos; rotation rot; vector offset; v…") |
m (<lsl> tag to <source>) |
||
Line 1: | Line 1: | ||
Uses two methods within separate states to 'throw' objects at a velocity dependent on how long you hold the mouse button down. | Uses two methods within separate states to 'throw' objects at a velocity dependent on how long you hold the mouse button down. | ||
< | <source lang="lsl2"> | ||
vector pos; | vector pos; | ||
rotation rot; | rotation rot; |
Latest revision as of 22:29, 24 January 2015
Uses two methods within separate states to 'throw' objects at a velocity dependent on how long you hold the mouse button down.
<source lang="lsl2"> vector pos; rotation rot; vector offset; vector fwd; integer gPermFlags; vector BULLET_VELOCITY = <2,0,1>; float REPEAT_DELAY = 0.40; string ammo = "grenade"; string throwanim = "avatar_throw_R"; integer on=TRUE;
default
{
state_entry() { gPermFlags = PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_TRACK_CAMERA;
if ( llGetAttached() ) llRequestPermissions(llGetOwner(), gPermFlags); } run_time_permissions(integer perm) { if ((perm & gPermFlags) == gPermFlags) { llTakeControls(CONTROL_ML_LBUTTON, TRUE, FALSE); llOwnerSay("First Person Mode. Click to change to Third Person Mode."); } } touch_end(integer nd) { key DetectedKey= llDetectedKey(0); key OwnerKey= llGetOwner(); if (OwnerKey== DetectedKey) //Ensures only the operator can change the mode. { state two; } } attach(key id) { if (id) llRequestPermissions(id, gPermFlags); else if(id== NULL_KEY) // Things to do when detached. { llStopAnimation(throwanim); llReleaseControls(); llResetScript(); } } changed(integer change) { if(change &(CHANGED_OWNER | CHANGED_INVENTORY)) llResetScript(); }
control(key owner, integer level, integer edge) { if (edge & CONTROL_ML_LBUTTON ) { if(on==TRUE) { llResetTime(); on=FALSE; } else if (on==FALSE) { float factor = llGetTime()+1*3; vector last=factor*BULLET_VELOCITY *llGetCameraRot(); llStartAnimation(throwanim); llRezAtRoot(ammo,llGetCameraPos()+<1.0,0,1.0>*llGetCameraRot(),last ,llGetCameraRot(),10); llSleep(REPEAT_DELAY); on=TRUE; } } }
}
state two {
state_entry() { gPermFlags = PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_TRACK_CAMERA; llRequestPermissions(llGetOwner(), gPermFlags); } run_time_permissions(integer perm) { if ( (perm & gPermFlags) == gPermFlags) { llTakeControls(CONTROL_LBUTTON, TRUE, FALSE); llOwnerSay("Third Person mode. Click to change to First Person Mode."); } } touch_end(integer nd) { key DetectedKey= llDetectedKey(0); key OwnerKey= llGetOwner(); if (OwnerKey== DetectedKey) //Ensures only the operator can change the mode. { state default; } } attach(key id) { if(id== NULL_KEY) // Things to do when detached. { llStopAnimation(throwanim); llReleaseControls(); llResetScript(); } } changed(integer change) { if(change &(CHANGED_OWNER | CHANGED_INVENTORY) ) llResetScript(); }
control(key owner, integer level, integer edge) { if (edge & CONTROL_LBUTTON ) { if(on==TRUE) { llResetTime(); on=FALSE; } else if (on==FALSE) { float factor = llGetTime()+1*3; llStartAnimation(throwanim); pos = llGetPos(); rot = llGetRot(); offset = <1.0,0.0, 2.0>; pos += offset*rot; offset *= rot; rot *= llEuler2Rot(<0, 0, 0>*DEG_TO_RAD); fwd = factor*BULLET_VELOCITY*rot; llRezAtRoot(ammo, pos, fwd, rot, 1); llSleep(REPEAT_DELAY); on=TRUE; } } }
}