Advertisement
Guest User

Untitled

a guest
Apr 3rd, 2017
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 12.53 KB | None | 0 0
  1.  
  2. /*
  3.  
  4. Introduction
  5.  
  6.                               This is a c1 version of throwing-knives, There are some new features added to it.
  7.                               Now aiming completely depends upon player's crosshair. Players can throw knives vertically upwards and
  8.                               downwards. Enhances gameplay as well.
  9.  
  10.  
  11.                             NOTE: • Uses PlayerAttachedObject slot '0','1','2','3'.
  12.                                   • "Do not" set the distance according to you for better response from the include.
  13.  
  14.  
  15. Functions
  16.  
  17.                         • EquipPlayerThrowingKnife(playerid,color=-1)
  18.                         • RemoveAttachedKnives(playerid)
  19.                         • UnEquipPlayerThrowingKnife(playerid)
  20.                         • RemovePlayerThrowingKnife(playerid)
  21.                         • GivePlayerThrowingKnife(playerid,amount)
  22.                         • LetPlayerThrowKnife(playerid, clienterror[], errorcolor,Float:distance=MAX_KNIFE_DISTANCE) 
  23.  
  24.  
  25.  
  26. Source Code
  27.  
  28.                         https://github.com/codectile/Throwing-Knife
  29.  
  30.  
  31.  
  32.  
  33. Dependencies
  34.  
  35.                         Streamer Plug-in (Incognito)
  36.  
  37.  
  38.  
  39.  
  40. Credits
  41.  
  42.                         Incognito - streamer plug-in
  43.  
  44.  
  45. */
  46.  
  47.  
  48.  
  49. /* The following codes are too much fragile, please "do not edit them". */
  50.  
  51. /* Description
  52.                     MAX_KNIFE_SPEED - maximum knife velocity
  53.                     MAX_KNIFE_DISTANCE - Distance which will be covered by the moving knife
  54.                     */
  55. #define MAX_KNIFE_SPEED     13.5
  56. #define MAX_KNIFE_DISTANCE      36.0
  57.  
  58.  
  59. /* Description
  60.                     Identifiers required for functioning the knife
  61.                     */
  62. new _@TKNF[MAX_PLAYERS];
  63. new knife@_counter[MAX_PLAYERS];
  64. new knife@_movetime[MAX_PLAYERS];
  65. new _@equiped[MAX_PLAYERS];
  66. new bool:_@has[MAX_PLAYERS];
  67. new PlayerText:crosshair[MAX_PLAYERS];
  68.  
  69.  
  70. /* Description
  71.                     Removes attached knifes from the player's body
  72.                     */
  73. stock RemoveAttachedKnives(playerid)
  74. {
  75.     new c=0;
  76.     for(new i=0;i<3;i++)
  77.     {
  78.         if(IsPlayerAttachedObjectSlotUsed(playerid, c))
  79.         {
  80.             RemovePlayerAttachedObject(playerid, c);
  81.             c+=1;
  82.         }
  83.     }
  84.     if(c >= 1)
  85.     {
  86.         ApplyAnimation(playerid, "PED", "HIT_GUN_BUTT", 4.1, 0, 1, 1, 0, 350, 1);
  87.     }
  88.     else SendClientMessage(playerid,-1,"SERVER: There are no knives attached on your player's body");
  89.     return 1;
  90. }
  91.  
  92. /* Description
  93.                     Removes throwing knifes of a player
  94.                     */
  95. stock RemovePlayerThrowingKnife(playerid)
  96. {
  97.     if(IsPlayerConnected(playerid))
  98.     {
  99.         if(_@has[playerid] == true)
  100.         {
  101.             if(IsPlayerAttachedObjectSlotUsed(playerid, 3)) RemovePlayerAttachedObject(playerid, 3);
  102.             knife@_counter[playerid] = 0;
  103.             _@equiped[playerid]=0;
  104.             _@has[playerid] = false;
  105.         }
  106.         return 1;
  107.     }
  108.     else return 0;
  109. }
  110.  
  111.  
  112. /* Description
  113.                     Unequips throwing knives
  114.                     */
  115. stock UnEquipPlayerThrowingKnife(playerid)
  116. {
  117.     if(IsPlayerConnected(playerid))
  118.     {
  119.         if(_@has[playerid] == true)
  120.         {
  121.             if(IsPlayerAttachedObjectSlotUsed(playerid, 3)) RemovePlayerAttachedObject(playerid, 3);
  122.             PlayerTextDrawDestroy(playerid, crosshair[playerid]);
  123.             _@equiped[playerid]=0;
  124.         }
  125.         else SendClientMessage(playerid,-1,"SERVER: You don't have throwing knives.");
  126.         return 1;
  127.     }
  128.     else return 0;
  129. }
  130.  
  131.  
  132. /* Description
  133.                     Equips throwing knives
  134.                     */
  135. stock EquipPlayerThrowingKnife(playerid,color=-1)
  136. {
  137.     if(IsPlayerConnected(playerid))
  138.     {
  139.         if(_@equiped[playerid] == 0)
  140.         {
  141.             if(_@has[playerid] == true)
  142.             {
  143.                 if(IsPlayerAttachedObjectSlotUsed(playerid, 3)) RemovePlayerAttachedObject(playerid, 3);
  144.                 SetPlayerAttachedObject(playerid, 3, 335, 6, 0.127,-0.017,0.281,-1.50,174.20,-0.50);
  145.                 crosshair[playerid]=CreatePlayerTextDraw(playerid, 320.0-15.0, 240.0-62.0, "(  )");
  146.                 PlayerTextDrawSetShadow(playerid, crosshair[playerid], 0);
  147.                 PlayerTextDrawColor(playerid,crosshair[playerid], color);
  148.                 PlayerTextDrawFont(playerid, crosshair[playerid], 1);
  149.                 PlayerTextDrawShow(playerid, crosshair[playerid]);
  150.                 _@equiped[playerid]=1;
  151.             }
  152.             else SendClientMessage(playerid,-1,"SERVER: You don't have throwing knives.");
  153.         }
  154.         else SendClientMessage(playerid,-1,"SERVER: You have already equipped throwing knives.");
  155.         return 1;
  156.     }
  157.     else return 0;
  158. }
  159.  
  160.  
  161. /* Description
  162.                     Gives player specified amount of throwing knives
  163.                     */
  164. stock GivePlayerThrowingKnife(playerid,amount)
  165. {
  166.     if(IsPlayerConnected(playerid))
  167.     {
  168.         knife@_counter[playerid]+=amount;
  169.         return 1;
  170.     }
  171.     else return 0;
  172. }
  173.  
  174.  
  175. /* Description
  176.                     Makes player throw knife
  177.                     */
  178. stock LetPlayerThrowKnife(playerid, clienterror[], errorcolor, Float:distance=MAX_KNIFE_DISTANCE)
  179. {
  180.     if(_@has[playerid] == true)
  181.     {
  182.         if(_@equiped[playerid] == 1)
  183.         {
  184.             if(knife@_counter[playerid] > 0)
  185.             {
  186.  
  187.                 if(!IsValidDynamicObject(_@TKNF[playerid]))
  188.                 {
  189.                     ApplyAnimation(playerid, "GRENADE", "WEAPON_THROW", 3.5, 0, 1, 1, 0, 500, 1);
  190.                     new Float:vecx,Float:vecy,Float:vecz,Float:Angle;
  191.                     new Float:fPX, Float:fPY, Float:fPZ,Float:fVX, Float:fVY, Float:fVZ,Float:object_x, Float:object_y, Float:object_z;
  192.                     GetPlayerCameraPos(playerid, fPX, fPY, fPZ);
  193.                     GetPlayerCameraFrontVector(playerid, fVX, fVY, fVZ);
  194.                     GetPlayerPos(playerid, vecx, vecy, vecz);
  195.                     new Float:fScale = distance;
  196.                     object_x = fPX + (fVX*(fScale-30));
  197.                     object_y = fPY + (fVY*(fScale-30));
  198.                     object_z = fPZ+0.6 + (fVZ*(fScale-30));
  199.                     Angle=atan2(object_x-vecx,object_y-vecy);
  200.                     SetPlayerFacingAngle(playerid,360.0-Angle);
  201.                     #if defined KNIFE_NEW
  202.                     _@TKNF[playerid]=CreateDynamicObject(19583, vecx,vecy,vecz+0.7,-1.5+180.0, 270.0, (360.0-Angle)+270,GetPlayerVirtualWorld(playerid),GetPlayerInterior(playerid),-1,700.0,1000.0);
  203.                     #else
  204.                     _@TKNF[playerid]=CreateDynamicObject(335, vecx,vecy,vecz+0.7,-1.5+180.0, 270.0, (360.0-Angle)+270,GetPlayerVirtualWorld(playerid),GetPlayerInterior(playerid),-1,700.0,1000.0);
  205.                     #endif
  206.                     knife@_movetime[playerid]=MoveDynamicObject(_@TKNF[playerid],object_x,object_y,object_z,MAX_KNIFE_SPEED,-1.5+180.0,270.0-360.0, (360.0-Angle)+270.0);
  207.                     SetTimerEx("knife@_track",knife@_movetime[playerid],0,"iffffffffi",playerid,distance,Angle,fPX,fPY,fPZ,fVX, fVY, fVZ, 1);
  208.                     #if defined OnPlayerThrowKnife
  209.                     OnPlayerThrowKnife(playerid);
  210.                     #endif
  211.                     knife@_counter[playerid]-=1;
  212.                 }
  213.                 else SendClientMessage(playerid,errorcolor, clienterror);
  214.             }
  215.         }
  216.         else SendClientMessage(playerid,-1,"SERVER: You are not eqipped with throwing knives.");
  217.     }
  218.     else SendClientMessage(playerid,-1,"SERVER: You don't have throwing knives.");
  219.     return 1;
  220. }
  221.  
  222. forward knife@_track(playerid,Float:distance,Float:Angle,Float:fPX,Float:fPY,Float:fPZ,Float:fVX, Float:fVY, Float:fVZ, step);
  223. public knife@_track(playerid,Float:distance,Float:Angle,Float:fPX,Float:fPY,Float:fPZ,Float:fVX, Float:fVY, Float:fVZ, step)
  224. {
  225.         StopDynamicObject(_@TKNF[playerid]);
  226.         new Float:rx,Float:ry,Float:rz;
  227.         GetDynamicObjectRot(_@TKNF[playerid], rx, ry,rz);
  228.         new Float:object_x, Float:object_y, Float:object_z;
  229.         new Float:fScale = distance;
  230.         new Float:fAddition = 0.0f;
  231.         new bool:destroy = false;
  232.         switch(step)
  233.         {
  234.                 case 1:
  235.                 {
  236.                         fScale -= 24;
  237.                         fAddition = 0.8f;
  238.                 }
  239.                 case 2:
  240.                 {
  241.                         fScale -= 18;
  242.                         fAddition = 1.2f;
  243.                 }
  244.                 case 3:
  245.                 {                      
  246.                         fScale -= 12;
  247.                         fAddition = 1.6f;
  248.                 }
  249.                 case 4:
  250.                 {
  251.                         fScale -= 6;
  252.                         fAddition = 2.0f;
  253.                 }
  254.                 case 5:
  255.                 {
  256.                         fAddition = 2.4f;
  257.                         destroy = true;
  258.                 }
  259.         }
  260.         object_x = fPX + (fVX*(fScale));
  261.         object_y = fPY + (fVY*(fScale));
  262.         object_z = fPZ+fAddition + (fVZ*(fScale));
  263.         knife@_movetime[playerid]=MoveDynamicObject(_@TKNF[playerid],object_x,object_y,object_z,MAX_KNIFE_SPEED,rx,(ry+180.0), rz);
  264.         if(destroy)
  265.         {
  266.                 SetTimerEx("destroy@_knives",knife@_movetime[playerid]-90,0,"i",playerid);
  267.         }
  268.         else
  269.         {
  270.                 SetTimerEx("knife@_track",knife@_movetime[playerid],0,"iffffffffi",playerid,distance,Angle,fPX,fPY,fPZ,fVX, fVY, fVZ, (step+1));
  271.         }
  272.         return 1;
  273. }
  274.  
  275.  
  276. forward destroy@_knives(playerid);
  277. public destroy@_knives(playerid)
  278. {
  279.     DestroyDynamicObject(_@TKNF[playerid]);
  280.     _@TKNF[playerid]=-1;
  281.     knife@_movetime[playerid]=-1;
  282.     return 1;
  283. }
  284.  
  285.  
  286.  
  287. /* Core Hooks */
  288.  
  289. /* OnPlayerConnect */
  290. public OnPlayerConnect(playerid)
  291. {
  292.     _@TKNF[playerid]=-1;
  293.     knife@_counter[playerid]=0;
  294.     knife@_movetime[playerid]=-1;
  295.     _@equiped[playerid]=0;
  296.    
  297.     #if defined CRF_OnPlayerConnect
  298.       CRF_OnPlayerConnect(playerid);
  299.     #endif
  300.     return 1;
  301. }
  302.  
  303. #if defined _ALS_OnPlayerConnect
  304.     #undef OnPlayerConnect
  305. #else
  306.     #define _ALS_OnPlayerConnect
  307. #endif
  308. #define OnPlayerConnect CRF_OnPlayerConnect
  309. #if defined CRF_OnPlayerConnect
  310.     forward CRF_OnPlayerConnect(playerid);
  311. #endif
  312.  
  313. /* OnPlayerDisconnect */
  314. public OnPlayerDisconnect(playerid, reason)
  315. {
  316.     _@TKNF[playerid]=-1;
  317.     knife@_counter[playerid]=0;
  318.     knife@_movetime[playerid]=-1;
  319.     _@equiped[playerid]=0;
  320.  
  321.     #if defined CRF_OnPlayerDisconnect
  322.       CRF_OnPlayerDisconnect(playerid, reason);
  323.     #endif
  324.     return 1;
  325. }
  326.  
  327. #if defined _ALS_OnPlayerDisconnect
  328.     #undef OnPlayerDisconnect
  329. #else
  330.     #define _ALS_OnPlayerDisconnect
  331. #endif
  332. #define OnPlayerDisconnect CRF_OnPlayerDisconnect
  333. #if defined CRF_OnPlayerDisconnect
  334.     forward CRF_OnPlayerDisconnect(playerid, reason);
  335. #endif
  336.  
  337. /* OnPlayerDeath */
  338. public OnPlayerDeath(playerid, killerid, reason)
  339. {
  340.     _@equiped[playerid]=0;
  341.     PlayerTextDrawDestroy(playerid, crosshair[playerid]);
  342.  
  343.     #if defined CRF_OnPlayerDeath
  344.       CRF_OnPlayerDeath(playerid, killerid, reason);
  345.     #endif
  346.     return 1;
  347. }
  348.  
  349. #if defined _ALS_OnPlayerDeath
  350.     #undef OnPlayerDeath
  351. #else
  352.     #define _ALS_OnPlayerDeath
  353. #endif
  354. #define OnPlayerDeath CRF_OnPlayerDeath
  355. #if defined CRF_OnPlayerDeath
  356.     forward CRF_OnPlayerDeath(playerid, killerid, reason);
  357. #endif
  358.  
  359. /* OnPlayerUpdate */
  360. public OnPlayerUpdate(playerid)
  361. {
  362.     if(IsValidDynamicObject(_@TKNF[playerid]))
  363.     {
  364.         new rnd=random(3);
  365.         for(new i=0;i<MAX_PLAYERS;i++)
  366.         {
  367.             Streamer_Update(i);
  368.             if(i != playerid)
  369.             {
  370.                 new Float:x,Float:y,Float:z;
  371.                 GetDynamicObjectPos(_@TKNF[playerid],x,y,z);
  372.                 if(IsPlayerInRangeOfPoint(i,1.6,x,y,z))
  373.                 {
  374.                     new Float:health;
  375.                     GetPlayerHealth(i,health);
  376.                     SetPlayerHealth(i,health-random(100));
  377.                     x=-1;
  378.                     y=-1;
  379.                     z=-1;
  380.                     DestroyDynamicObject(_@TKNF[playerid]);
  381.                     _@TKNF[playerid]=-1;
  382.                     #if defined KNIFE_NEW
  383.                     if(rnd == 0)
  384.                     {
  385.                         SetPlayerAttachedObject(i, 0, 19583, 15, -0.119,-0.15,0.116,62.4,169.6,-91.9);
  386.                     }
  387.                     else if(rnd == 1)
  388.                     {
  389.                         SetPlayerAttachedObject(i, 1, 19583, 8, 0.347,0.208,-0.092,79.09,15.0,0.0);
  390.                     }
  391.                     else
  392.                     {
  393.                         SetPlayerAttachedObject(i, 2, 19583, 1, 0.13,0.251,0.09,87.8,-30.8,-178.2);
  394.                     }
  395.                     #else
  396.                     if(rnd == 0)
  397.                     {
  398.                         SetPlayerAttachedObject(i, 0, 335, 15, -0.119,-0.15,0.116,62.4,169.6,-91.9);
  399.                     }
  400.                     else if(rnd == 1)
  401.                     {
  402.                         SetPlayerAttachedObject(i, 1, 335, 8, 0.347,0.208,-0.092,79.09,15.0,0.0);
  403.                     }
  404.                     else
  405.                     {
  406.                         SetPlayerAttachedObject(i, 2, 335, 1, 0.13,0.251,0.09,87.8,-30.8,-178.2);
  407.                     }
  408.                     #endif
  409.                     ApplyAnimation(i, "PED", "HIT_GUN_BUTT", 4.1, 0, 1, 1, 0, 350, 1);
  410.                     #if defined OnPlayerGetKnifed
  411.                     OnPlayerGetKnifed(i, playerid);
  412.                     #endif
  413.                     break;
  414.                 }
  415.             }
  416.         }
  417.     }
  418.  
  419.     if(knife@_counter[playerid] == 0)
  420.     {
  421.         RemovePlayerAttachedObject(playerid, 3);
  422.         knife@_movetime[playerid] = -1;
  423.         _@equiped[playerid] = 0;
  424.     }
  425.  
  426.     if(knife@_counter[playerid] > 0)
  427.     {
  428.         _@has[playerid] = true;
  429.     }
  430.     else
  431.     {
  432.         _@has[playerid] = false;
  433.         _@equiped[playerid] = 0;
  434.         PlayerTextDrawDestroy(playerid, crosshair[playerid]);
  435.     }
  436.  
  437.      #if defined CRF_OnPlayerUpdate
  438.         CRF_OnPlayerUpdate(playerid);
  439.     #endif
  440.        
  441.     return 1;
  442. }
  443.  
  444. #if defined _ALS_OnPlayerUpdate
  445.     #undef OnPlayerUpdate
  446. #else
  447.     #define _ALS_OnPlayerUpdate
  448. #endif
  449. #define OnPlayerUpdate CRF_OnPlayerUpdate
  450. #if defined CRF_OnPlayerUpdate
  451.     forward CRF_OnPlayerUpdate(playerid);
  452. #endif
  453.  
  454. /* Callback */
  455. #if defined OnPlayerThrowKnife
  456. forward OnPlayerThrowKnife(playerid);
  457. #endif
  458.  
  459. #if defined OnPlayerGetKnifed
  460. forward OnPlayerGetKnifed(playerid, killerid);
  461. #endif
  462.  
  463.  
  464. /* ***************************************************************************** */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement