Difference between revisions of "Gun Script"

From Second Life Wiki
Jump to navigation Jump to search
(Cleaned up. Tightened perms checking. Removed erroneous camera references. Added sanity checks. (With assistance from Innula Zenovka))
(Re-instated llGetCameraPos() and llGetCameraRot() which I'm advised is the preferred approach. Tested (!!). Sorry about the 8-column tabbing)
Line 17: Line 17:
return;
return;
}
}
gPermFlags = PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS;
gPermFlags = PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_TRACK_CAMERA;


if ( llGetAttached() )
if ( llGetAttached() )
Line 52: Line 52:
control(key id, integer held, integer change)
control(key id, integer held, integer change)
{
{
rotation Rot = llGetRot();
rotation Rot = llGetCameraRot();
if ( held & change & CONTROL_ML_LBUTTON)
if ( held & change & CONTROL_ML_LBUTTON)
{
{
Line 58: Line 58:
llPlaySound(gShootSound, 1.0);
llPlaySound(gShootSound, 1.0);


llRezAtRoot(gBullet, llGetPos() + <1.5, 0.0, 0.0>*Rot, gVelocity*llRot2Fwd(Rot), Rot, 10);
llRezAtRoot(gBullet, llGetCameraPos() + <1.5, 0.0, 0.0>*Rot, gVelocity*llRot2Fwd(Rot), Rot, 10);
llSleep(gReloadTime);
llSleep(gReloadTime);
}
}

Revision as of 05:59, 9 December 2012

Uses tons of useful functions and a great example for those starting out. I've had tons of fun with this and all its variants i've made in my time here in Second Life. Obviously only can be used were you can rez and run scripts. Corrected and improved.

<lsl> float gVelocity = 15.0; float gReloadTime = 0.30; string gShootSound = "gun"; string gShootAnimation = "hold_R_bazooka"; string gBullet = "bullet 1.0"; integer gPermFlags;

default { state_entry() { if (llGetInventoryType(gBullet) != INVENTORY_OBJECT) { // sanity check llOwnerSay("This needs a physical object called " + gBullet + " in it to work"); return; } gPermFlags = PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_TRACK_CAMERA;

if ( llGetAttached() ) llRequestPermissions(llGetOwner(), gPermFlags); }

attach(key id) { if (id) llRequestPermissions(id, gPermFlags); else { llStopAnimation(gShootAnimation); llReleaseControls(); } }

changed(integer change) { if (change & (CHANGED_OWNER | CHANGED_INVENTORY) ) llResetScript(); }

run_time_permissions(integer perm) { if ( (perm & gPermFlags) == gPermFlags) // ensure ALL required permissions have been granted { llTakeControls(CONTROL_ML_LBUTTON, TRUE, FALSE); llStartAnimation(gShootAnimation); llOwnerSay("Gun is ready. Enter mouselook and use left click to fire!"); } }

control(key id, integer held, integer change) { rotation Rot = llGetCameraRot(); if ( held & change & CONTROL_ML_LBUTTON) { if (llGetInventoryType(gShootSound) == INVENTORY_SOUND) llPlaySound(gShootSound, 1.0);

llRezAtRoot(gBullet, llGetCameraPos() + <1.5, 0.0, 0.0>*Rot, gVelocity*llRot2Fwd(Rot), Rot, 10); llSleep(gReloadTime); } } } </lsl>