[Aporte]Velocímetro LS-RP.es

Aprende lo que no sabes de este lenguaje y encuentra herramientas y códigos útiles.

Moderador: Ayudantes

Reglas del Foro
  • Si tu código es corto, no crees un tema nuevo para liberarlo, publica un mensaje en el tema [Funciones] ¡Publica tu código aquí!.
  • Si creas una guía, debes explicar el código claramente. Evita poner la explicación en forma de comentarios dentro del mismo y no olvides utilizar el BBCode correspondiente: [Pawn]Código aquí[/Pawn].
  • No postear códigos sin probar. Publicar códigos con errores (que impidan compilar el script para el cual está destinado) en este apartado es motivo de sanción.
  • Si tu código necesita plugins, includes u otros códigos adicionales para funcionar, debes mencionarlo en el mensaje.
  • Si has utilizado códigos de otros autores, recuerda colocar los créditos correspondientes. (El plagio es motivo de sanción).
  • Si tu aporte es para un GameMode en específico, debes publicar el tema en el apartado "Guías y Aportes para GameModes específicos".
Responder
Avatar de Usuario
EdinsonWalker
Senior
Senior
Mensajes: 1130
Registrado: 21 Feb 2014 10:34
Ubicación: dios no existe
Contactar:
Reputación: 93

11 Ene 2018 23:16

Muy Bueno Amigo Sigue ASi
Consumido
Avatar de Usuario
Jhonyx
Aprendiz
Aprendiz
Mensajes: 46
Registrado: 05 Feb 2017 10:19
Reputación: 1

19 Ene 2018 23:50

Me encantó, +1 -thumbup -clapping
alvaro9564
Aprendiz
Aprendiz
Mensajes: 93
Registrado: 26 Oct 2016 13:40
Reputación: 1

30 Ene 2018 11:06

Muy bueno, lo utilizaré para mi gm de 0.
+1.
Mr.fercho
Aprendiz
Aprendiz
Mensajes: 552
Registrado: 22 Ago 2014 19:55
Reputación: 8

11 May 2018 20:40

Spoiler:
MattHudson escribió:
03 Dic 2017 03:17
Sí, el titulo tiene mas clickbait que un vídeo de YouTube. Pero si todo el mundo lo hace... why not me?

Hola, -hi
Imagen

Vengo a presentar un velocímetro que lleva incluido un código apto para usarse con un sistema propio de gasolina.

Historia de este código:
El velocímetro esta basado en uno que vi hace mucho tiempo en el conocido servidor LS-RP.es, cumple con las características estéticas y con similitudes a la hora de los timers utilizados.

La verdad de la milanesa es que es un código muy básico, sin mencionar que lo de la gasolina es del código propio de ZenonCity. Pero mucha gente tiene pereza de hacerlo y bueno, lo tenia en el baúl de recuerdos como "Mi primer TextDraw", así que... ¿porque no compartir mi recuerdo?.

Para usarlo, obviamente, necesitaremos la librería del SA-MP(a_samp).

Código:
Gasolina+Velocimetro:
Spoiler:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90

new Text:Velocimetro[MAX_PLAYERS];//Arriba de todo, pero abajo del include "a_samp".
new VehicleFuel[MAX_VEHICLES] = 100;//Arriba de todo, pero abajo del include "a_samp".
/*-----------------------------------------------------------------------------------------------------------------------------------------------*/
//En OnPlayerStateChange.
	if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
	{
	    TextDrawShowForPlayer(playerid, Velocimetro[playerid]);
	}
	if(oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER)
	{
	    TextDrawHideForPlayer(playerid, Velocimetro[playerid]);
	}
/*-----------------------------------------------------------------------------------------------------------------------------------------------*/
//En OnGameModeExit, yo lo pongo para eliminar el TextDraw si cambio de gamemode... si no cambias el gamemode manteniendo el servidor abierto, no es necesario que pongas esto.
	for(new i = 0; i<MAX_PLAYERS; i++)
	{
	    TextDrawHideForAll(Velocimetro[i]);
	    TextDrawDestroy(Velocimetro[i]);
	}
/*-----------------------------------------------------------------------------------------------------------------------------------------------*/
//En OnGameModeInit
	SetTimer("SpeedoUpdate", 1000, 1);
	SetTimer("GasolinaUpdate", 50000, 1);
	for(new i = 0; i<MAX_PLAYERS; i++)
	{

		Velocimetro[i] = TextDrawCreate(212.313903, 384.999969, "Hola, soy un velocimetro y esto no sirve porque despues me van a cambiar.");
		TextDrawLetterSize(Velocimetro[i], 0.535269, 1.308334);
		TextDrawAlignment(Velocimetro[i], 1);
		TextDrawColor(Velocimetro[i], -1);
		TextDrawSetShadow(Velocimetro[i], 0);
		TextDrawSetOutline(Velocimetro[i], 1);
		TextDrawBackgroundColor(Velocimetro[i], 255);
		TextDrawFont(Velocimetro[i], 3);
		TextDrawSetProportional(Velocimetro[i], 1);
	}
}
/*-----------------------------------------------------------------------------------------------------------------------------------------------*/
//En OnPlayerEnterVehicle
	if(VehicleFuel[vehicleid] <= 0)
	{
	    GameTextForPlayer(playerid, "~R~MOTOR APAGADO", 2000, 4);
	    new lights,alarm,doors,bonnet,boot,objective;
	    SetVehicleParamsEx(vehicleid,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
	}
/*-----------------------------------------------------------------------------------------------------------------------------------------------*/
//En donde quieras. Pero debajo de "a_samp" y del anterior new.
forward SpeedoUpdate();
public SpeedoUpdate()
{
        for(new i = 0; i<MAX_PLAYERS; i++)
        {
                new veh = GetPlayerVehicleID(i);
                new Float:fCurrentSpeed = player_get_speed(i);
                new velocity[128];
                format(velocity, 128,"        km/h:~w~ %.0f~n~~r~   gasolina:~w~ %d / 100", fCurrentSpeed, VehicleFuel[veh]);
                TextDrawSetString(Velocimetro[i], velocity);

        }
        return 1;
}
/*-----------------------------------------------------------------------------------------------------------------------------------------------*/
forward GasolinaUpdate();
public GasolinaUpdate()
{
    new engine,lights,alarm,doors,bonnet,boot,objective;
	for(new v = 0; v < MAX_VEHICLES; v++)
	{
		GetVehicleParamsEx(v,engine,lights,alarm,doors,bonnet,boot,objective);
		if(engine == VEHICLE_PARAMS_ON)
		{
			if(VehicleFuel[v] > 0 )
			{
				VehicleFuel[v]-=1;
				if(VehicleFuel[v] <= 0) SetVehicleParamsEx(v,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
			}
		}
	}
	return 1;
}
/*-----------------------------------------------------------------------------------------------------------------------------------------------*/
//Arriba de los dos últimos timers.
Float: player_get_speed(playerid)//Creo que es de ZenonCity esto... creditos a sus autores.
{
	new
		Float: Floats[3];

	GetVehicleVelocity(GetPlayerVehicleID(playerid), Floats[0], Floats[1], Floats[2]);
	return floatsqroot(Floats[0] * Floats[0] + Floats[1] * Floats[1] + Floats[2] * Floats[2]) * 150;
}
  Cantidad de llaves: Abiertas(12)-Cerradas(13) | Lineas Totales: 90
Gasolina:
Spoiler:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

new VehicleFuel[MAX_VEHICLES] = 100;//Arriba de todo, pero abajo del include "a_samp".
/*-----------------------------------------------------------------------------------------------------------------------------------------------*/
//En OnGameModeInit
	SetTimer("GasolinaUpdate", 50000, 1);
/*-----------------------------------------------------------------------------------------------------------------------------------------------*/
//En OnPlayerEnterVehicle
	if(VehicleFuel[vehicleid] <= 0)
	{
	    GameTextForPlayer(playerid, "~R~MOTOR APAGADO", 2000, 4);
	    new lights,alarm,doors,bonnet,boot,objective;
	    SetVehicleParamsEx(vehicleid,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
	}
/*-----------------------------------------------------------------------------------------------------------------------------------------------*/
forward GasolinaUpdate();
public GasolinaUpdate()
{
    new engine,lights,alarm,doors,bonnet,boot,objective;
	for(new v = 0; v < MAX_VEHICLES; v++)
	{
		GetVehicleParamsEx(v,engine,lights,alarm,doors,bonnet,boot,objective);
		if(engine == VEHICLE_PARAMS_ON)
		{
			if(VehicleFuel[v] > 0 )
			{
				VehicleFuel[v]-=1;
				if(VehicleFuel[v] <= 0) SetVehicleParamsEx(v,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
			}
		}
	}
	return 1;
}
  Cantidad de llaves: Abiertas(5)-Cerradas(5) | Lineas Totales: 31
Velocimetro(TextDraw + Código de update):-
Spoiler:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61

new Text:Velocimetro[MAX_PLAYERS];//Arriba de todo, pero abajo del include "a_samp".
/*-----------------------------------------------------------------------------------------------------------------------------------------------*/
//En OnPlayerStateChange.
	if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
	{
	    TextDrawShowForPlayer(playerid, Velocimetro[playerid]);
	}
	if(oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER)
	{
	    TextDrawHideForPlayer(playerid, Velocimetro[playerid]);
	}
/*-----------------------------------------------------------------------------------------------------------------------------------------------*/
//En OnGameModeExit, yo lo pongo para eliminar el TextDraw si cambio de gamemode... si no cambias el gamemode manteniendo el servidor abierto, no es necesario que pongas esto.
	for(new i = 0; i<MAX_PLAYERS; i++)
	{
	    TextDrawHideForAll(Velocimetro[i]);
	    TextDrawDestroy(Velocimetro[i]);
	}
/*-----------------------------------------------------------------------------------------------------------------------------------------------*/
//En OnGameModeInit
	SetTimer("SpeedoUpdate", 1000, 1);
	for(new i = 0; i<MAX_PLAYERS; i++)
	{

		Velocimetro[i] = TextDrawCreate(212.313903, 384.999969, "Hola, soy un velocimetro y esto no sirve porque despues me van a cambiar.");
		TextDrawLetterSize(Velocimetro[i], 0.535269, 1.308334);
		TextDrawAlignment(Velocimetro[i], 1);
		TextDrawColor(Velocimetro[i], -1);
		TextDrawSetShadow(Velocimetro[i], 0);
		TextDrawSetOutline(Velocimetro[i], 1);
		TextDrawBackgroundColor(Velocimetro[i], 255);
		TextDrawFont(Velocimetro[i], 3);
		TextDrawSetProportional(Velocimetro[i], 1);
	}
}
/*-----------------------------------------------------------------------------------------------------------------------------------------------*/
//En donde quieras. Pero debajo de "a_samp" y del anterior new.
forward SpeedoUpdate();
public SpeedoUpdate()
{
        for(new i = 0; i<MAX_PLAYERS; i++)
        {
                new veh = GetPlayerVehicleID(i);
                new Float:fCurrentSpeed = player_get_speed(i);
                new velocity[128];
                format(velocity, 128,"        km/h:~w~ %.0f~n~~r~   gasolina:~w~ %d / 100", fCurrentSpeed, VehicleFuel[veh]);
                TextDrawSetString(Velocimetro[i], velocity);

        }
        return 1;
}
/*-----------------------------------------------------------------------------------------------------------------------------------------------*/
//Arriba de los dos últimos timers.
Float: player_get_speed(playerid)//Creo que es de ZenonCity esto... creditos a sus autores.
{
	new
		Float: Floats[3];

	GetVehicleVelocity(GetPlayerVehicleID(playerid), Floats[0], Floats[1], Floats[2]);
	return floatsqroot(Floats[0] * Floats[0] + Floats[1] * Floats[1] + Floats[2] * Floats[2]) * 150;
}
  Cantidad de llaves: Abiertas(7)-Cerradas(8) | Lineas Totales: 61
Notas:
-El máximo de gasolina es de 100.
-La gasolina disminuye un punto cada 50 segundos.
-No incluye forma de rellenar la gasolina. Modifican la variable "VehicleFuel[vehicleid]" y listo. Sean creativos, hasta un simple comando basta...
-Todos los vehículos van a aparecer con 0 muchas veces... es porque tienen que guardar el valor y cargarlo de alguna forma para cada vehículo.
-Se puede optimizar mucho mas.
-Se recomienda usar ObtenerVelocidad para otras funciones que se manejen con la velocidad del vehículo. Para no confundir al usuario con valores diferentes.

Creditos:
Idea: LS-RP.es
TextDraw: Yo. Gracias a los editores In-Game de TextDraws(no recuerdo cual use...)
Código ajeno al TextDraw: ZenonCity y su equipo de desarrollo.(Variable de gasolina, idea de como disminuirla, todo menos el código general ya que lo retoque un poco...)

No lo revise In-Game, pero debería andar correctamente.

Saludos, -bye
/MH
Spoiler:
Si te gusto, ya sabes que podes hacer

Buen aporte, quiero saber algo de la función.

¿qué se supone que debo hacer acá?
 Codigo Pawno:
1
2
3
4
5
6
7

	SetTimer("SpeedoUpdate", 1000, 1);
	for(new i = 0; i<MAX_PLAYERS; i++)
	{
//la linea de abajo, ¿qué debo poner xd?
		// Velocimetro[i] = TextDrawCreate(212.313903, 384.999969, "Hola, soy un velocimetro y esto no sirve porque despues me van a cambiar.");
	}
}
  Cantidad de llaves: Abiertas(1)-Cerradas(2) | Lineas Totales: 7
Un sabio dijo malo si uno ayuda y malo si no ayuda.

[A]ngelKarTen
Aprendiz
Aprendiz
Mensajes: 18
Registrado: 20 May 2018 12:52
Reputación: 0

30 May 2018 01:59

Tengo una pregunta:

Cuando pongo el velocimetro, funciona bien, pero solo me aparece la velocidad/km abajito, ¿y la gasolina? ¿Donde queda o donde esta?

Código: Seleccionar todo

format(_string, sizeof(_string), "        km/h:~w~ %.0f ~r~   gasolina:~w~ %d ", vehspeed, GasolinaInicialVeh[vehiculo]);
	                    PlayerTextDrawSetString(i, Velocimetro[i], _string);
Borre donde decia "/100" por que la gasolina varia en mi gamemode.
Avatar de Usuario
MattHudson
Moderador Global
Moderador Global
Mensajes: 1666
Registrado: 31 Oct 2015 18:16
Ubicación: Argentina, Buenos Aires, San Miguel.
Contactar:
Reputación: 89

30 May 2018 16:09

[A]ngelKarTen escribió:
30 May 2018 01:59
Tengo una pregunta:

Cuando pongo el velocimetro, funciona bien, pero solo me aparece la velocidad/km abajito, ¿y la gasolina? ¿Donde queda o donde esta?

Código: Seleccionar todo

format(_string, sizeof(_string), "        km/h:~w~ %.0f ~r~   gasolina:~w~ %d ", vehspeed, GasolinaInicialVeh[vehiculo]);
	                    PlayerTextDrawSetString(i, Velocimetro[i], _string);
Borre donde decia "/100" por que la gasolina varia en mi gamemode.
En los formatos de la cadena de texto(al final del format) esta la variable que varia el valor de la gasolina(GasolinaInicialVeh[vehiculo]). Si tu gamemode usa otra, solo cambiala y ya. Lo mismo si en vez de usar variables usa una función o como sea que se maneje tu gamemode.
Avatar de Usuario
Angel Masci
Aprendiz
Aprendiz
Mensajes: 92
Registrado: 06 Ene 2019 22:38
Ubicación: ..::Venezuela::..
Reputación: 8

08 May 2019 09:13

Tengo una duda por que me aparecen estos dos errores
error 017: undefined symbol "newstate"
error 017: undefined symbol "oldstate"
Editado, ya lo solucione.
Ahora el problema es que la gasolina no baja
Aportes:
Angel Masci

Copyright © Angel Masci . Todos los Derechos Reservados.

Avatar de Usuario
Eply
Aprendiz
Aprendiz
Mensajes: 45
Registrado: 16 Abr 2019 15:26
Reputación: 3

08 May 2019 12:54

No veo imagenes cumpaaa
Responder