Advertisement
Guest User

Untitled

a guest
May 25th, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.23 KB | None | 0 0
  1.  
  2.  
  3. /*
  4. native CreateArea(Float:minX, Float:maxX, Float:minY, Float:maxY);
  5. native DestroyArea(areaid);
  6. native IsPlayerInArea(playerid, areaid);
  7. native GetPlayerInArea(playerid);
  8. native SetPlayerInArea(playerid,areaid);
  9.  
  10. native CreatePlayerArea(playerid,Float:minX, Float:maxX, Float:minY, Float:maxY);
  11. native DestroyPlayerArea(playerid,areaid);
  12. native IsPlayerInPlayerArea(playerid, areaid);
  13. native GetPlayerInPlayerArea(playerid);
  14. native SetPlayerInPlayerArea(playerid,areaid);
  15.  
  16. native AR_OnPlayerConnect(playerid);
  17. native AR_OnPlayerDisconnect(playerid);
  18. native AR_OnGameModeInit();
  19. */
  20.  
  21. #include <a_samp>
  22.  
  23. #define MAX_AREAS 100 // Nombre maximum d'area
  24. #define MAX_PLAYER_AREAS 100 // Nombre maximum de Player Area
  25.  
  26. #define INVALID_AREA -1
  27.  
  28. forward OnPlayerEnterArea(playerid,areaid);
  29. forward OnPlayerExitArea(playerid,areaid);
  30. forward OnPlayerEnterPlayerArea(playerid,areaid);
  31. forward OnPlayerExitPlayerArea(playerid,areaid);
  32. forward TimerVerifArea();
  33.  
  34. enum ARInfo
  35. {
  36. Float:AminX,
  37. Float:AmaxX,
  38. Float:AminY,
  39. Float:AmaxY,
  40. Valid,
  41. }
  42. new AreaInfo[MAX_AREAS][ARInfo];
  43. new PlayerAreaInfo[MAX_PLAYERS][MAX_AREAS][ARInfo];
  44.  
  45. new PlayerInArea[MAX_PLAYERS];
  46. new PlayerInPlayerArea[MAX_PLAYERS];
  47. new AreaTimer;
  48.  
  49. /* Coeur du systeme */
  50. public TimerVerifArea()
  51. {
  52. for(new i=0;i<MAX_PLAYERS;i++)
  53. {
  54. if(IsPlayerConnected(i))
  55. {
  56. // Verification Area
  57. if(PlayerInArea[i] == INVALID_AREA)
  58. {
  59. for(new a=0;a<MAX_AREAS;a++)
  60. {
  61. if(IsPlayerInArea(i,a))
  62. {
  63. PlayerInArea[i] = a;
  64. OnPlayerEnterArea(i, a);
  65. }
  66. }
  67. }
  68. else
  69. {
  70. if(!IsPlayerInArea(i,PlayerInArea[i]))
  71. {
  72. OnPlayerExitArea(i, PlayerInArea[i]);
  73. PlayerInArea[i] = INVALID_AREA;
  74. }
  75. }
  76. // Verification Player Area
  77. if(PlayerInPlayerArea[i] == INVALID_AREA)
  78. {
  79. for(new a=0;a<MAX_PLAYER_AREAS;a++)
  80. {
  81. if(IsPlayerInPlayerArea(i,a))
  82. {
  83. PlayerInPlayerArea[i] = a;
  84. OnPlayerEnterPlayerArea(i, a);
  85. }
  86. }
  87. }
  88. else
  89. {
  90. if(!IsPlayerInPlayerArea(i,PlayerInPlayerArea[i]))
  91. {
  92. OnPlayerExitPlayerArea(i, PlayerInPlayerArea[i]);
  93. PlayerInPlayerArea[i] = INVALID_AREA;
  94. }
  95. }
  96. }
  97. }
  98. return 1;
  99. }
  100.  
  101. /* AREA */
  102. stock CreateArea(Float:minX, Float:maxX, Float:minY, Float:maxY)
  103. {
  104. for(new a=0;a<MAX_AREAS;a++)
  105. {
  106. if(AreaInfo[a][Valid] == 0)
  107. {
  108. AreaInfo[a][AminX] = minX;
  109. AreaInfo[a][AmaxX] = maxX;
  110. AreaInfo[a][AminY] = minY;
  111. AreaInfo[a][AmaxY] = maxY;
  112. AreaInfo[a][Valid] = 1;
  113. return a;
  114. }
  115. }
  116. return INVALID_AREA;
  117. }
  118.  
  119. stock DestroyArea(areaid)
  120. {
  121. if(areaid < 0 || areaid > MAX_AREAS) return false;
  122. if(AreaInfo[areaid][Valid] == 1)
  123. {
  124. AreaInfo[areaid][AminX] = 0;
  125. AreaInfo[areaid][AmaxX] = 0;
  126. AreaInfo[areaid][AminY] = 0;
  127. AreaInfo[areaid][AmaxY] = 0;
  128. AreaInfo[areaid][Valid] = 0;
  129. for(new i=0;i<MAX_PLAYERS;i++)
  130. {
  131. if(IsPlayerConnected(i))
  132. {
  133. if(GetPlayerInArea(i) == areaid)
  134. {
  135. PlayerInArea[i] = INVALID_AREA;
  136. }
  137. }
  138. }
  139. return true;
  140. }
  141. return false;
  142. }
  143.  
  144. stock IsPlayerInArea(playerid, areaid)
  145. {
  146. if(areaid < 0 || areaid > MAX_AREAS) return false;
  147. if(AreaInfo[areaid][Valid] == 1)
  148. {
  149. new Float:x,Float:y,Float:z;
  150. GetPlayerPos(playerid, x,y,z);
  151. if (x > AreaInfo[areaid][AminX] && x < AreaInfo[areaid][AmaxX] && y > AreaInfo[areaid][AminY] && y < AreaInfo[areaid][AmaxY]) return true;
  152. }
  153. return false;
  154. }
  155.  
  156. stock GetPlayerInArea(playerid)
  157. {
  158. return PlayerInArea[playerid];
  159. }
  160.  
  161. stock SetPlayerInArea(playerid,areaid)
  162. {
  163. if(areaid < 0 || areaid > MAX_AREAS) return false;
  164. if(AreaInfo[areaid][Valid] == 1)
  165. {
  166. new Float:x = floatsub(AreaInfo[areaid][AmaxX],floatdiv(floatsub(AreaInfo[areaid][AmaxX],AreaInfo[areaid][AminX]),2));
  167. new Float:y = floatsub(AreaInfo[areaid][AmaxY],floatdiv(floatsub(AreaInfo[areaid][AmaxY],AreaInfo[areaid][AminY]),2));
  168. SetPlayerPosFindZ(playerid,x,y,1000.0);
  169. }
  170. return false;
  171. }
  172.  
  173. /* PLAYER AREA */
  174. stock CreatePlayerArea(playerid,Float:minX, Float:maxX, Float:minY, Float:maxY)
  175. {
  176. for(new a=0;a<MAX_PLAYER_AREAS;a++)
  177. {
  178. if(PlayerAreaInfo[playerid][a][Valid] == 0)
  179. {
  180. PlayerAreaInfo[playerid][a][AminX] = minX;
  181. PlayerAreaInfo[playerid][a][AmaxX] = maxX;
  182. PlayerAreaInfo[playerid][a][AminY] = minY;
  183. PlayerAreaInfo[playerid][a][AmaxY] = maxY;
  184. PlayerAreaInfo[playerid][a][Valid] = 1;
  185. return a;
  186. }
  187. }
  188. return INVALID_AREA;
  189. }
  190.  
  191. stock DestroyPlayerArea(playerid,areaid)
  192. {
  193. if(areaid < 0 || areaid > MAX_PLAYER_AREAS) return false;
  194. if(PlayerAreaInfo[playerid][areaid][Valid] == 1)
  195. {
  196. PlayerAreaInfo[playerid][areaid][AminX] = 0;
  197. PlayerAreaInfo[playerid][areaid][AmaxX] = 0;
  198. PlayerAreaInfo[playerid][areaid][AminY] = 0;
  199. PlayerAreaInfo[playerid][areaid][AmaxY] = 0;
  200. PlayerAreaInfo[playerid][areaid][Valid] = 0;
  201. if(GetPlayerInPlayerArea(playerid) == areaid)
  202. {
  203. PlayerInPlayerArea[playerid] = INVALID_AREA;
  204. }
  205. return true;
  206. }
  207. return false;
  208. }
  209. stock GetPlayerInPlayerArea(playerid)
  210. {
  211. return PlayerInPlayerArea[playerid];
  212. }
  213.  
  214. stock SetPlayerInPlayerArea(playerid,areaid)
  215. {
  216. if(areaid < 0 || areaid > MAX_PLAYER_AREAS) return false;
  217. if(PlayerAreaInfo[playerid][areaid][Valid] == 1)
  218. {
  219. new Float:x = floatsub(PlayerAreaInfo[playerid][areaid][AmaxX],floatdiv(floatsub(PlayerAreaInfo[playerid][areaid][AmaxX],PlayerAreaInfo[playerid][areaid][AminX]),2));
  220. new Float:y = floatsub(PlayerAreaInfo[playerid][areaid][AmaxY],floatdiv(floatsub(PlayerAreaInfo[playerid][areaid][AmaxY],PlayerAreaInfo[playerid][areaid][AminY]),2));
  221. SetPlayerPosFindZ(playerid,x,y,1000.0);
  222. }
  223. return false;
  224. }
  225.  
  226. stock IsPlayerInPlayerArea(playerid, areaid)
  227. {
  228. if(areaid < 0 || areaid > MAX_PLAYER_AREAS) return false;
  229. if(AreaInfo[areaid][Valid] == 1)
  230. {
  231. new Float:x,Float:y,Float:z;
  232. GetPlayerPos(playerid, x,y,z);
  233. if (x > PlayerAreaInfo[playerid][areaid][AminX] && x < PlayerAreaInfo[playerid][areaid][AmaxX] && y > PlayerAreaInfo[playerid][areaid][AminY] && y < PlayerAreaInfo[playerid][areaid][AmaxY]) return true;
  234. }
  235. return false;
  236. }
  237.  
  238. /* /!\ INDISPENSABLE !!! */
  239.  
  240.  
  241. AR_OnGameModeInit()
  242. {
  243. for(new a=0;a<MAX_PLAYER_AREAS;a++)
  244. {
  245. AreaInfo[a][AminX] = 0;
  246. AreaInfo[a][AmaxX] = 0;
  247. AreaInfo[a][AminY] = 0;
  248. AreaInfo[a][AmaxY] = 0;
  249. AreaInfo[a][Valid] = 0;
  250. }
  251. AreaTimer = SetTimer("TimerVerifArea",500,1);
  252. return 1;
  253. }
  254. stock AR_OnGameModeExit()
  255. {
  256. KillTimer(AreaTimer);
  257. }
  258.  
  259. AR_OnPlayerConnect(playerid)
  260. {
  261. PlayerInArea[playerid] = INVALID_AREA;
  262. PlayerInPlayerArea[playerid] = INVALID_AREA;
  263. for(new pa=0;pa<MAX_PLAYER_AREAS;pa++)
  264. {
  265. PlayerAreaInfo[playerid][pa][AminX] = 0;
  266. PlayerAreaInfo[playerid][pa][AmaxX] = 0;
  267. PlayerAreaInfo[playerid][pa][AminY] = 0;
  268. PlayerAreaInfo[playerid][pa][AmaxY] = 0;
  269. PlayerAreaInfo[playerid][pa][Valid] = 0;
  270. }
  271. return 1;
  272. }
  273.  
  274. AR_OnPlayerDisconnect(playerid)
  275. {
  276. PlayerInArea[playerid] = INVALID_AREA;
  277. PlayerInPlayerArea[playerid] = INVALID_AREA;
  278. for(new pa=0;pa<MAX_PLAYER_AREAS;pa++)
  279. {
  280. PlayerAreaInfo[playerid][pa][AminX] = 0;
  281. PlayerAreaInfo[playerid][pa][AmaxX] = 0;
  282. PlayerAreaInfo[playerid][pa][AminY] = 0;
  283. PlayerAreaInfo[playerid][pa][AmaxY] = 0;
  284. PlayerAreaInfo[playerid][pa][Valid] = 0;
  285. }
  286. return 1;
  287. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement