#define Paste "KMRodados/Veнculo %d.ini" //Pasta para salvar a distвncia que cada veнculo percorreu
#define SaveDistance 1 // (0 - Desabilitar | 1 - Abilitar) O salvamento da distancia percorrida
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) {
static String[56]; //Definimos a string com 56 cйlulas
format(String, sizeof(String), "O veнculo %d percorreu %d metros.", vehicleid, GetMeters(vehicleid));
//Formatamos a string mostrando o ID do veнculo e a metragem percorrida
SendClientMessage(playerid, -1, String); //Mostramos ao player a mensagem
return true;
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) {
static String[56]; //Definimos a string com 56 cйlulas
format(String, sizeof(String), "O veнculo %d percorreu %0.3f quilфmetros.", vehicleid, GetKilometers(vehicleid));
//Formatamos a string mostrando o ID do veнculo e a quilometragem percorrida
SendClientMessage(playerid, -1, String); //Mostramos ao player a mensagem
return true;
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) {
static String[56]; //Definimos a string com 56 cйlulas
format(String, sizeof(String), "O veнculo %d percorreu %0.3f milhas.", vehicleid, GetMiles(vehicleid));
//Formatamos a string mostrando o ID do veнculo e as milhas percorrida
SendClientMessage(playerid, -1, String); //Mostramos ao player a mensagem
return true;
}
///////////////////////////////////////////////////////////////////////////////////
//
// |*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|
// |*| eDistance System |*|
// |*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|
//
// =====================================
// INTRODUЗГO
// =====================================
//
// Essa include permite a vocк verificar
// quanto um veнculo percorreu em Metros,
// Quilфmetros ou Milhas.
//
// =====================================
// NATIVES
// =====================================
//
// native GetMeters(vehicleid);
// native GetKilometers(vehicleid);
// native GetMiles(vehicleid);
// native E_SetVehiclePos(vehicleid, float:X, float:Y, float:Z);
//
// =====================================
// EXEMPLOS (MODO DE USO)
// =====================================
//
// *-- | METROS RODADOS | --*
// format(string, sizeof(string), "Esse veнculo percorreu %d Metros Rodados.", GetMeters(GetPlayerVehicleID(playerid)));
// SendClientMessage(playerid, -1, string);
//
// *-- | QUILФMETROS RODADOS | --*
// format(string, sizeof(string), "Esse veнculo percorreu %s Quilфmetros Rodados.", GetKilometers(GetPlayerVehicleID(playerid)));
// SendClientMessage(playerid, -1, string);
//
// *-- | MILHAS RODADOS | --*
// format(string, sizeof(string), "Esse veнculo percorreu %s Milhas Rodados.", GetMiles(GetPlayerVehicleID(playerid)));
// SendClientMessage(playerid, -1, string);
//
// =====================================
// CRЙDITOS
// =====================================
//
// * Include Criada por EditPawn *
// * BlueX e Paulor por me ajudar com algumas funзхes *
// * Lordz pelo tutorial de ligar Funзхes e Callbacks *
//
// =====================================
// BUGS, DЪVIDAS E SUGESTХES
// =====================================
//
// Acesse: http://forum.sa-mp.com/forumdisplay.php?f=56
//
//
///////////////////////////////////////////////////////////////////////////////////
/* ----- INCLUDE ----- */
#include a_samp
/* ----- DEFINES ----- */
#define GetMeters(%0) E@_R[%0]
#define GetKilometers(%0) (E@_R[%0] * 0.001)
#define GetMiles(%0) (E@_R[%0] * 0.000621)
#define ResetMetersTraveled(%0) E@_R[%0] = 0;
#define Paste "KMRodados/Veнculo %d.ini" //Pasta para salvar a distвncia que cada veнculo percorreu
#define SaveDistance 1 // (0 - Desabilitar | 1 - Abilitar) O salvamento da distancia percorrida
/* ----- VARS ----- */
new E@_R[MAX_VEHICLES] = 0,
Float:v@_P[3],
E@_Timer[MAX_PLAYERS];
#if SaveDistance == 1
new File:E@_Arq;
static E@_S[32],
E@_Ss[24];
#endif
/* ----- FORWARDS ----- */
forward E@_OnPlayerDisconnect(playerid, reason);
forward E@_OnPlayerStateChange(playerid, newstate, oldstate);
forward E@_At(playerid);
forward E@_OnPlayerExitVehicle(playerid, vehicleid);
forward E@_OnGameModeExit();
forward E@_OnGameModeInit();
/* ----- CALLBACKS ----- */
public OnGameModeInit() {
#if SaveDistance == 1
for(new x; x < MAX_VEHICLES; ++x) {
format(E@_S, sizeof(E@_S), Paste, x);
if(fexist(E@_S)) {
E@_Arq = fopen(E@_S, io_read);
fread(E@_Arq, E@_Ss);
E@_R[x] = strval(E@_Ss);
fclose(E@_Arq);
}
}
#endif
return CallLocalFunction("E@_OnGameModeInit", "");
}
#if defined _ALS_OnGameModeInit
#undef OnGameModeInit
#endif
#define OnGameModeInit E@_OnGameModeInit
public OnGameModeExit() {
#if SaveDistance == 1
for(new x; x < MAX_VEHICLES; ++x) {
if(E@_R[x] > 0) {
format(E@_S, sizeof(E@_S), Paste, x);
format(E@_Ss, sizeof(E@_Ss), "%d", E@_R[x]);
E@_Arq = fopen(E@_S, io_write);
fwrite(E@_Arq, E@_Ss);
fclose(E@_Arq);
}
}
#endif
return CallLocalFunction("E@_OnGameModeExit", "");
}
#if defined _ALS_OnGameModeExit
#undef OnGameModeExit
#endif
#define OnGameModeExit E@_OnGameModeExit
public OnPlayerDisconnect(playerid, reason) {
KillTimer(E@_Timer[playerid]);
return CallLocalFunction("E@_OnPlayerDisconnect", "id", playerid, reason);
}
#if defined _ALS_OnPlayerDisconnect
#undef OnPlayerDisconnect
#else
#define _ALS_OnPlayerDisconnect
#endif
#define OnPlayerDisconnect E@_OnPlayerDisconnect
public OnPlayerExitVehicle(playerid, vehicleid) {
KillTimer(E@_Timer[playerid]);
return CallLocalFunction("E@_OnPlayerExitVehicle", "id", playerid, vehicleid);
}
#if defined _ALS_OnPlayerExitVehicle
#undef OnPlayerExitVehicle
#endif
#define OnPlayerExitVehicle E@_OnPlayerExitVehicle
public E@_At(playerid) {
if(GetVehicleDistanceFromPoint(GetPlayerVehicleID(playerid), v@_P[0], v@_P[1], v@_P[2]) <= 100) {
E@_R[GetPlayerVehicleID(playerid)] += floatround(GetVehicleDistanceFromPoint(GetPlayerVehicleID(playerid), v@_P[0], v@_P[1], v@_P[2]));
}
GetVehiclePos(GetPlayerVehicleID(playerid), v@_P[0], v@_P[1], v@_P[2]);
/*
OBS: Caso queira fazer teste, apenas abilite essa parte e irб aparecer todas as formas de distвncia que o veнculo estб rodando.
new E@_Str[129];
format(E@_Str, sizeof(E@_Str), "(%d) Metros - (%0.3f) Quilфmetros - (%0.3f) Milhas", GetMeters(GetPlayerVehicleID(playerid)), GetKilometers(GetPlayerVehicleID(playerid)), GetMiles(GetPlayerVehicleID(playerid)));
SendClientMessage(playerid, -1, E@_Str);
*/
}
public OnPlayerStateChange(playerid, newstate, oldstate) {
if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER) {
GetVehiclePos(GetPlayerVehicleID(playerid), v@_P[0], v@_P[1], v@_P[2]);
E@_Timer[playerid] = SetTimerEx("E@_At", 1000, true, "i", playerid);
}
else if(oldstate == PLAYER_STATE_DRIVER && newstate == PLAYER_STATE_ONFOOT) KillTimer(E@_Timer[playerid]);
return CallLocalFunction("E@_OnPlayerStateChange", "idd", playerid, newstate, oldstate);
}
#if defined _ALS_OnPlayerStateChange
#undef OnPlayerStateChange
#else
#define _ALS_OnPlayerStateChange
#endif
#define OnPlayerStateChange E@_OnPlayerStateChange
/* ----- STOCK ----- */
stock E_SetVehiclePos(vehicleid, float:X, float:Y, float:Z) {
SetVehiclePos(vehicleid, X, Y, Z);
V@_P[0] = X, V@_P[1] = Y, V@_P[2] = Z;
}
E@_R
#define GetKilometers(%0) (E@_R[%0] * 0.001)
#define GetMiles(%0) (E@_R[%0] * 0.000621)
Dica:
Se vocк nгo queria os nъmeros finais da flutuante bastava colocar assim no format %0.2f - O nъmero 2 representa quantos nъmeros depois do ponto vocк deseja que apareзa. Mais a maneira mais simples й: pawn Код:
|
Como iria bugar? Pois ai eu tentava arrumar isso.
Hm, obrigado paulor, irei adaptar ![]() @Todos Obrigado @EDIT Paulor, mas se eu fizer com defines, ficara um nъmero um pouco extenso ? Pois depois do ponto seria melhor aparecer apenas 3 numeros. |
#define GetKilometers(%0) (E@_R[%0] * 0.001)
format(Str, 128, "Km: %0.2f", GetKilometers(vehicleid));
#define GetKilometers(%0) floatround(E@_R[%0] * 0.001)
format(Str, 128, "Km: %i", GetKilometers(vehicleid));
O modo que vocк fez estб retornando String isso й errado pois Metros, km e milhas sгo numйricos, entгo vocк deveria ter feito para retornar Float ou Inteiro ai й com vocк, caso fosse retornar Float a pessoa que fosse usar deveria fazer assim:
pawn Код:
pawn Код:
|
format(String, sizeof(String), "O veнculo %d percorreu %0.3f quilфmetros.", vehicleid, GetKilometers(vehicleid));