Advertisement
S4T3K

Teargas Improved

Jun 28th, 2014
319
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 4.68 KB | None | 0 0
  1. #include <a_samp>
  2. #tryinclude <YSI\y_hooks>
  3. #include <physics>
  4.  
  5. #if defined USE_STREAMER
  6.     #include <streamer>
  7. #endif
  8.  
  9. #if !defined PRESSED
  10.     #define PRESSED(%0) \
  11.         (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
  12. #endif
  13.  
  14. #if !defined HOLDING
  15.     #define HOLDING(%0) \
  16.         ((newkeys & (%0)) == (%0))
  17. #endif
  18.  
  19. #if !defined RELEASED
  20.     #define RELEASED(%0) \
  21.         (((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))
  22. #endif
  23.  
  24. #if !defined MAX_TEARGAS
  25.     #define MAX_TEARGAS 2000
  26. #endif
  27.  
  28. enum tInfo
  29. {
  30.     player,
  31.     Float:pos[4],
  32.     tear,
  33. };
  34.  
  35. new TearInfo[MAX_TEARGAS][tInfo], Iterator:Teargas<MAX_TEARGAS>, bool:entered[MAX_PLAYERS];
  36.  
  37. stock CreateTear(playerid, Float:powa)
  38. {
  39.     #if !defined Z_SPEED
  40.         #define Z_SPEED 3.7
  41.     #endif
  42.     #if !defined GRAVITY
  43.         #define GRAVITY 11.51
  44.     #endif
  45.     new Float:posi[4], i;
  46.     entered[playerid] = true;
  47.     GetPlayerPos(playerid, posi[0], posi[1], posi[2]);
  48.     GetPlayerFacingAngle(playerid, posi[3]);
  49.     for(i = 0; i < MAX_TEARGAS; i++)
  50.     {
  51.         #if defined USE_STREAMER
  52.             if(!IsValidDynamicObject(TearInfo[i][tear])) break;
  53.         #else
  54.             if(!IsValidObject(TearInfo[i][tear])) break;
  55.         #endif
  56.     }
  57.     TearInfo[i][player] = playerid;
  58.     for(new j = 0; j < 4; j++)
  59.     {
  60.         TearInfo[i][pos][j] = posi[j];
  61.     }
  62.     #if defined USE_STREAMER
  63.         TearInfo[i][tear] = CreateDynamicObject(343, posi[0], posi[1]-0.5 * floatcos(-(posi[3] + 90.0), degrees), posi[2], 93.7, 120.0, posi[3]+60.0, GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid));
  64.     #else
  65.         TearInfo[i][tear] = CreateObject(343, posi[0], posi[1]-0.5 * floatcos(-(posi[3] + 90.0), degrees), posi[2], 93.7, 120.0, posi[3]+60.0);
  66.     #endif
  67.     CallLocalFunction("OnTeargasLaunched", "ii", playerid, TearInfo[i][tear]);
  68.     PHY_InitObject(TearInfo[i][tear]);
  69.     PHY_SetObjectVelocity(TearInfo[i][tear], powa/2 * floatsin(-posi[3], degrees), powa/2 * floatcos(-posi[3], degrees), Z_SPEED);
  70.     PHY_SetObjectFriction(TearInfo[i][tear], 100);
  71.     PHY_SetObjectGravity(TearInfo[i][tear], GRAVITY);
  72.     PHY_SetObjectZBound(TearInfo[i][tear], posi[2] - 1.0, _, 0.0);
  73.     SetTimerEx("throwcheck_Enable", 2000, false, "ii", TearInfo[i][tear], playerid);
  74.     Iter_Add(Teargas, TearInfo[i][tear]);
  75.     return 1;
  76. }
  77.  
  78. hook OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  79. {
  80.     static Float:powa;
  81.     #if !defined POWA_ADDING_FIRST
  82.         #define POWA_ADDING_FIRST 1.0
  83.     #endif
  84.  
  85.     #if !defined POWA_ADDING_HOLD
  86.         #define POWA_ADDING_HOLD 0.1
  87.     #endif
  88.  
  89.     if(!entered[playerid])
  90.     {
  91.         if(GetPlayerWeapon(playerid) == WEAPON_TEARGAS)
  92.         {
  93.             if(PRESSED(KEY_FIRE)) powa += POWA_ADDING_FIRST;
  94.             if(HOLDING(KEY_FIRE))
  95.             {
  96.                 if(powa + POWA_ADDING_HOLD >= 12.0) powa = 12.0;
  97.                 else powa += POWA_ADDING_HOLD;
  98.                 return 1;
  99.             }
  100.             if(RELEASED(KEY_FIRE)) return CreateTear(playerid, powa);
  101.         }
  102.     }
  103.     return 1;
  104. }
  105.  
  106. forward smoke_Start(objectid, playerid);
  107. public smoke_Start(objectid, playerid)
  108. {
  109.     entered[playerid] = false;
  110.     new i;
  111.     foreach(i : Teargas)
  112.     {
  113.         if(TearInfo[i][tear] == objectid) break;
  114.     }
  115.     #if defined USE_STREAMER
  116.         GetDynamicObjectPos(objectid, TearInfo[i][pos][0], TearInfo[i][pos][1], TearInfo[i][pos][2]);
  117.     #else
  118.         GetObjectPos(objectid, TearInfo[i][pos][0], TearInfo[i][pos][1], TearInfo[i][pos][2]);
  119.     #endif
  120.     CallLocalFunction("OnTeargasStartSmoking", "iifff", playerid, objectid, TearInfo[i][pos][0], TearInfo[i][pos][1], TearInfo[i][pos][2]);
  121.     SetTimerEx("smoke_End", 12500, false, "iifffd", objectid, playerid, TearInfo[i][pos][0], TearInfo[i][pos][1], TearInfo[i][pos][2]);
  122.     return 1;
  123. }
  124.  
  125. forward smoke_End(objectid, playerid, Float:x, Float:y, Float:z);
  126. public smoke_End(objectid, playerid, Float:x, Float:y, Float:z)
  127. {
  128.     #if defined USE_STREAMER
  129.         GetDynamicObjectPos(objectid, x, y, z);
  130.     #else
  131.         GetObjectPos(objectid, x, y, z);
  132.     #endif
  133.     CallLocalFunction("OnTeargasStopSmoking", "iifff", playerid, objectid, x, y, z);
  134.     Iter_Remove(Teargas, objectid);
  135.     SetPlayerHealth(playerid, GetPlayerHealth(playerid)-12.0);
  136.     #if defined USE_STREAMER
  137.         return DestroyDynamicObject(objectid);
  138.     #else
  139.         return DestroyObject(objectid);
  140.     #endif
  141. }
  142.  
  143. forward OnTeargasLaunched(playerid, tearid);
  144. forward OnTeargasStartSmoking(playerid, tearid, Float:x, Float:y, Float:z);
  145. forward OnTeargasStopSmoking(playerid, tearid, Float:x, Float:y, Float:z);
  146.  
  147.  
  148. /****************************************
  149.         Example
  150. *****************************************
  151.  
  152. public OnTeargasStartSmoking(playerid, tearid, Float:x, Float:y, Float:z)
  153. {
  154.     new Float:health;
  155.     foreach(new i : Player)
  156.     {
  157.         if(IsPlayerInRangeOfPoint(i, 5.0, x, y, z))
  158.         {
  159.             GetPlayerHealth(i, health);
  160.             SetPlayerHealth(i, health-12.5);
  161.             SendClientMessage(i, -1, "Vous êtes dans le rayon d'une grenade fumigène active ! Vous avez perdu 12 pts de vie !");
  162.         }
  163.     }
  164.     return 1;
  165. }
  166.  
  167. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement