Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- integer gClpSz = 7;
- float gRldTm = 1.4;
- float gVlcty = 100.0;
- float gAccrcy = 0.0; // 0.01 very acc, 10 extremely inaccurate
- float gRzSprd = 0.0; // how bullets will spread when rezzed
- vector gOffSt = <0.6, -0.03, 0.0>;
- // +x = forward
- // +y = left
- // +z = up
- integer gDly = .05;
- integer gLstnChnl = 5;
- integer gHsPrms;
- integer gLstn;
- integer gAltLstn;
- integer gActv;
- integer gDactv;
- integer gAmmLft;
- integer gHlstrd;
- integer gLstFrTm;
- integer gDsrdPrms;
- float gUsVlcty;
- integer gUsClp;
- integer gRldng;
- string gRldAnim = "3301e50b-d928-4aec-8196-c078ab8e7863";
- string gRldSnd = "243ebd91-733d-4757-8238-0ca114d09a0a";
- string gFrSnd = "c46d5715-0ba3-4e40-8bff-4c77f4d9f24b";
- string gActAnim = "9124673a-87fa-466a-b75f-6f9118aa7489";
- string gIdlAnim = "53953053-6692-499d-a68f-905aee347bcd";
- uInit()
- {
- gDsrdPrms = (PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_TRACK_CAMERA);
- gLstn = llListen( 0, "", llGetOwner(), "" );
- gAltLstn = llListen( gLstnChnl, "", llGetOwner(), "" );
- gAmmLft = gClpSz;
- gLstFrTm = 0;
- gUsClp = gClpSz;
- gRldng = FALSE;
- uRqstPrms( llGetPermissions() );
- uHlstr();
- }
- uFire()
- {
- if (!gHlstrd && gAmmLft > 0)
- {
- vector vSprd = <(0 - (gRzSprd / 2)) + llFrand( gRzSprd ), (0 - (gRzSprd / 2)) + llFrand( gRzSprd ), (0 - (gRzSprd / 2)) + llFrand( gRzSprd )>;
- rotation vRtBtwn = llRotBetween( <0.01, 0.01, 0.01>, <0.01, 0.01, 0.01> + (DEG_TO_RAD * gAccrcy * (vSprd * llGetCameraRot())) );
- rotation vMdRt = llGetCameraRot() / <vRtBtwn.x * llPow( -1, llRound( llFrand( 1 ) ) ), vRtBtwn.y * llPow( -1, llRound( llFrand( 1 ) ) ), vRtBtwn.z * llPow( -1, llRound( llFrand( 1 ) ) ), vRtBtwn.s * llPow( -1, llRound( llFrand( 1 ) ) )>;
- llRezAtRoot( llGetInventoryName( INVENTORY_OBJECT, 0 ), llGetCameraPos() + (gOffSt + vSprd) * llGetCameraRot(), llRot2Fwd( vMdRt ) * gVlcty, vMdRt, 100 );
- gLstFrTm = llGetUnixTime();
- gAmmLft -= 1;
- if (gAmmLft <= 0)
- {
- gAmmLft = 0;
- uStFltng();
- uRld();
- }
- uStFltng();
- }
- }
- uRqstPrms( integer vPerms )
- {
- gHsPrms = TRUE;
- if (vPerms != gDsrdPrms || llGetPermissionsKey() != llGetOwner())
- {
- gHsPrms = FALSE;
- llRequestPermissions( llGetOwner(), gDsrdPrms );
- }
- else
- {
- llTakeControls( CONTROL_ML_LBUTTON, TRUE, TRUE );
- }
- }
- string uGtTxtStrng()
- {
- return "[ " + (string)gAmmLft + " / " + (string)gUsClp + " ]\n[ semi ]";
- }
- uStFltng()
- {
- vector vClr = <41,219,0>;
- if (gAmmLft <= gUsClp / 3)
- vClr = <219,216,0>;
- llSetText( uGtTxtStrng(), vClr / 255.0, 1 );
- }
- uHlstr()
- {
- llListenRemove( gLstn );
- llListenRemove( gAltLstn );
- gLstn = llListen( 0, "", llGetOwner(), "draw" );
- gAltLstn = llListen( gLstnChnl, "", llGetOwner(), "draw" );
- llSetTimerEvent( 0 );
- llSetLinkAlpha( LINK_SET, 0, ALL_SIDES );
- gHlstrd = TRUE;
- if (gHsPrms)
- {
- llStopAnimation( gIdlAnim );
- llStopAnimation( gActAnim );
- }
- llSetText( "", <1,1,1>, 1 );
- }
- uDrw()
- {
- llListenRemove( gLstn );
- llListenRemove( gAltLstn );
- gLstn = llListen( 0, "", llGetOwner(), "" );
- gAltLstn = llListen( gLstnChnl, "", llGetOwner(), "" );
- llSetTimerEvent( 1 );
- llSetLinkAlpha( LINK_SET, 1, ALL_SIDES );
- uStFltng();
- gDactv = FALSE;
- gHlstrd = FALSE;
- }
- uRld()
- {
- if (gAmmLft == gUsClp || gRldng)
- return;
- gRldng = TRUE;
- llSetText( "[ reloading ]", <255, 60, 0> / 255.0, 1 );
- llStopSound();
- llPlaySound( gRldSnd, 1 );
- if (gHsPrms && gRldAnim != "")
- {
- llStartAnimation( gRldAnim );
- }
- llSleep( gRldTm );
- gAmmLft = gUsClp;
- uStFltng();
- gRldng = FALSE;
- }
- default
- {
- state_entry()
- {
- uInit();
- llOwnerSay( "Say 'draw' or 'sling' in public chat, or on channel " + (string)gLstnChnl + "." );
- }
- attach( key vId )
- {
- if (vId)
- {
- llOwnerSay("Test");
- uInit();
- llOwnerSay( "Say 'draw' or 'sling' in public chat, or on channel " + (string)gLstnChnl + "." );
- }
- }
- run_time_permissions( integer vPerms )
- {
- uRqstPrms( vPerms );
- }
- listen( integer vChnl, string vName, key vId, string vMsg )
- {
- vMsg = llToUpper( llStringTrim( vMsg, STRING_TRIM ) );
- if ("DRAW" == vMsg)
- {
- uDrw();
- return;
- }
- if ("HOLSTER" == vMsg || "SLING" == vMsg)
- {
- uHlstr();
- return;
- }
- if ("RELOAD" == vMsg || "R" == vMsg)
- {
- uRld();
- return;
- }
- }
- control( key vId, integer vLvl, integer vEdg )
- {
- integer vStrt = ~vLvl & vEdg;
- if ((llGetUnixTime() - gLstFrTm) < gDly )
- return;
- if (gRldng)
- return;
- if ((vStrt & CONTROL_ML_LBUTTON) && !gRldng)
- {
- llTriggerSound( gFrSnd, 1 );
- uFire();
- }
- }
- changed( integer vChg )
- {
- if (CHANGED_OWNER & vChg)
- {
- llResetScript();
- }
- }
- timer()
- {
- if ((llGetAgentInfo( llGetOwner() ) & AGENT_MOUSELOOK) && !gActv && !gHlstrd)
- {
- llStopAnimation( gIdlAnim );
- llStartAnimation( gActAnim );
- gActv = TRUE;
- gDactv = FALSE;
- }
- else if (!(llGetAgentInfo( llGetOwner() ) & AGENT_MOUSELOOK) && !gDactv && !gHlstrd)
- {
- llStopAnimation( gActAnim );
- llStartAnimation( gIdlAnim );
- gDactv = TRUE;
- gActv = FALSE;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement