Advertisement
Guest User

pickfix.inc

a guest
Nov 15th, 2016
480
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.51 KB | None | 0 0
  1. /*
  2.        
  3.         pickfix | Edwin, 2016
  4.         Исправление повторения срабатывания пикапов
  5.        
  6.         Важно:
  7.             Инклуд требует наличия плагина streamer от Incognito.
  8.             Работает с динамическими пикапами.
  9.        
  10.         Коллбэки:
  11.             OnPlayerPickupExit (playerid, pickupid) // Срабатывает при выходе игрока из пикапа
  12.             OnPlayerDynamicPickupExit (playerid, pickupid) // Срабатывает при выходе игрока из динамического пикапа
  13.  
  14. */
  15.  
  16. #if defined pickfix
  17.     #error pickfix already defined
  18. #endif
  19.  
  20.  
  21. #if !defined Streamer_IncludeFileVersion
  22.     #error streamer must be included before pickfix
  23.    
  24. #else
  25.  
  26. #define pickfix
  27.  
  28.  
  29. #if !defined MAX_DYNAMIC_PICKUPS
  30.     #define MAX_DYNAMIC_PICKUPS 4096
  31. #endif
  32.  
  33.  
  34.  
  35.  
  36. forward OnPlayerPickupExit(playerid, pickupid);
  37. forward OnPlayerDynamicPickupExit(playerid, pickupid);
  38.    
  39.  
  40.  
  41. static
  42.     PickZone[MAX_PICKUPS],
  43.     Float:PickPos[MAX_PICKUPS][3],
  44.     PlayerPickup[MAX_PLAYERS];
  45.  
  46. static
  47.     DynPickZone[MAX_DYNAMIC_PICKUPS],
  48.     PlayerDynPickup[MAX_PLAYERS];
  49.    
  50.  
  51. stock pickfix__CreatePickup(model, type, Float:X, Float:Y, Float:Z, Virtualworld = -1)
  52. {
  53.     new pickupid = CreatePickup(model, type, Float:X, Float:Y, Float:Z, Virtualworld);
  54.     PickZone[pickupid] = CreateDynamicSphere(X, Y, Z, 1.4, Virtualworld);
  55.     PickPos[pickupid][0] = X;
  56.     PickPos[pickupid][1] = Y;
  57.     PickPos[pickupid][2] = Z;
  58.     return pickupid;
  59. }
  60.  
  61.  
  62. stock pickfix__CreateDynamicPickup(modelid, type, Float:x, Float:y, Float:z, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.0)
  63. {
  64.     new pickupid = CreateDynamicPickup(modelid, type, x, y, z, worldid, interiorid, playerid, streamdistance);
  65.     DynPickZone[pickupid] = CreateDynamicSphere(x, y, z, 1.4, worldid);
  66.     return pickupid;
  67. }
  68.  
  69.  
  70. stock pickfix__DestroyPickup(pickupid)
  71. {  
  72.     DestroyDynamicArea(PickZone[pickupid]);
  73.     PickZone[pickupid] = 0;
  74.     return DestroyPickup(pickupid);
  75. }
  76.  
  77. stock pickfix__DestroyDynamicPickup(pickupid)
  78. {  
  79.     DestroyDynamicArea(DynPickZone[pickupid]);
  80.     DynPickZone[pickupid] = 0;
  81.     return DestroyDynamicPickup(pickupid);
  82. }
  83.  
  84.  
  85.  
  86. #if defined _ALS_CreatePickup
  87.     #undef CreatePickup
  88. #else
  89.     #define _ALS_CreatePickup
  90. #endif
  91. #define CreatePickup pickfix__CreatePickup
  92.  
  93.  
  94. #if defined _ALS_CreateDynamicPickup
  95.     #undef CreateDynamicPickup
  96. #else
  97.     #define _ALS_CreateDynamicPickup
  98. #endif
  99. #define CreateDynamicPickup pickfix__CreateDynamicPickup
  100.  
  101.  
  102. #if defined _ALS_DestroyPickup
  103.     #undef  DestroyPickup
  104. #else
  105.     #define _ALS_DestroyPickup
  106. #endif
  107. #define DestroyPickup   pickfix__DestroyPickup
  108.  
  109. #if defined _ALS_DestroyDynamicPickup
  110.     #undef  DestroyDynamicPickup
  111. #else
  112.     #define _ALS_DestroyDynamicPickup
  113. #endif
  114. #define DestroyDynamicPickup   pickfix__DestroyDynamicPickup
  115.  
  116.  
  117.  
  118.  
  119. public OnPlayerConnect(playerid)
  120. {
  121.     PlayerPickup[playerid] = -1;
  122.     PlayerDynPickup[playerid] = -1;
  123.    
  124. #if defined pickfix__OnPlayerConnect
  125.     return pickfix__OnPlayerConnect(playerid);
  126. #endif
  127. }
  128.  
  129. #if defined _ALS_OnPlayerConnect
  130.     #undef OnPlayerConnect    
  131.  
  132. #else
  133.     #define    _ALS_OnPlayerConnect
  134. #endif
  135.  
  136. #define OnPlayerConnect   pickfix__OnPlayerConnect
  137.  
  138. #if defined pickfix__OnPlayerConnect
  139.     forward pickfix__OnPlayerConnect(playerid);
  140. #endif  
  141.  
  142.  
  143.  
  144. public OnPlayerPickUpPickup(playerid, pickupid)
  145. {
  146.     if(PlayerPickup[playerid] != -1 || PlayerDynPickup[playerid] != -1) return 1;
  147.     PlayerPickup[playerid] = pickupid;
  148.  
  149. #if defined pickfix__OnPlayerPickUpPickup
  150.     return pickfix__OnPlayerPickUpPickup(playerid, pickupid);
  151. #else
  152.     return 1;
  153. #endif
  154. }
  155.  
  156. public OnPlayerPickUpDynamicPickup(playerid, pickupid)
  157. {
  158.     if(PlayerDynPickup[playerid] != -1) return 1;
  159.     PlayerDynPickup[playerid] = pickupid;
  160.  
  161. #if defined pickfix__OnPlayerPickUpDynamicP
  162.     return pickfix__OnPlayerPickUpDynamicP(playerid, pickupid);
  163. #else
  164.     return 1;
  165. #endif
  166. }
  167.  
  168.  
  169.  
  170. #if defined _ALS_OnPlayerPickUpPickup
  171.     #undef OnPlayerPickUpPickup    
  172.  
  173. #else
  174.     #define    _ALS_OnPlayerPickUpPickup
  175. #endif
  176.  
  177. #define OnPlayerPickUpPickup pickfix__OnPlayerPickUpPickup
  178.  
  179. #if defined pickfix__OnPlayerPickUpPickup
  180.     forward pickfix__OnPlayerPickUpPickup(playerid, pickupid);
  181. #endif  
  182.  
  183.  
  184.  
  185. #if defined _ALS_OnPlayerPickUpDynamicP
  186.     #undef OnPlayerPickUpDynamicP  
  187.  
  188. #else
  189.     #define    _ALS_OnPlayerPickUpDynamicPickup
  190. #endif
  191.  
  192. #define OnPlayerPickUpDynamicPickup pickfix__OnPlayerPickUpDynamicP
  193.  
  194. #if defined pickfix__OnPlayerPickUpDynamicP
  195.     forward pickfix__OnPlayerPickUpDynamicP(playerid, pickupid);
  196. #endif  
  197.  
  198.  
  199.  
  200. public OnPlayerLeaveDynamicArea(playerid, areaid)
  201. {
  202.     if(PlayerPickup[playerid] != -1 && PickZone[PlayerPickup[playerid]] == areaid)
  203.     {
  204.         CallLocalFunction("OnPlayerPickupExit", "ii", playerid, PlayerPickup[playerid]);
  205.         PlayerPickup[playerid] = -1;
  206.     }
  207.    
  208.     else if(PlayerDynPickup[playerid] != -1 && DynPickZone[PlayerDynPickup[playerid]] == areaid)
  209.     {
  210.         CallLocalFunction("OnPlayerDynamicPickupExit", "ii", playerid, PlayerDynPickup[playerid]);
  211.         PlayerDynPickup[playerid] = -1;
  212.     }
  213. #if defined pickfix__OnPlayerLeaveDynamicAr
  214.     return pickfix__OnPlayerLeaveDynamicAr(playerid, areaid);
  215. #else
  216.     return 1;
  217. #endif
  218. }
  219.  
  220.  
  221. #if defined _ALS_OnPlayerLeaveDynamicArea
  222.     #undef OnPlayerLeaveDynamicArea    
  223.  
  224. #else
  225.     #define    _ALS_OnPlayerLeaveDynamicArea
  226. #endif
  227.  
  228. #define OnPlayerLeaveDynamicArea pickfix__OnPlayerLeaveDynamicAr
  229.  
  230. #if defined pickfix__OnPlayerLeaveDynamicAr
  231.     forward pickfix__OnPlayerLeaveDynamicAr(playerid, areaid);
  232. #endif  
  233.  
  234.  
  235. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement