02.01.2013, 19:21
(
Последний раз редактировалось EditPawn; 04.01.2013 в 14:01.
)
• eDistance System •
Introduзгo
Й uma include que lhe permite verificar a distвncia que um veнculo jб percorreu sendo em Metros, Quilфmetros ou Milhas.
Possui sistema de escolha caso vocк queira salvar a distвncia percorrida por cada veнculo.
Nativas
• GetMeters(vehicleid);................................................ ..................................Verifica em Metros a distвncia percorrida
• GetKilometers(vehicleid);................................................ ......................Verifica em Quilфmetros a distвncia percorrida
• GetMiles(vehicleid);................................................ ......................................Verifica em Milhas a distвncia percorrida
• ResetMetersTraveled(vehicleid);................................................ .....................Reseta a metragem percorrida do veнculo
• E_SetVehiclePos(vehicleid, float:X, float:Y, float:Z);.........Define a posiзгo do veнculo evitando erros na distancia percorrida
• IMPORTANTE •
• Sempre que for definir a posiзгo de um veнculo use a nativa E_SetVehiclePos, caso vocк nгo usб-la poderб bugar a quilфmetragem do veнculo.
• Crie uma pasta chamada "KMRodados" em sua ScriptFiles caso vocк queira salvar os dados da distвncia percorrida de cada veнculo e altere na include a define "SaveDistance" para 1.
• Caso queira alterar a pasta de destino, apenas troque a define "Paste".
Atualizaзхes
03/01/2013 - Bug's concertados e adicionado nova native (E_SetVehiclePos)
04/01/2013 - Adicionado sistema de salvamento (file.inc)
Modo de Uso
• GetMeters(vehicleid) - retorna a nъmeros inteiros, ou seja:
Exemplo: O veнculo 542 percorreu 1265 metros.
...
• GetKilometers(vehicleid) - retorna a um nъmero flutuante, ou seja:
Exemplo: O veнculo 542 percorreu 1.265 quilфmetros. (Equivale a 1265m)
...
• GetKilometers(vehicleid) - retorna a um nъmero flutuante, ou seja:
Exemplo: O veнculo 542 percorreu 0.786 milhas. (Equivale a 1265m)
Bugs/Dъvidas/Sugestхes
Comente abaixo
Download
Pastebin
Observaзхes
№Demorei alguns minutos para criar e 1 dia para testar e melhorar a otimizaзгo de alguns cуdigos.
ІEssa й minha primeira include que faзo, pode conter erros ou atй desatenзхes, caso contenha algo que nгo esteja de acordo por favor comente abaixo.
іSalve como e_km.inc
BUG's Encontrados
1° - Se um jogador cair do veнculo a verificaзгo continua. (CONCERTADO)
2° - Ao teleportar o veнculo a distвncia do veнculo era maior do que seria. (CONCERTADO)
Crйditos
Include criada por EditPawn
Paulor e BlueX por me ajudarem em algumas funзхes
Lordz pelo tutorial de ligar Funзхes e Callbacks https://sampforum.blast.hk/showthread.php?tid=392061
Fonte dos Cбlculos: http://www.convertworld.com/pt/comprimento/
leonardo1434 por ter me avisado do bug que iria ocorrer usando SetVehiclePos
Espero que gostem
Introduзгo
Й uma include que lhe permite verificar a distвncia que um veнculo jб percorreu sendo em Metros, Quilфmetros ou Milhas.
Possui sistema de escolha caso vocк queira salvar a distвncia percorrida por cada veнculo.
Nativas
• GetMeters(vehicleid);................................................ ..................................Verifica em Metros a distвncia percorrida
• GetKilometers(vehicleid);................................................ ......................Verifica em Quilфmetros a distвncia percorrida
• GetMiles(vehicleid);................................................ ......................................Verifica em Milhas a distвncia percorrida
• ResetMetersTraveled(vehicleid);................................................ .....................Reseta a metragem percorrida do veнculo
• E_SetVehiclePos(vehicleid, float:X, float:Y, float:Z);.........Define a posiзгo do veнculo evitando erros na distancia percorrida
• IMPORTANTE •
• Sempre que for definir a posiзгo de um veнculo use a nativa E_SetVehiclePos, caso vocк nгo usб-la poderб bugar a quilфmetragem do veнculo.
• Crie uma pasta chamada "KMRodados" em sua ScriptFiles caso vocк queira salvar os dados da distвncia percorrida de cada veнculo e altere na include a define "SaveDistance" para 1.
pawn Код:
#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
Atualizaзхes
03/01/2013 - Bug's concertados e adicionado nova native (E_SetVehiclePos)
04/01/2013 - Adicionado sistema de salvamento (file.inc)
Modo de Uso
• GetMeters(vehicleid) - retorna a nъmeros inteiros, ou seja:
pawn Код:
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;
}
...
• GetKilometers(vehicleid) - retorna a um nъmero flutuante, ou seja:
pawn Код:
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;
}
...
• GetKilometers(vehicleid) - retorna a um nъmero flutuante, ou seja:
pawn Код:
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;
}
Bugs/Dъvidas/Sugestхes
Comente abaixo

Download
pawn Код:
///////////////////////////////////////////////////////////////////////////////////
//
// |*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|
// |*| 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;
}
Observaзхes
№Demorei alguns minutos para criar e 1 dia para testar e melhorar a otimizaзгo de alguns cуdigos.
ІEssa й minha primeira include que faзo, pode conter erros ou atй desatenзхes, caso contenha algo que nгo esteja de acordo por favor comente abaixo.
іSalve como e_km.inc
BUG's Encontrados
1° - Se um jogador cair do veнculo a verificaзгo continua. (CONCERTADO)
2° - Ao teleportar o veнculo a distвncia do veнculo era maior do que seria. (CONCERTADO)
Crйditos
Include criada por EditPawn
Paulor e BlueX por me ajudarem em algumas funзхes
Lordz pelo tutorial de ligar Funзхes e Callbacks https://sampforum.blast.hk/showthread.php?tid=392061
Fonte dos Cбlculos: http://www.convertworld.com/pt/comprimento/
leonardo1434 por ter me avisado do bug que iria ocorrer usando SetVehiclePos
Espero que gostem
