Modificación de éste mini-sistema.
#1

Buenas, tengo éste sistema de renta de vehículos y le quiero hacer una modificación; el sistema cumple con la función de que si es un vehículo de renta y te subes te sale un dialogo y tienes que poner cuanto lo quieres rentar... funciona bien, más no lo quiero así... quiero que salga un dialogo estilo lista que diga 5, 10/30 o 1 hora(con hacer un ejemplo de 5 y 10m lo demás lo puedo hacer) minutos/horas que lo quieras rentar y ta, eso... que se rente por ese tiempo.

Код:
DIALOGO de Renta.

		case DIALOG_RENTA:
		{
			if(!response) return RemovePlayerFromVehicle(playerid);
			if(response)
			{
				if(LlaveRenta_[playerid] != -1) return RemovePlayerFromVehicle(playerid), SendClientMessage(playerid, COLOR_ROJO, "* Ya tienes un vehículo rentando, utiliza(/dejar renta) para alquilar otro.");
				if(VehiculoRenta_(VehiculoID))
				{
     				new
				        found;
					for(new i = 0; i < MAX_PLAYERS; i++)
					{
						if(LlaveRenta_[i] == VehiculoID)
						{
							SendClientMessage(playerid, COLOR_ROJO, "* Ya este vehículo se encuentra rentado por otra persona."), found = 1;
							break;
						}
					}
					if(found != 1)
					{
						if(!IsNumeric(inputtext)) return SendClientMessage(playerid, COLOR_ROJO, "* Solo está permitido números en este dialogo."), RemovePlayerFromVehicle(playerid);
						if(strval(inputtext) < 5 || strval(inputtext) > 100) return SendClientMessage(playerid, COLOR_ROJO, "* Tiene que ser entre 5 y 100 para que funcione."), RemovePlayerFromVehicle(playerid);
						new
						    Cantidad = strval(inputtext) * 3;
						if(GetPlayerMoney(playerid) < Cantidad){RemovePlayerFromVehicle(playerid);return 1;}

	   					QuitarDineroPlayer_(playerid, Cantidad);
	   					ShowInfoForPlayer(playerid, "Aviso: Cuando dejes de usar el vehiculo usa ~y~/dejar renta", 3000);
						LlaveRenta_[playerid] = VehiculoID, TiempoRenta_[playerid] = strval(inputtext);
					}
				}
				else RemovePlayerFromVehicle(playerid);
				return 1;
			}
		}

Y en OnGamemodeInit se activa 1 timer de 1 segundo y pues este es el timer con la comprobación de los autos de renta.

CALLBACK: TimerDeUnSegundo()
{
	new
	    hour, minute;
	gettime(hour, minute);
	SetWorldTime(hour);

	if(minute == 2 && PayDay_ == 0){PayDay(), PayDay_ = 1;}
	if(minute == 3 && PayDay_ == 1){PayDay_ = 0;}

	static
	       Contador[3];
	for(new i; i < sizeof(Contador); i++) Contador[i]++;

	if(Contador[1] >= 60)
	{
		Contador[1] = 0;
		for(new i = 0; i < MAX_PLAYERS; i++)
		{
			if(TiempoRenta_[i] != 0) TiempoRenta_[i]--;
			if(TiempoRenta_[i] == 0 && LlaveRenta_[i] != -1)
			{
				SetVehicleToRespawn(LlaveRenta_[i]);
				LlaveRenta_[i] = -1, TiempoRenta_[i] = 0;
				SendClientMessage(i, COLOR_AZUL, "* Importante: Su renta caducó, por lo tanto se le quitó el vehículo.");
			}
		}
	}
}
Reply
#2

ї Donde se supone que esta ShowPlayerDialog ?
Reply
#3

Simplemente tenйs que hacer que cuando el usuario suba a el vehнculo en renta le salga el dialog en estilo list, algo como esto:

Код:
ShowPlayerDialog(playerid, DIALOG_RENT, DIALOG_STYLE_LIST, "Selecciona el tiempo de renta", "Cinco minutos\nDiez minutos\nMedia hora\nUna hora", "Seleccionar", "Cancelar");
Y luego en OnPlayerResponse, dentro del dialog que creaste, hacйs que se le asigne una variable con la cantidad de milisegundos, por ejemplo, un segundo, mil milisegundos, diez segundos, diez mil milisegundos.

Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
	switch(dialogid)
	{
	    case DIALOG_RENT:
	    {
	        if(!response)
	            return true;
			
		if(response)
		{
			switch(listitem)
			{
				case 0:
				        TiempoRenta_[playerid] = 300000;

				case 1:
					TiempoRenta_[playerid] = 600000;	
					
				case 2:
					TiempoRenta_[playerid] = 1800000;	
						
				case 3:
					TiempoRenta_[playerid] = 3600000;	
			}
					
			SendClientMessage(playerid, -1, "ЎFelicidades, has rentado un vehнculo!");
		}
	    }
	}
	reutrn 1;
}
Reply
#4

Quote:
Originally Posted by ER280652
Посмотреть сообщение
Simplemente tenйs que hacer que cuando el usuario suba a el vehнculo en renta le salga el dialog en estilo list, algo como esto:

Код:
ShowPlayerDialog(playerid, DIALOG_RENT, DIALOG_STYLE_LIST, "Selecciona el tiempo de renta", "Cinco minutos\nDiez minutos\nMedia hora\nUna hora", "Seleccionar", "Cancelar");
Y luego en OnPlayerResponse, dentro del dialog que creaste, hacйs que se le asigne una variable con la cantidad de milisegundos, por ejemplo, un segundo, mil milisegundos, diez segundos, diez mil milisegundos.

Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
	switch(dialogid)
	{
	    case DIALOG_RENT:
	    {
	        if(!response)
	            return true;
			
		if(response)
		{
			switch(listitem)
			{
				case 0:
				        TiempoRenta_[playerid] = 300000;

				case 1:
					TiempoRenta_[playerid] = 600000;	
					
				case 2:
					TiempoRenta_[playerid] = 1800000;	
						
				case 3:
					TiempoRenta_[playerid] = 3600000;	
			}
					
			SendClientMessage(playerid, -1, "ЎFelicidades, has rentado un vehнculo!");
		}
	    }
	}
	reutrn 1;
}
Gracias lo pondré basándome en eso y diré que tal.
Reply
#5

Lo coloqué con este código y ejemplo lo rento 5m y no se me quita más nunca! qué está mal?, la comprobación o cuando rentas?

Код:
		case DIALOG_RENTA:
		{
			if(!response) return RemovePlayerFromVehicle(playerid);
			if(response)
			{
				if(LlaveRenta_[playerid] != -1) return RemovePlayerFromVehicle(playerid), SendClientMessage(playerid, COLOR_ROJO, "* Ya tienes un vehículo rentando, utiliza(/dejar renta) para alquilar otro.");
				if(VehiculoRenta_(VehiculoID))
				{
     				new
				        found;
					for(new i = 0; i < MAX_PLAYERS; i++)
					{
						if(LlaveRenta_[i] == VehiculoID)
						{
							SendClientMessage(playerid, COLOR_ROJO, "* Ya este vehículo se encuentra rentado por otra persona."), found = 1;
							break;
						}
					}
					if(found != 1)
					{
						switch(listitem)
						{
							case 0:
							{
								if(GetPlayerMoney(playerid) < 500){RemovePlayerFromVehicle(playerid);return 1;}

			   					QuitarDineroPlayer_(playerid, 500);
			   					ShowInfoForPlayer(playerid, "Aviso: Cuando dejes de usar el vehiculo usa ~y~/dejar renta", 5000);
								LlaveRenta_[playerid] = VehiculoID, TiempoRenta_[playerid] = 300000;
							}
							case 1:
							{
								if(GetPlayerMoney(playerid) < 700){RemovePlayerFromVehicle(playerid);return 1;}

			   					QuitarDineroPlayer_(playerid, 700);
			   					ShowInfoForPlayer(playerid, "Aviso: Cuando dejes de usar el vehiculo usa ~y~/dejar renta", 5000);
								LlaveRenta_[playerid] = VehiculoID, TiempoRenta_[playerid] = 600000;
							}
							case 2:
							{
								if(GetPlayerMoney(playerid) < 900){RemovePlayerFromVehicle(playerid);return 1;}

			   					QuitarDineroPlayer_(playerid, 900);
			   					ShowInfoForPlayer(playerid, "Aviso: Cuando dejes de usar el vehiculo usa ~y~/dejar renta", 5000);
								LlaveRenta_[playerid] = VehiculoID, TiempoRenta_[playerid] = 1800000;
							}
							case 3:
							{
								if(GetPlayerMoney(playerid) < 1200){RemovePlayerFromVehicle(playerid);return 1;}

			   					QuitarDineroPlayer_(playerid, 1200);
			   					ShowInfoForPlayer(playerid, "Aviso: Cuando dejes de usar el vehiculo usa ~y~/dejar renta", 5000);
								LlaveRenta_[playerid] = VehiculoID, TiempoRenta_[playerid] = 3600000;
							}
						}
					}
				}
				else RemovePlayerFromVehicle(playerid);
				return 1;
			}
		}

y la comprobación del tiempo renta es esta

CALLBACK: TimerDeUnSegundo()
{
	new
	    hour, minute;
	gettime(hour, minute);
	SetWorldTime(hour);

	if(minute == 2 && PayDay_ == 0){PayDay(), PayDay_ = 1;}
	if(minute == 3 && PayDay_ == 1){PayDay_ = 0;}

	static
	       Contador[3];
	for(new i; i < sizeof(Contador); i++) Contador[i]++;

	if(Contador[1] >= 60)
	{
		Contador[1] = 0;
		for(new i = 0; i < MAX_PLAYERS; i++)
		{
			if(TiempoRenta_[i] != 0) TiempoRenta_[i]--;
			if(TiempoRenta_[i] == 0 && LlaveRenta_[i] != -1)
			{
				SetVehicleToRespawn(LlaveRenta_[i]);
				LlaveRenta_[i] = -1, TiempoRenta_[i] = 0;
				SendClientMessage(i, COLOR_AZUL, "* Importante: Su renta caducó, por lo tanto se le quitó el vehículo.");
			}
		}
	}
}
Reply
#6

Te coloquй los tiempos en milisegundos por si era el caso que usabas SetTimerEx, en caso de usar un timer de un segundo simplemente colocб los tiempos de renta del dialog en segundos reales, es decir, un minuto, 60 segundos.

No tiene problema mi cуdigo, simplemente que estб comprobando los segundos y nunca llegarб a 300000 segundos si no tenйs paciencia.
Reply
#7

Quote:
Originally Posted by ER280652
Посмотреть сообщение
Te coloquй los tiempos en milisegundos por si era el caso que usabas SetTimerEx, en caso de usar un timer de un segundo simplemente colocб los tiempos de renta del dialog en segundos reales, es decir, un minuto, 60 segundos.

No tiene problema mi cуdigo, simplemente que estб comprobando los segundos y nunca llegarб a 300000 segundos si no tenйs paciencia.
Sigue sin funcionar... no le quita el auto y lo puse así.

Код:
		case DIALOG_RENTA:
		{
			if(!response) return RemovePlayerFromVehicle(playerid);
			if(response)
			{
				if(LlaveRenta_[playerid] != -1) return RemovePlayerFromVehicle(playerid), SendClientMessage(playerid, COLOR_ROJO, "* Ya tienes un vehículo rentando, utiliza(/dejar renta) para alquilar otro.");
				if(VehiculoRenta_(VehiculoID))
				{
     				new
				        found;
					for(new i = 0; i < MAX_PLAYERS; i++)
					{
						if(LlaveRenta_[i] == VehiculoID)
						{
							SendClientMessage(playerid, COLOR_ROJO, "* Ya este vehículo se encuentra rentado por otra persona."), found = 1;
							break;
						}
					}
					if(found != 1)
					{
						switch(listitem)
						{
							case 0:
							{
								if(GetPlayerMoney(playerid) < 500){RemovePlayerFromVehicle(playerid);return 1;}

			   					QuitarDineroPlayer_(playerid, 500);
			   					ShowInfoForPlayer(playerid, "Aviso: Cuando dejes de usar el vehiculo usa ~y~/dejar renta", 5000);
								LlaveRenta_[playerid] = VehiculoID, TiempoRenta_[playerid] = 300;
							}
							case 1:
							{
								if(GetPlayerMoney(playerid) < 700){RemovePlayerFromVehicle(playerid);return 1;}

			   					QuitarDineroPlayer_(playerid, 700);
			   					ShowInfoForPlayer(playerid, "Aviso: Cuando dejes de usar el vehiculo usa ~y~/dejar renta", 5000);
								LlaveRenta_[playerid] = VehiculoID, TiempoRenta_[playerid] = 600;
							}
							case 2:
							{
								if(GetPlayerMoney(playerid) < 900){RemovePlayerFromVehicle(playerid);return 1;}

			   					QuitarDineroPlayer_(playerid, 900);
			   					ShowInfoForPlayer(playerid, "Aviso: Cuando dejes de usar el vehiculo usa ~y~/dejar renta", 5000);
								LlaveRenta_[playerid] = VehiculoID, TiempoRenta_[playerid] = 1800;
							}
							case 3:
							{
								if(GetPlayerMoney(playerid) < 1200){RemovePlayerFromVehicle(playerid);return 1;}

			   					QuitarDineroPlayer_(playerid, 1200);
			   					ShowInfoForPlayer(playerid, "Aviso: Cuando dejes de usar el vehiculo usa ~y~/dejar renta", 5000);
								LlaveRenta_[playerid] = VehiculoID, TiempoRenta_[playerid] = 3600;
							}
						}
					}
				}
				else RemovePlayerFromVehicle(playerid);
				return 1;
			}
		}
y dejo esto

Код:
SetTimer("TimerDeUnSegundo", 1000, true); (OnGamemodeInit)

CALLBACK: TimerDeUnSegundo()
{
	new
	    hour, minute;
	gettime(hour, minute);
	SetWorldTime(hour);

	if(minute == 2 && PayDay_ == 0){PayDay(), PayDay_ = 1;}
	if(minute == 3 && PayDay_ == 1){PayDay_ = 0;}

	static
	       Contador[3];
	for(new i; i < sizeof(Contador); i++) Contador[i]++;

	if(Contador[1] >= 60)
	{
		Contador[1] = 0;
		for(new i = 0; i < MAX_PLAYERS; i++)
		{
			if(TiempoRenta_[i] != 0) TiempoRenta_[i]--;
			if(TiempoRenta_[i] == 0 && LlaveRenta_[i] != -1)
			{
				SetVehicleToRespawn(LlaveRenta_[i]);
				LlaveRenta_[i] = -1, TiempoRenta_[i] = 0;
				SendClientMessage(i, COLOR_NARANJA, "* Importante: Su renta caducó, por lo tanto se le quitó el vehículo.");
			}
		}
	}
}
Reply
#8

Ya lo solucioné, gracias.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)