SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Português/Portuguese > Lançamentos/Releases

Reply
 
Thread Tools Display Modes
Old 02/01/2013, 07:21 PM   #1
EditPawn
Gangsta
 
EditPawn's Avatar
 
Join Date: May 2012
Posts: 966
Reputation: 67
Default eDistance System

• 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.
Code:
#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
• 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:
Code:
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;
}
Exemplo: O veículo 542 percorreu 1265 metros.

...

• GetKilometers(vehicleid) - retorna a um número flutuante, ou seja:
Code:
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;
}
Exemplo: O veículo 542 percorreu 1.265 quilômetros. (Equivale a 1265m)

...

• GetKilometers(vehicleid) - retorna a um número flutuante, ou seja:
Code:
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;
}
Exemplo: O veículo 542 percorreu 0.786 milhas. (Equivale a 1265m)


Bugs/Dúvidas/Sugestões

Comente abaixo


Download

Code:
///////////////////////////////////////////////////////////////////////////////////
//
//				   |*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|
//	    		   |*|  	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: [url]http://forum.sa-mp.com/forumdisplay.php?f=56[/url]
//
//
///////////////////////////////////////////////////////////////////////////////////

/* ----- INCLUDE ----- */
#include	a_samp

/* ----- DEFINES ----- */
#define	  GetMeters(%0)   		     [email protected]_R[%0]
#define   GetKilometers(%0)         ([email protected]_R[%0] * 0.001)
#define   GetMiles(%0)    	        ([email protected]_R[%0] * 0.000621)
#define   ResetMetersTraveled(%0)    [email protected]_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    [email protected]_R[MAX_VEHICLES] = 0,
	   Float:[email protected]_P[3],
	   [email protected]_Timer[MAX_PLAYERS];
	   
#if SaveDistance == 1
	new	   File:[email protected]_Arq;
	static [email protected]_S[32],
       	   [email protected]_Ss[24];
#endif

/* ----- FORWARDS ----- */
forward [email protected]_OnPlayerDisconnect(playerid, reason);
forward [email protected]_OnPlayerStateChange(playerid, newstate, oldstate);
forward [email protected]_At(playerid);
forward [email protected]_OnPlayerExitVehicle(playerid, vehicleid);
forward [email protected]_OnGameModeExit();
forward [email protected]_OnGameModeInit();

/* ----- CALLBACKS ----- */
public OnGameModeInit() {
    #if SaveDistance == 1
	    for(new x; x < MAX_VEHICLES; ++x) {
	    	format([email protected]_S, sizeof([email protected]_S), Paste, x);
			if(fexist([email protected]_S)) {
			    [email protected]_Arq = fopen([email protected]_S, io_read);
			    fread([email protected]_Arq, [email protected]_Ss);
			    [email protected]_R[x] = strval([email protected]_Ss);
			    fclose([email protected]_Arq);
			}
		}
	#endif
	return CallLocalFunction("[email protected]_OnGameModeInit", "");
}

#if defined _ALS_OnGameModeInit
	#undef OnGameModeInit
#endif
#define OnGameModeInit [email protected]_OnGameModeInit

public OnGameModeExit() {
	#if SaveDistance == 1
		for(new x; x < MAX_VEHICLES; ++x) {
		    if([email protected]_R[x] > 0) {
    			format([email protected]_S, sizeof([email protected]_S), Paste, x);
				format([email protected]_Ss, sizeof([email protected]_Ss), "%d", [email protected]_R[x]);
			    [email protected]_Arq = fopen([email protected]_S, io_write);
			    fwrite([email protected]_Arq, [email protected]_Ss);
			    fclose([email protected]_Arq);
			}
		}
	#endif
	return CallLocalFunction("[email protected]_OnGameModeExit", "");
}

#if defined _ALS_OnGameModeExit
	#undef OnGameModeExit
#endif
#define OnGameModeExit [email protected]_OnGameModeExit

public OnPlayerDisconnect(playerid, reason) {
    KillTimer([email protected]_Timer[playerid]);
	return CallLocalFunction("[email protected]_OnPlayerDisconnect", "id", playerid, reason);
}

#if defined _ALS_OnPlayerDisconnect
    #undef OnPlayerDisconnect
#else
    #define _ALS_OnPlayerDisconnect
#endif
#define OnPlayerDisconnect [email protected]_OnPlayerDisconnect

public OnPlayerExitVehicle(playerid, vehicleid) {
	KillTimer([email protected]_Timer[playerid]);
	return CallLocalFunction("[email protected]_OnPlayerExitVehicle", "id", playerid, vehicleid);
}

#if defined _ALS_OnPlayerExitVehicle
	#undef OnPlayerExitVehicle
#endif
#define OnPlayerExitVehicle [email protected]_OnPlayerExitVehicle

public [email protected]_At(playerid) {
	if(GetVehicleDistanceFromPoint(GetPlayerVehicleID(playerid), [email protected]_P[0], [email protected]_P[1], [email protected]_P[2]) <= 100) {
		[email protected]_R[GetPlayerVehicleID(playerid)] += floatround(GetVehicleDistanceFromPoint(GetPlayerVehicleID(playerid), [email protected]_P[0], [email protected]_P[1], [email protected]_P[2]));
    }
	GetVehiclePos(GetPlayerVehicleID(playerid), [email protected]_P[0], [email protected]_P[1], [email protected]_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 [email protected]_Str[129];
    format([email protected]_Str, sizeof([email protected]_Str), "(%d) Metros - (%0.3f) Quilômetros - (%0.3f) Milhas", GetMeters(GetPlayerVehicleID(playerid)), GetKilometers(GetPlayerVehicleID(playerid)), GetMiles(GetPlayerVehicleID(playerid)));
    SendClientMessage(playerid, -1, [email protected]_Str);
*/
}

public OnPlayerStateChange(playerid, newstate, oldstate) {
	if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER) {
	    GetVehiclePos(GetPlayerVehicleID(playerid), [email protected]_P[0], [email protected]_P[1], [email protected]_P[2]);
		[email protected]_Timer[playerid] = SetTimerEx("[email protected]_At", 1000, true, "i", playerid);
	}
	else if(oldstate == PLAYER_STATE_DRIVER && newstate == PLAYER_STATE_ONFOOT) KillTimer([email protected]_Timer[playerid]);
	return CallLocalFunction("[email protected]_OnPlayerStateChange", "idd", playerid, newstate, oldstate);
}

#if defined _ALS_OnPlayerStateChange
    #undef OnPlayerStateChange
#else
    #define _ALS_OnPlayerStateChange
#endif
#define OnPlayerStateChange [email protected]_OnPlayerStateChange

/* ----- STOCK ----- */
stock E_SetVehiclePos(vehicleid, float:X, float:Y, float:Z) {
	SetVehiclePos(vehicleid, X, Y, Z);
	[email protected]_P[0] = X, [email protected]_P[1] = Y, [email protected]_P[2] = Z;
}
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 http://forum.sa-mp.com/showthread.php?t=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
__________________
Usando zCmd/sscanf/SQLite
Voltando com pawn e novo Projeto a caminho.

Projetos:
[Tutorial] DOF2 - Registro/Login
[GameMode] Brasil Zombie Games LS - BASE
[FilterScript] E_Anims v2.0
[Include] eDistance System

Code:
Se não houver crítica não haverá evolução!

Last edited by EditPawn; 04/01/2013 at 02:01 PM.
EditPawn is offline   Reply With Quote
Old 02/01/2013, 07:27 PM   #2
DrTHE
High-roller
 
DrTHE's Avatar
 
Join Date: Feb 2011
Location: Belo Horizonte, Brazil
Posts: 1,158
Reputation: 150
Default Re: eDistance System

Muito bom, uma vez acho que o bruno fez algo parecido.
DrTHE is offline   Reply With Quote
Old 02/01/2013, 07:32 PM   #3
EditPawn
Gangsta
 
EditPawn's Avatar
 
Join Date: May 2012
Posts: 966
Reputation: 67
Default Re: eDistance System

Quote:
Originally Posted by DrTHE View Post
Muito bom, uma vez acho que o bruno fez algo parecido.
Sim, isso é verdade.
Aqui está o que ele fez: http://forum.sa-mp.com/showthread.ph...hlight=vehicle

Mas percebi que o dele não pegava em Milhas e também a kilometragem só mostrava números inteiros, ai decidi fazer essa include.


Obrigado
__________________
Usando zCmd/sscanf/SQLite
Voltando com pawn e novo Projeto a caminho.

Projetos:
[Tutorial] DOF2 - Registro/Login
[GameMode] Brasil Zombie Games LS - BASE
[FilterScript] E_Anims v2.0
[Include] eDistance System

Code:
Se não houver crítica não haverá evolução!
EditPawn is offline   Reply With Quote
Old 02/01/2013, 07:33 PM   #4
Miqueias Barros
Gangsta
 
Miqueias Barros's Avatar
 
Join Date: May 2010
Location: Recife - PE
Posts: 624
Reputation: 25
Default Re : eDistance System

Gostei das funções cara.
Parabéns!
__________________
Tudo SA-MP - TUDO PARA SEU SERVIDOR
www.tudosamp.epizy.com
Miqueias Barros is offline   Reply With Quote
Old 02/01/2013, 07:48 PM   #5
Sky™
High-roller
 
Sky™'s Avatar
 
Join Date: Aug 2012
Location: Apple Computer™
Posts: 1,788
Reputation: 351
Default Re: eDistance System

bem legal sua include ja sabia como fazer ela e fiz no gamemode mesmo não vi razão para uma include!
mais toda forma!

belo trabalho

maldito Kuddy

acho que isso só complica você mesmo de fazer seu code!











_
__________________
Sky™ is offline   Reply With Quote
Old 02/01/2013, 07:52 PM   #6
DiReCt hIt
Gangsta
 
DiReCt hIt's Avatar
 
Join Date: Oct 2012
Posts: 663
Reputation: 17
Default Re: eDistance System

Bom trabalho, funções legais a include .
__________________
Code:
                                                                        ® | Contato | ®                                
                                                                   Skype: serial-megamods
                                                                   Msn: [email protected]



 
                  Nas Grandes Batalhas Da Vida, O Primeiro Passo Para a Vitoria, e o Desejo de Vencer .
DiReCt hIt is offline   Reply With Quote
Old 02/01/2013, 08:00 PM   #7
Q.I
Gangsta
 
Q.I's Avatar
 
Join Date: Aug 2012
Location: Brasil
Posts: 992
Reputation: 49
Default Re: eDistance System

muito bom será , útil para alguem esses dias tem gente pedindo algo sobre isso.
+rep = 2 <
Q.I is offline   Reply With Quote
Old 02/01/2013, 08:05 PM   #8
EditPawn
Gangsta
 
EditPawn's Avatar
 
Join Date: May 2012
Posts: 966
Reputation: 67
Default Re: eDistance System

@Miqueias Barros
Obrigado

@Sky
Obrigado mano
Na verdade já tinha dado um nome a essa variável, mas troquei e não atrapalha pois quando você cria algo você sabe como modificar
Na verdade nem sabia um nome pra colocar -q

@DiReCt hIt
Thanks

@Q.I
Valeu


@TOPIC
Aliás, coloquei uma função nova, é bem simples mas pode ser útil. ResetMetersTraveled(vehicleid);
__________________
Usando zCmd/sscanf/SQLite
Voltando com pawn e novo Projeto a caminho.

Projetos:
[Tutorial] DOF2 - Registro/Login
[GameMode] Brasil Zombie Games LS - BASE
[FilterScript] E_Anims v2.0
[Include] eDistance System

Code:
Se não houver crítica não haverá evolução!
EditPawn is offline   Reply With Quote
Old 02/01/2013, 08:14 PM   #9
HeyHoLetsGo
Huge Clucker
 
HeyHoLetsGo's Avatar
 
Join Date: Dec 2012
Location: Jaguariúna - SP
Posts: 442
Reputation: 87
Default Re: eDistance System

Legal, gostei (:
__________________
BOSSRPG
Um novo estilo de RPG.

Progresso: 35% [llllllllll]
Desenvolvendo: Sistema de internet/Tablet
HeyHoLetsGo is offline   Reply With Quote
Old 02/01/2013, 09:16 PM   #10
[NVC]iTrevaS
High-roller
 
[NVC]iTrevaS's Avatar
 
Join Date: Jan 2012
Location: Paraguay - P.J.C
Posts: 1,040
Reputation: 50
Default Respuesta: eDistance System

Ficou ótimo
[NVC]iTrevaS is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[FilterScript] NRank System V1.0 | Advanced Rank System | 5+ Commands | Dialog System [Much More] Nirzor Filterscripts 9 18/04/2014 09:49 PM
[FilterScript] Cross Admin System V1.2 [updated] + Added IRC System + Anti Cheat(sscanf, dcmd,y_ini) No.1 Admin System CROSS_Hunter Filterscripts 21 02/01/2013 06:32 PM
[FilterScript] Cross Admin System V1.1 [updated] + Added V.I.P System(sscanf, dcmd,y_ini) No.1 Admin System CROSS_Hunter Filterscripts 8 10/09/2012 11:18 AM


All times are GMT. The time now is 03:39 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.