Guest User

pickfix+.inc

a guest
Nov 15th, 2016
267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.62 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.             IsValidPickup (pickupid) // Проверяет сущствование пикапа
  16.             GetPickupPos (pickupid, &Float:x, &Float:y, &Float:z) // Получает X, Y и Z позицию пикапа
  17.             GetDynamicPickupPos (pickupid, &Float:x, &Float:y, &Float:z) // Получает X, Y и Z позицию динамического пикапа
  18.             GetPickupVirtualWorld (pickupid) // Получает вирт. мир пикапа. Вернёт -2, если пикапа не существует
  19.             GetDynamicPickupVirtualWorld (pickupid) // Получает вирт. мир динамического пикапа. Вернёт -2, если пикапа не существует
  20.             GetDynamicPickupInterior (pickupid) // Получает интерьер динамического пикапа. Вернёт -2, если пикапа не существует
  21.            
  22. */
  23.  
  24. #if defined pickfix
  25.     #error pickfix already defined
  26. #endif
  27.  
  28.  
  29. #if !defined Streamer_IncludeFileVersion
  30.     #error streamer must be included before pickfix
  31.    
  32. #else
  33.  
  34. #define pickfix
  35.  
  36.  
  37. #if !defined MAX_DYNAMIC_PICKUPS
  38.     #define MAX_DYNAMIC_PICKUPS 4096
  39. #endif
  40.  
  41.  
  42.  
  43.  
  44. forward OnPlayerPickupExit(playerid, pickupid);
  45. forward OnPlayerDynamicPickupExit(playerid, pickupid);
  46.    
  47.  
  48.  
  49. static
  50.     PickZone[MAX_PICKUPS],
  51.     Float:PickPos[MAX_PICKUPS][3],
  52.     PickVirt[MAX_PICKUPS],
  53.     PlayerPickup[MAX_PLAYERS];
  54.  
  55. static
  56.     DynPickZone[MAX_DYNAMIC_PICKUPS],
  57.     PlayerDynPickup[MAX_PLAYERS];
  58.    
  59.  
  60. stock pickfix__CreatePickup(model, type, Float:X, Float:Y, Float:Z, Virtualworld = -1)
  61. {
  62.     new pickupid = CreatePickup(model, type, Float:X, Float:Y, Float:Z, Virtualworld);
  63.     PickZone[pickupid] = CreateDynamicSphere(X, Y, Z, 1.4, Virtualworld);
  64.     PickPos[pickupid][0] = X;
  65.     PickPos[pickupid][1] = Y;
  66.     PickPos[pickupid][2] = Z;
  67.     return pickupid;
  68. }
  69.  
  70.  
  71. stock pickfix__CreateDynamicPickup(modelid, type, Float:x, Float:y, Float:z, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.0)
  72. {
  73.     new pickupid = CreateDynamicPickup(modelid, type, x, y, z, worldid, interiorid, playerid, streamdistance);
  74.     DynPickZone[pickupid] = CreateDynamicSphere(x, y, z, 1.4, worldid);
  75.     return pickupid;
  76. }
  77.  
  78.  
  79. stock pickfix__DestroyPickup(pickupid)
  80. {  
  81.     DestroyDynamicArea(PickZone[pickupid]);
  82.     PickZone[pickupid] = 0;
  83.     return DestroyPickup(pickupid);
  84. }
  85.  
  86. stock pickfix__DestroyDynamicPickup(pickupid)
  87. {  
  88.     DestroyDynamicArea(DynPickZone[pickupid]);
  89.     DynPickZone[pickupid] = 0;
  90.     return DestroyDynamicPickup(pickupid);
  91. }
  92.  
  93.  
  94.  
  95. #if defined _ALS_CreatePickup
  96.     #undef CreatePickup
  97. #else
  98.     #define _ALS_CreatePickup
  99. #endif
  100. #define CreatePickup pickfix__CreatePickup
  101.  
  102.  
  103. #if defined _ALS_CreateDynamicPickup
  104.     #undef CreateDynamicPickup
  105. #else
  106.     #define _ALS_CreateDynamicPickup
  107. #endif
  108. #define CreateDynamicPickup pickfix__CreateDynamicPickup
  109.  
  110.  
  111. #if defined _ALS_DestroyPickup
  112.     #undef  DestroyPickup
  113. #else
  114.     #define _ALS_DestroyPickup
  115. #endif
  116. #define DestroyPickup   pickfix__DestroyPickup
  117.  
  118. #if defined _ALS_DestroyDynamicPickup
  119.     #undef  DestroyDynamicPickup
  120. #else
  121.     #define _ALS_DestroyDynamicPickup
  122. #endif
  123. #define DestroyDynamicPickup   pickfix__DestroyDynamicPickup
  124.  
  125.  
  126.  
  127.  
  128. public OnPlayerConnect(playerid)
  129. {
  130.     PlayerPickup[playerid] = -1;
  131.     PlayerDynPickup[playerid] = -1;
  132.    
  133. #if defined pickfix__OnPlayerConnect
  134.     return pickfix__OnPlayerConnect(playerid);
  135. #endif
  136. }
  137.  
  138. #if defined _ALS_OnPlayerConnect
  139.     #undef OnPlayerConnect    
  140.  
  141. #else
  142.     #define    _ALS_OnPlayerConnect
  143. #endif
  144.  
  145. #define OnPlayerConnect   pickfix__OnPlayerConnect
  146.  
  147. #if defined pickfix__OnPlayerConnect
  148.     forward pickfix__OnPlayerConnect(playerid);
  149. #endif  
  150.  
  151.  
  152.  
  153. public OnPlayerPickUpPickup(playerid, pickupid)
  154. {
  155.     if(PlayerPickup[playerid] != -1 || PlayerDynPickup[playerid] != -1) return 1;
  156.     PlayerPickup[playerid] = pickupid;
  157.  
  158. #if defined pickfix__OnPlayerPickUpPickup
  159.     return pickfix__OnPlayerPickUpPickup(playerid, pickupid);
  160. #else
  161.     return 1;
  162. #endif
  163. }
  164.  
  165. public OnPlayerPickUpDynamicPickup(playerid, pickupid)
  166. {
  167.     if(PlayerDynPickup[playerid] != -1) return 1;
  168.     PlayerDynPickup[playerid] = pickupid;
  169.  
  170. #if defined pickfix__OnPlayerPickUpDynamicP
  171.     return pickfix__OnPlayerPickUpDynamicP(playerid, pickupid);
  172. #else
  173.     return 1;
  174. #endif
  175. }
  176.  
  177.  
  178.  
  179. #if defined _ALS_OnPlayerPickUpPickup
  180.     #undef OnPlayerPickUpPickup    
  181.  
  182. #else
  183.     #define    _ALS_OnPlayerPickUpPickup
  184. #endif
  185.  
  186. #define OnPlayerPickUpPickup pickfix__OnPlayerPickUpPickup
  187.  
  188. #if defined pickfix__OnPlayerPickUpPickup
  189.     forward pickfix__OnPlayerPickUpPickup(playerid, pickupid);
  190. #endif  
  191.  
  192.  
  193.  
  194. #if defined _ALS_OnPlayerPickUpDynamicP
  195.     #undef OnPlayerPickUpDynamicP  
  196.  
  197. #else
  198.     #define    _ALS_OnPlayerPickUpDynamicPickup
  199. #endif
  200.  
  201. #define OnPlayerPickUpDynamicPickup pickfix__OnPlayerPickUpDynamicP
  202.  
  203. #if defined pickfix__OnPlayerPickUpDynamicP
  204.     forward pickfix__OnPlayerPickUpDynamicP(playerid, pickupid);
  205. #endif  
  206.  
  207.  
  208.  
  209. public OnPlayerLeaveDynamicArea(playerid, areaid)
  210. {
  211.     if(PlayerPickup[playerid] != -1 && PickZone[PlayerPickup[playerid]] == areaid)
  212.     {
  213.         CallLocalFunction("OnPlayerPickupExit", "ii", playerid, PlayerPickup[playerid]);
  214.         PlayerPickup[playerid] = -1;
  215.     }
  216.    
  217.     else if(PlayerDynPickup[playerid] != -1 && DynPickZone[PlayerDynPickup[playerid]] == areaid)
  218.     {
  219.         CallLocalFunction("OnPlayerDynamicPickupExit", "ii", playerid, PlayerDynPickup[playerid]);
  220.         PlayerDynPickup[playerid] = -1;
  221.     }
  222.    
  223. #if defined pickfix__OnPlayerLeaveDynamicAr
  224.     return pickfix__OnPlayerLeaveDynamicAr(playerid, areaid);
  225. #else
  226.     return 1;
  227. #endif
  228. }
  229.  
  230.  
  231. #if defined _ALS_OnPlayerLeaveDynamicArea
  232.     #undef OnPlayerLeaveDynamicArea    
  233.  
  234. #else
  235.     #define    _ALS_OnPlayerLeaveDynamicArea
  236. #endif
  237.  
  238. #define OnPlayerLeaveDynamicArea pickfix__OnPlayerLeaveDynamicAr
  239.  
  240. #if defined pickfix__OnPlayerLeaveDynamicAr
  241.     forward pickfix__OnPlayerLeaveDynamicAr(playerid, areaid);
  242. #endif  
  243.  
  244.  
  245. /*          _______________________
  246.                     Функции
  247. */
  248.  
  249.  
  250. stock IsValidPickup(pickupid)
  251. {
  252.     if(!PickZone[pickupid]) return false;
  253.     return true;
  254. }
  255.  
  256.  
  257. stock GetPickupPos(pickupid, &Float:x, &Float:y, &Float:z)
  258. {
  259.         if(!IsValidPickup(pickupid)) return 0;
  260.         x = PickPos[pickupid][0];
  261.         y = PickPos[pickupid][1];
  262.         z = PickPos[pickupid][2];
  263.         return 1;
  264. }
  265.  
  266.  
  267. stock GetDynamicPickupPos(pickupid, &Float:x, &Float:y, &Float:z)
  268. {
  269.         if(!IsValidDynamicPickup(pickupid)) return 0;
  270.         Streamer_GetFloatData(STREAMER_TYPE_PICKUP, pickupid, E_STREAMER_X, x);
  271.         Streamer_GetFloatData(STREAMER_TYPE_PICKUP, pickupid, E_STREAMER_Y, y);
  272.         Streamer_GetFloatData(STREAMER_TYPE_PICKUP, pickupid, E_STREAMER_Z, z);
  273.         return 1;
  274. }
  275.  
  276.  
  277. stock GetPickupVirtualWorld(pickupid)
  278. {
  279.         if(!IsValidPickup(pickupid)) return -2;
  280.         return PickVirt[pickupid];
  281. }
  282.    
  283. stock GetDynamicPickupVirtualWorld(pickupid)
  284. {
  285.         if(!IsValidDynamicPickup(pickupid)) return -2;
  286.         return Streamer_GetIntData(STREAMER_TYPE_PICKUP, pickupid, E_STREAMER_WORLD_ID);
  287. }
  288.  
  289. stock GetDynamicPickupInterior(pickupid)
  290. {
  291.         if(!IsValidDynamicPickup(pickupid)) return -2;
  292.         return Streamer_GetIntData(STREAMER_TYPE_PICKUP, pickupid, E_STREAMER_INTERIOR_ID);
  293. }
  294.  
  295.  
  296. #endif
Add Comment
Please, Sign In to add comment