Advertisement
L1ghtsh0w

Untitled

Jan 11th, 2017
966
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. integer gClpSz = 7;
  2. float gRldTm = 1.4;
  3. float gVlcty = 100.0;
  4. float gAccrcy = 0.0; // 0.01 very acc, 10 extremely inaccurate
  5. float gRzSprd = 0.0; // how bullets will spread when rezzed
  6. vector gOffSt = <0.6, -0.03, 0.0>;
  7. // +x = forward
  8. // +y = left
  9. // +z = up
  10. integer gDly = .05;
  11. integer gLstnChnl = 5;
  12.  
  13. integer gHsPrms;
  14. integer gLstn;
  15. integer gAltLstn;
  16. integer gActv;
  17. integer gDactv;
  18. integer gAmmLft;
  19. integer gHlstrd;
  20. integer gLstFrTm;
  21. integer gDsrdPrms;
  22. float gUsVlcty;
  23. integer gUsClp;
  24. integer gRldng;
  25.  
  26. string gRldAnim = "3301e50b-d928-4aec-8196-c078ab8e7863";
  27. string gRldSnd = "243ebd91-733d-4757-8238-0ca114d09a0a";
  28. string gFrSnd = "c46d5715-0ba3-4e40-8bff-4c77f4d9f24b";
  29. string gActAnim = "9124673a-87fa-466a-b75f-6f9118aa7489";
  30. string gIdlAnim = "53953053-6692-499d-a68f-905aee347bcd";
  31.  
  32. uInit()
  33. {
  34.     gDsrdPrms = (PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS | PERMISSION_TRACK_CAMERA);
  35.     gLstn = llListen( 0, "", llGetOwner(), "" );
  36.     gAltLstn = llListen( gLstnChnl, "", llGetOwner(), "" );
  37.     gAmmLft = gClpSz;
  38.     gLstFrTm = 0;
  39.     gUsClp = gClpSz;
  40.     gRldng = FALSE;
  41.  
  42.     uRqstPrms( llGetPermissions() );
  43.     uHlstr();
  44. }
  45.  
  46. uFire()
  47. {
  48.     if (!gHlstrd && gAmmLft > 0)
  49.     {
  50.         vector vSprd = <(0 - (gRzSprd / 2)) + llFrand( gRzSprd ), (0 - (gRzSprd / 2)) + llFrand( gRzSprd ), (0 - (gRzSprd / 2)) + llFrand( gRzSprd )>;
  51.  
  52.         rotation vRtBtwn = llRotBetween( <0.01, 0.01, 0.01>, <0.01, 0.01, 0.01> + (DEG_TO_RAD * gAccrcy * (vSprd * llGetCameraRot())) );
  53.  
  54.         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 ) ) )>;
  55.  
  56.         llRezAtRoot( llGetInventoryName( INVENTORY_OBJECT, 0 ), llGetCameraPos() + (gOffSt + vSprd) * llGetCameraRot(), llRot2Fwd( vMdRt ) * gVlcty, vMdRt, 100 );
  57.  
  58.         gLstFrTm = llGetUnixTime();
  59.         gAmmLft -= 1;
  60.  
  61.         if (gAmmLft <= 0)
  62.         {
  63.             gAmmLft = 0;
  64.             uStFltng();
  65.             uRld();
  66.         }
  67.        
  68.         uStFltng();
  69.     }
  70. }
  71.  
  72. uRqstPrms( integer vPerms )
  73. {
  74.     gHsPrms = TRUE;
  75.  
  76.     if (vPerms != gDsrdPrms || llGetPermissionsKey() != llGetOwner())
  77.     {
  78.         gHsPrms = FALSE;
  79.  
  80.         llRequestPermissions( llGetOwner(), gDsrdPrms );
  81.     }
  82.     else
  83.     {
  84.         llTakeControls( CONTROL_ML_LBUTTON, TRUE, TRUE );
  85.     }
  86. }
  87.  
  88. string uGtTxtStrng()
  89. {
  90.     return "[ " + (string)gAmmLft + " / " + (string)gUsClp + " ]\n[ semi ]";
  91. }
  92.  
  93. uStFltng()
  94. {
  95.     vector vClr = <41,219,0>;
  96.  
  97.     if (gAmmLft <= gUsClp / 3)
  98.         vClr = <219,216,0>;
  99.  
  100.     llSetText( uGtTxtStrng(), vClr / 255.0, 1 );
  101. }
  102.  
  103. uHlstr()
  104. {
  105.     llListenRemove( gLstn );
  106.     llListenRemove( gAltLstn );
  107.     gLstn = llListen( 0, "", llGetOwner(), "draw" );
  108.     gAltLstn = llListen( gLstnChnl, "", llGetOwner(), "draw" );
  109.     llSetTimerEvent( 0 );
  110.     llSetLinkAlpha( LINK_SET, 0, ALL_SIDES );
  111.  
  112.     gHlstrd = TRUE;
  113.  
  114.     if (gHsPrms)
  115.     {
  116.         llStopAnimation( gIdlAnim );
  117.         llStopAnimation( gActAnim );
  118.     }
  119.  
  120.     llSetText( "", <1,1,1>, 1 );
  121. }
  122.  
  123. uDrw()
  124. {
  125.     llListenRemove( gLstn );
  126.     llListenRemove( gAltLstn );
  127.     gLstn = llListen( 0, "", llGetOwner(), "" );
  128.     gAltLstn = llListen( gLstnChnl, "", llGetOwner(), "" );
  129.  
  130.     llSetTimerEvent( 1 );
  131.     llSetLinkAlpha( LINK_SET, 1, ALL_SIDES );
  132.     uStFltng();
  133.  
  134.     gDactv = FALSE;
  135.     gHlstrd = FALSE;
  136. }
  137.  
  138. uRld()
  139. {
  140.     if (gAmmLft == gUsClp || gRldng)
  141.         return;
  142.  
  143.     gRldng = TRUE;
  144.  
  145.     llSetText( "[ reloading ]", <255, 60, 0> / 255.0, 1 );
  146.     llStopSound();
  147.     llPlaySound( gRldSnd, 1 );
  148.  
  149.     if (gHsPrms && gRldAnim != "")
  150.     {
  151.         llStartAnimation( gRldAnim );
  152.     }
  153.  
  154.     llSleep( gRldTm );
  155.  
  156.     gAmmLft = gUsClp;
  157.  
  158.     uStFltng();
  159.  
  160.     gRldng = FALSE;
  161. }
  162.  
  163. default
  164. {
  165.     state_entry()
  166.     {
  167.         uInit();
  168.         llOwnerSay( "Say 'draw' or 'sling' in public chat, or on channel " + (string)gLstnChnl + "." );
  169.     }
  170.  
  171.     attach( key vId )
  172.     {
  173.        
  174.         if (vId)
  175.         {
  176.             llOwnerSay("Test");
  177.             uInit();
  178.             llOwnerSay( "Say 'draw' or 'sling' in public chat, or on channel " + (string)gLstnChnl + "." );
  179.         }
  180.     }
  181.  
  182.     run_time_permissions( integer vPerms )
  183.     {
  184.         uRqstPrms( vPerms );
  185.     }
  186.  
  187.     listen( integer vChnl, string vName, key vId, string vMsg )
  188.     {
  189.         vMsg = llToUpper( llStringTrim( vMsg, STRING_TRIM ) );
  190.  
  191.         if ("DRAW" == vMsg)
  192.         {
  193.             uDrw();
  194.             return;
  195.         }
  196.         if ("HOLSTER" == vMsg || "SLING" == vMsg)
  197.         {
  198.             uHlstr();
  199.             return;
  200.         }
  201.         if ("RELOAD" == vMsg || "R" == vMsg)
  202.         {
  203.             uRld();
  204.             return;
  205.         }
  206.     }
  207.  
  208.     control( key vId, integer vLvl, integer vEdg )
  209.     {
  210.         integer vStrt = ~vLvl & vEdg;
  211.  
  212.         if ((llGetUnixTime() - gLstFrTm) < gDly )
  213.             return;
  214.  
  215.         if (gRldng)
  216.             return;
  217.  
  218.         if ((vStrt & CONTROL_ML_LBUTTON) && !gRldng)
  219.         {
  220.             llTriggerSound( gFrSnd, 1 );
  221.             uFire();
  222.         }
  223.     }
  224.  
  225.     changed( integer vChg )
  226.     {
  227.         if (CHANGED_OWNER & vChg)
  228.         {
  229.             llResetScript();
  230.         }
  231.     }
  232.  
  233.     timer()
  234.     {
  235.         if ((llGetAgentInfo( llGetOwner() ) & AGENT_MOUSELOOK) && !gActv && !gHlstrd)
  236.         {
  237.             llStopAnimation( gIdlAnim );
  238.             llStartAnimation( gActAnim );
  239.  
  240.             gActv = TRUE;
  241.             gDactv = FALSE;
  242.         }
  243.         else if (!(llGetAgentInfo( llGetOwner() ) & AGENT_MOUSELOOK) && !gDactv && !gHlstrd)
  244.         {
  245.             llStopAnimation( gActAnim );
  246.             llStartAnimation( gIdlAnim );
  247.  
  248.             gDactv = TRUE;
  249.             gActv = FALSE;
  250.         }
  251.     }
  252. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement