22.11.2018, 11:21
Й uma include que achei no fуrum, da uma olhada encima do cуdigo.
Ah, e outra coisa nada haver com isso, na verdade, uma dъvida:
Eu estou salvando o Id dos veнculos pelo ARQUIVO, tipo, se jб possui Veiculo1, vai pro 2..
Tem algum problema? Ou eu tenho que identificar o Id exato do veнculo? Nгo tem como eu ser mais direto que isso.
PHP код:
///////////////////////////////////////////////////////////////////////////////////
//
// |*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|
// |*| 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 PegarKMRodado(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.", PegarKMRodado(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 PegarKMRodado(%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 0 // (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)), PegarKMRodado(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;
}
Eu estou salvando o Id dos veнculos pelo ARQUIVO, tipo, se jб possui Veiculo1, vai pro 2..
Tem algum problema? Ou eu tenho que identificar o Id exato do veнculo? Nгo tem como eu ser mais direto que isso.