Advertisement
Guest User

key_pickupfix.inc

a guest
Apr 15th, 2018
378
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.82 KB | None | 0 0
  1. /*==============================================================================
  2. PICKUP BUG FIX BY USING KEY
  3. key_pickupfix.inc v1.1
  4. Author: whale (a.k.a Twixxx / Twixyck)
  5.  
  6. Copyright (c) 2018 Nikita Shtimenko (whale)
  7.  
  8. This software is provided 'as-is', without any express or implied warranty.
  9. In no event will the authors be held liable for any damages arising from the
  10. use of this software.
  11.  
  12. Permission is granted to anyone to use this software for
  13. any purpose, including commercial applications, and to alter it and
  14. redistribute it freely, subject to the following restrictions:
  15.  
  16. 1. The origin of this software must not be misrepresented; you must not
  17. claim that you wrote the original software. If you use this software in
  18. a product, an acknowledgment in the product documentation would be
  19. appreciated but is not required.
  20.  
  21. 2. Altered source versions must be plainly marked as such, and must not be
  22. misrepresented as being the original software.
  23.  
  24. 3. This notice may not be removed or altered from any source distribution.
  25. ==============================================================================*/
  26. #if defined _key_pickupfix_included
  27. #endinput
  28. #endif
  29. #define _key_pickupfix_included
  30.  
  31. #if __Pawn >= 0x3A && defined __PawnBuild
  32. #if __Pawn == 0x3A && __PawnBuild >= 2 || __Pawn > 0x3A
  33. #define static_enum static enum
  34. #endif
  35. #endif
  36. #if !defined static_enum
  37. #define static_enum enum
  38. #endif
  39.  
  40. #if !defined KEY_PICKUPFIX_USED_KEY
  41. #define KEY_PICKUPFIX_USED_KEY KEY_WALK
  42. #endif
  43.  
  44. #define KEY_PICKUPFIX_INVALID_PICKUP_ID (-1)
  45.  
  46. #if defined Streamer_IncludeFileVersion
  47. #define KEY_PICKUPFIX_PICK_TYPE_INVALID (-1)
  48. #define KEY_PICKUPFIX_PICK_TYPE_DEFAULT (0)
  49. #define KEY_PICKUPFIX_PICK_TYPE_STREAM (1)
  50. #endif
  51.  
  52. #define _key_pickupfix_PRESSED(%0) \
  53. (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
  54.  
  55. #if defined Streamer_IncludeFileVersion
  56.  
  57. static_enum e_PLAYER_PICKUP_DATA
  58. {
  59. _key_pickupfix_pickupID,
  60. _key_pickupfix_pickupType,
  61. _key_pickupfix_pickupTimestamp,
  62. bool:_key_pickupfix_IsPickupUsed
  63. };
  64. static
  65. _key_pickupfix_playerPickupData[MAX_PLAYERS][e_PLAYER_PICKUP_DATA];
  66.  
  67. static const NULL_PLAYER_PICKUP_DATA[e_PLAYER_PICKUP_DATA] = {KEY_PICKUPFIX_INVALID_PICKUP_ID, KEY_PICKUPFIX_PICK_TYPE_INVALID, 0, false};
  68. #else
  69. static_enum e_PLAYER_PICKUP_DATA
  70. {
  71. _key_pickupfix_pickupID,
  72. _key_pickupfix_pickupTimestamp,
  73. bool:_key_pickupfix_IsPickupUsed
  74. };
  75. static
  76. _key_pickupfix_playerPickupData[MAX_PLAYERS][e_PLAYER_PICKUP_DATA];
  77.  
  78. static const NULL_PLAYER_PICKUP_DATA[e_PLAYER_PICKUP_DATA] = {KEY_PICKUPFIX_INVALID_PICKUP_ID, 0, false};
  79. #endif
  80.  
  81. public OnPlayerConnect(playerid)
  82. {
  83. _key_pickupfix_playerPickupData[playerid] = NULL_PLAYER_PICKUP_DATA;
  84.  
  85. #if defined _key_pickupfix_OnPlayerConnect
  86. _key_pickupfix_OnPlayerConnect(playerid);
  87. #endif
  88. return 1;
  89. }
  90. #if defined _ALS_OnPlayerConnect
  91. #undef OnPlayerConnect
  92. #else
  93. #define _ALS_OnPlayerConnect
  94. #endif
  95. #define OnPlayerConnect _key_pickupfix_OnPlayerConnect
  96. #if defined _key_pickupfix_OnPlayerConnect
  97. forward _key_pickupfix_OnPlayerConnect(playerid);
  98. #endif
  99.  
  100. public OnPlayerPickUpPickup(playerid, pickupid)
  101. {
  102. _key_pickupfix_playerPickupData[playerid][_key_pickupfix_pickupID] = pickupid;
  103.  
  104. #if defined Streamer_IncludeFileVersion
  105. _key_pickupfix_playerPickupData[playerid][_key_pickupfix_pickupType] = KEY_PICKUPFIX_PICK_TYPE_DEFAULT;
  106. #endif
  107.  
  108. _key_pickupfix_playerPickupData[playerid][_key_pickupfix_pickupTimestamp] = gettime();
  109.  
  110. if(false == _key_pickupfix_playerPickupData[playerid][_key_pickupfix_IsPickupUsed])
  111. return 1;
  112.  
  113. _key_pickupfix_playerPickupData[playerid][_key_pickupfix_pickupID] = KEY_PICKUPFIX_INVALID_PICKUP_ID;
  114.  
  115. #if defined Streamer_IncludeFileVersion
  116. _key_pickupfix_playerPickupData[playerid][_key_pickupfix_pickupType] = KEY_PICKUPFIX_PICK_TYPE_INVALID;
  117. #endif
  118.  
  119. _key_pickupfix_playerPickupData[playerid][_key_pickupfix_pickupTimestamp] = 0;
  120. _key_pickupfix_playerPickupData[playerid][_key_pickupfix_IsPickupUsed] = false;
  121.  
  122. #if defined _key_pickupfix_OnPlayerPickUpPi
  123. _key_pickupfix_OnPlayerPickUpPi(playerid, pickupid);
  124. #endif
  125. return 1;
  126. }
  127. #if defined _ALS_OnPlayerPickUpPickup
  128. #undef OnPlayerPickUpPickup
  129. #else
  130. #define _ALS_OnPlayerPickUpPickup
  131. #endif
  132. #define OnPlayerPickUpPickup _key_pickupfix_OnPlayerPickUpPi
  133. #if defined _key_pickupfix_OnPlayerPickUpPi
  134. forward _key_pickupfix_OnPlayerPickUpPi(playerid, pickupid);
  135. #endif
  136.  
  137. #if defined Streamer_IncludeFileVersion
  138. public OnPlayerPickUpDynamicPickup(playerid, STREAMER_TAG_PICKUP pickupid)
  139. {
  140. _key_pickupfix_playerPickupData[playerid][_key_pickupfix_pickupID] = pickupid;
  141. _key_pickupfix_playerPickupData[playerid][_key_pickupfix_pickupType] = KEY_PICKUPFIX_PICK_TYPE_STREAM;
  142. _key_pickupfix_playerPickupData[playerid][_key_pickupfix_pickupTimestamp] = gettime();
  143.  
  144. if(false == _key_pickupfix_playerPickupData[playerid][_key_pickupfix_IsPickupUsed])
  145. return 1;
  146.  
  147. _key_pickupfix_playerPickupData[playerid][_key_pickupfix_pickupID] = KEY_PICKUPFIX_INVALID_PICKUP_ID;
  148. _key_pickupfix_playerPickupData[playerid][_key_pickupfix_pickupType] = KEY_PICKUPFIX_PICK_TYPE_INVALID;
  149. _key_pickupfix_playerPickupData[playerid][_key_pickupfix_pickupTimestamp] = 0;
  150. _key_pickupfix_playerPickupData[playerid][_key_pickupfix_IsPickupUsed] = false;
  151.  
  152. #if defined _key_pickupfix_OnPlayerPickUpDy
  153. _key_pickupfix_OnPlayerPickUpDy(playerid, pickupid);
  154. #endif
  155. return 1;
  156. }
  157. #if defined _W_OnPlayerPickUpDynamicPickup
  158. #undef OnPlayerPickUpDynamicPickup
  159. #else
  160. #define _W_OnPlayerPickUpDynamicPickup
  161. #endif
  162. #define OnPlayerPickUpDynamicPickup _key_pickupfix_OnPlayerPickUpDy
  163. #if defined _key_pickupfix_OnPlayerPickUpDy
  164. forward _key_pickupfix_OnPlayerPickUpDy(playerid, STREAMER_TAG_PICKUP pickupid);
  165. #endif
  166. #endif
  167.  
  168. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  169. {
  170. if(_key_pickupfix_PRESSED(KEY_PICKUPFIX_USED_KEY))
  171. {
  172. if(_key_pickupfix_playerPickupData[playerid][_key_pickupfix_pickupID] != KEY_PICKUPFIX_INVALID_PICKUP_ID)
  173. {
  174. if(false == _key_pickupfix_playerPickupData[playerid][_key_pickupfix_IsPickupUsed])
  175. {
  176. if(gettime() - _key_pickupfix_playerPickupData[playerid][_key_pickupfix_pickupTimestamp] <= 1)
  177. {
  178. _key_pickupfix_playerPickupData[playerid][_key_pickupfix_IsPickupUsed] = true;
  179.  
  180. #if defined Streamer_IncludeFileVersion
  181. if(_key_pickupfix_playerPickupData[playerid][_key_pickupfix_pickupType] == KEY_PICKUPFIX_PICK_TYPE_DEFAULT)
  182. CallRemoteFunction("OnPlayerPickUpPickup", "dd", playerid, _key_pickupfix_playerPickupData[playerid][_key_pickupfix_pickupID]);
  183. else
  184. CallRemoteFunction("OnPlayerPickUpDynamicPickup", "dd", playerid, _key_pickupfix_playerPickupData[playerid][_key_pickupfix_pickupID]);
  185. #else
  186. CallRemoteFunction("OnPlayerPickUpPickup", "dd", playerid, _key_pickupfix_playerPickupData[playerid][_key_pickupfix_pickupID]);
  187. #endif
  188. }
  189. else
  190. {
  191. _key_pickupfix_playerPickupData[playerid][_key_pickupfix_pickupID] = KEY_PICKUPFIX_INVALID_PICKUP_ID;
  192.  
  193. #if defined Streamer_IncludeFileVersion
  194. _key_pickupfix_playerPickupData[playerid][_key_pickupfix_pickupType] = KEY_PICKUPFIX_PICK_TYPE_INVALID;
  195. #endif
  196. _key_pickupfix_playerPickupData[playerid][_key_pickupfix_pickupTimestamp] = 0;
  197. _key_pickupfix_playerPickupData[playerid][_key_pickupfix_IsPickupUsed] = false;
  198.  
  199. return 1;
  200. }
  201. }
  202. }
  203. }
  204. #if defined _key_pickupfix_OnPlayerKeyState
  205. _key_pickupfix_OnPlayerKeyState(playerid, newkeys, oldkeys);
  206. #endif
  207. return 1;
  208. }
  209. #if defined _ALS_OnPlayerKeyStateChange
  210. #undef OnPlayerKeyStateChange
  211. #else
  212. #define _ALS_OnPlayerKeyStateChange
  213. #endif
  214. #define OnPlayerKeyStateChange _key_pickupfix_OnPlayerKeyState
  215. #if defined _key_pickupfix_OnPlayerKeyState
  216. forward _key_pickupfix_OnPlayerKeyState(playerid, newkeys, oldkeys);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement