Advertisement
EditPawn

[Inc] eDistance System [PT]

Jan 2nd, 2013
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 6.60 KB | None | 0 0
  1. ///////////////////////////////////////////////////////////////////////////////////
  2. //
  3. //                 |*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|
  4. //                 |*|      eDistance System     |*|
  5. //                 |*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|
  6. //
  7. //               =====================================
  8. //                            INTRODUÇÃO
  9. //               =====================================
  10. //
  11. //               Essa include permite a você verificar
  12. //               quanto um veículo percorreu em Metros,
  13. //               Quilômetros ou Milhas.
  14. //
  15. //               =====================================
  16. //                             NATIVES
  17. //               =====================================
  18. //
  19. //               native GetMeters(vehicleid);
  20. //               native GetKilometers(vehicleid);
  21. //               native GetMiles(vehicleid);
  22. //               native E_SetVehiclePos(vehicleid, float:X, float:Y, float:Z);
  23. //
  24. //               =====================================
  25. //                      EXEMPLOS (MODO DE USO)
  26. //               =====================================
  27. //
  28. //                    *-- | METROS RODADOS | --*
  29. //               format(string, sizeof(string), "Esse veículo percorreu %d Metros Rodados.", GetMeters(GetPlayerVehicleID(playerid)));
  30. //               SendClientMessage(playerid, -1, string);
  31. //
  32. //                    *-- | QUILÔMETROS RODADOS | --*
  33. //               format(string, sizeof(string), "Esse veículo percorreu %s Quilômetros Rodados.", GetKilometers(GetPlayerVehicleID(playerid)));
  34. //               SendClientMessage(playerid, -1, string);
  35. //
  36. //                    *-- | MILHAS RODADOS | --*
  37. //               format(string, sizeof(string), "Esse veículo percorreu %s Milhas Rodados.", GetMiles(GetPlayerVehicleID(playerid)));
  38. //               SendClientMessage(playerid, -1, string);
  39. //
  40. //               =====================================
  41. //                             CRÉDITOS
  42. //               =====================================
  43. //
  44. //                  * Include Criada por EditPawn *
  45. //        * BlueX e Paulor por me ajudar com algumas funções *
  46. //        * Lordz pelo tutorial de ligar Funções e Callbacks *
  47. //
  48. //               =====================================
  49. //                     BUGS, DÚVIDAS E SUGESTÕES
  50. //               =====================================
  51. //
  52. //         Acesse: http://forum.sa-mp.com/forumdisplay.php?f=56
  53. //
  54. //
  55. ///////////////////////////////////////////////////////////////////////////////////
  56.  
  57. /* ----- INCLUDE ----- */
  58. #include    a_samp
  59.  
  60. /* ----- DEFINES ----- */
  61. #define   GetMeters(%0)              E@_R[%0]
  62. #define   GetKilometers(%0)         (E@_R[%0] * 0.001)
  63. #define   GetMiles(%0)              (E@_R[%0] * 0.000621)
  64. #define   ResetMetersTraveled(%0)    E@_R[%0] = 0;
  65. #define   Paste                      "KMRodados/Veículo %d.ini" //Pasta para salvar a distância que cada veículo percorreu
  66. #define   SaveDistance               1 // (0 - Desabilitar | 1 - Abilitar) O salvamento da distancia percorrida
  67.  
  68. /* ----- VARS ----- */
  69. new    E@_R[MAX_VEHICLES] = 0,
  70.        Float:v@_P[3],
  71.        E@_Timer[MAX_PLAYERS];
  72.        
  73. #if SaveDistance == 1
  74.     new    File:E@_Arq;
  75.     static E@_S[32],
  76.            E@_Ss[24];
  77. #endif
  78.  
  79. /* ----- FORWARDS ----- */
  80. forward E@_OnPlayerDisconnect(playerid, reason);
  81. forward E@_OnPlayerStateChange(playerid, newstate, oldstate);
  82. forward E@_At(playerid);
  83. forward E@_OnPlayerExitVehicle(playerid, vehicleid);
  84. forward E@_OnGameModeExit();
  85. forward E@_OnGameModeInit();
  86.  
  87. /* ----- CALLBACKS ----- */
  88. public OnGameModeInit() {
  89.     #if SaveDistance == 1
  90.         for(new x; x < MAX_VEHICLES; ++x) {
  91.             format(E@_S, sizeof(E@_S), Paste, x);
  92.             if(fexist(E@_S)) {
  93.                 E@_Arq = fopen(E@_S, io_read);
  94.                 fread(E@_Arq, E@_Ss);
  95.                 E@_R[x] = strval(E@_Ss);
  96.                 fclose(E@_Arq);
  97.             }
  98.         }
  99.     #endif
  100.     return CallLocalFunction("E@_OnGameModeInit", "");
  101. }
  102.  
  103. #if defined _ALS_OnGameModeInit
  104.     #undef OnGameModeInit
  105. #endif
  106. #define OnGameModeInit E@_OnGameModeInit
  107.  
  108. public OnGameModeExit() {
  109.     #if SaveDistance == 1
  110.         for(new x; x < MAX_VEHICLES; ++x) {
  111.             if(E@_R[x] > 0) {
  112.                 format(E@_S, sizeof(E@_S), Paste, x);
  113.                 format(E@_Ss, sizeof(E@_Ss), "%d", E@_R[x]);
  114.                 E@_Arq = fopen(E@_S, io_write);
  115.                 fwrite(E@_Arq, E@_Ss);
  116.                 fclose(E@_Arq);
  117.             }
  118.         }
  119.     #endif
  120.     return CallLocalFunction("E@_OnGameModeExit", "");
  121. }
  122.  
  123. #if defined _ALS_OnGameModeExit
  124.     #undef OnGameModeExit
  125. #endif
  126. #define OnGameModeExit E@_OnGameModeExit
  127.  
  128. public OnPlayerDisconnect(playerid, reason) {
  129.     KillTimer(E@_Timer[playerid]);
  130.     return CallLocalFunction("E@_OnPlayerDisconnect", "id", playerid, reason);
  131. }
  132.  
  133. #if defined _ALS_OnPlayerDisconnect
  134.     #undef OnPlayerDisconnect
  135. #else
  136.     #define _ALS_OnPlayerDisconnect
  137. #endif
  138. #define OnPlayerDisconnect E@_OnPlayerDisconnect
  139.  
  140. public OnPlayerExitVehicle(playerid, vehicleid) {
  141.     KillTimer(E@_Timer[playerid]);
  142.     return CallLocalFunction("E@_OnPlayerExitVehicle", "id", playerid, vehicleid);
  143. }
  144.  
  145. #if defined _ALS_OnPlayerExitVehicle
  146.     #undef OnPlayerExitVehicle
  147. #endif
  148. #define OnPlayerExitVehicle E@_OnPlayerExitVehicle
  149.  
  150. public E@_At(playerid) {
  151.     if(GetVehicleDistanceFromPoint(GetPlayerVehicleID(playerid), v@_P[0], v@_P[1], v@_P[2]) <= 100) {
  152.         E@_R[GetPlayerVehicleID(playerid)] += floatround(GetVehicleDistanceFromPoint(GetPlayerVehicleID(playerid), v@_P[0], v@_P[1], v@_P[2]));
  153.     }
  154.     GetVehiclePos(GetPlayerVehicleID(playerid), v@_P[0], v@_P[1], v@_P[2]);
  155. /*
  156.     OBS: Caso queira fazer teste, apenas abilite essa parte e irá aparecer todas as formas de distância que o veículo está rodando.
  157.  
  158.     new E@_Str[129];
  159.     format(E@_Str, sizeof(E@_Str), "(%d) Metros - (%0.3f) Quilômetros - (%0.3f) Milhas", GetMeters(GetPlayerVehicleID(playerid)), GetKilometers(GetPlayerVehicleID(playerid)), GetMiles(GetPlayerVehicleID(playerid)));
  160.     SendClientMessage(playerid, -1, E@_Str);
  161. */
  162. }
  163.  
  164. public OnPlayerStateChange(playerid, newstate, oldstate) {
  165.     if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER) {
  166.         GetVehiclePos(GetPlayerVehicleID(playerid), v@_P[0], v@_P[1], v@_P[2]);
  167.         E@_Timer[playerid] = SetTimerEx("E@_At", 1000, true, "i", playerid);
  168.     }
  169.     else if(oldstate == PLAYER_STATE_DRIVER && newstate == PLAYER_STATE_ONFOOT) KillTimer(E@_Timer[playerid]);
  170.     return CallLocalFunction("E@_OnPlayerStateChange", "idd", playerid, newstate, oldstate);
  171. }
  172.  
  173. #if defined _ALS_OnPlayerStateChange
  174.     #undef OnPlayerStateChange
  175. #else
  176.     #define _ALS_OnPlayerStateChange
  177. #endif
  178. #define OnPlayerStateChange E@_OnPlayerStateChange
  179.  
  180. /* ----- STOCK ----- */
  181. stock E_SetVehiclePos(vehicleid, float:X, float:Y, float:Z) {
  182.     SetVehiclePos(vehicleid, X, Y, Z);
  183.     V@_P[0] = X, V@_P[1] = Y, V@_P[2] = Z;
  184. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement