[Tutorial] Sistema de motor con progress
#1

Sistema de motor con progressbar


Vнdeo de demostraciуn del sistema:


[ame="http://www.youtube.com/watch?v=OoRTWvXvlTY"]http://www.youtube.com/watch?v=OoRTWvXvlTY&[/ame]

nose como ponerlo para que se vea acб xD

(Pido disculpas por la calidad del vнdeo mi Internet es medio lento y tuve que bajarle calidad D
Explicaciуn:

Primero que nada van a necesitar el include progress

Lo pueden descargar de este post https://sampforum.blast.hk/showthread.php?tid=113443

Aсadimos el include .
pawn Код:
#include<progress>
Mas abajo vamos a definir holding y released


pawn Код:
// HOLDING(keys)//cuando mantienes la tecla
#define HOLDING(%0) \
    ((newkeys & (%0)) == (%0))

// RELEASED(keys)//cuando la soltas
#define RELEASED(%0) \
    (((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))
Definimos el color ,la barra,motor y demas

pawn Код:
#define C_Blanco         0xFFFFFFFF//define el color blanco que vamos a usar
new Bar:Motor[MAX_PLAYERS];//la barra
new vMotor[MAX_VEHICLES];
new TMotor[MAX_PLAYERS];
new MotorAuto[MAX_VEHICLES];
Bien.Una vez definido todo vamos al callback onplayerentervehicle y agregamos de esta forma

pawn Код:
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)//cuando el jugador entra al auto
{
if(MotorAuto[vehicleid] == 0)//si el motor esta apagado
{
SendClientMessage(playerid,C_Blanco,"El Motor Esta Apagado. Para Encenderlo: Manten pulsado Click hasta que se llene la barra");// te manda el mensaje si esta apagado
ShowProgressBarForPlayer(playerid, Motor[playerid]);//muestra la ProgressBar
}
if(MotorAuto[vehicleid] == 1)//si el motor esta encendido
{
SendClientMessage(playerid,C_Blanco,"El Motor Esta Encendido. Para Apagarlo: Haz Click");//mensaje si el motor esta encendido
}
return 1;
}
Escondemos la progress al salir del coche

pawn Код:
public OnPlayerExitVehicle(playerid, vehicleid)
{
HideProgressBarForPlayer(playerid,Motor[playerid]);//cuando salis del coche oculta la barra
return 1;
}
Creamos la funciуn del click en OnPlayerKeyStateChange
pawn Код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
new IDAuto = GetPlayerVehicleID(playerid);//define que IDAuto es la id del auto
if(HOLDING(KEY_FIRE))//El holding que definimos anteriormente y el click osea KEY_FIRE
{
if(IsPlayerInAnyVehicle(playerid))//si esta en un vehiculo
{
if(MotorAuto[IDAuto] == 0)//si el motor esta apagado
{
GameTextForPlayer(playerid, "~w~Encendiendo...",2000,3);//mensaje que dice que el motor se esta encendiendo
TMotor[playerid] = SetTimerEx("EncenderMotor",1000,1,"d",playerid);//Se ejecuta el timer
}
else
{
SetTimerEx("ApagarMotor", 1500, false, "d", playerid);//tiempo en apagar el motor [1500 = 1,5 segundos]
GameTextForPlayer(playerid, "~w~Apagando...",1000,3);//mensaje que dice que el motor se esta apagando
}
}
}
if(RELEASED(KEY_FIRE))//al soltar la tecla
{
if(MotorAuto[IDAuto] == 0)//si el motor esta apagado
{
SetProgressBarValue(Motor[playerid], 0);//setea la ProgressBar a 0
vMotor[IDAuto] =(0);//le devuelve el vMotor a cero para evitar bugs
UpdateProgressBar(Motor[playerid], playerid);//actualiza la barra
KillTimer(TMotor[playerid]);//Mata al timer para encenderlo
}
}
return 1;
}
Luego creamos las callbacks que que se ejecutaran cuando inicien los timers

pawn Код:
//=======Apagar motor=======//
forward ApagarMotor(playerid);//el callback para apagar el motor
public ApagarMotor(playerid)
{
   new IDAuto = GetPlayerVehicleID(playerid);//definimos idauto
   new enginem, lights, alarm, doors, bonnet, boot, objective;
   GetVehicleParamsEx(GetPlayerVehicleID(playerid),enginem, lights, alarm, doors, bonnet, boot, objective);
   SetVehicleParamsEx(GetPlayerVehicleID(playerid),VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective);//deja el motor y las demas cosas apagadas
   GameTextForPlayer(playerid, "~w~Motor ~r~Apagado",1000,3);//mensaje de apagado
   MotorAuto[IDAuto] = 0;//deja el motor apagado
   ShowProgressBarForPlayer(playerid, Motor[playerid]);//Muestra la ProgressBar nuevamente.
}

//============================//
forward EncenderMotor(playerid);
public EncenderMotor(playerid)
{
new i = playerid;
if(IsPlayerInAnyVehicle(i))
{
if(GetPlayerState(i) == PLAYER_STATE_DRIVER)//si es conductor
{
new vehicleid = GetPlayerVehicleID(i);
vMotor[vehicleid] += (5);//le suma +5 a vmotor . esto se lo pueden modificar para que sume menos o mas
SetProgressBarValue(Motor[i], vMotor[vehicleid]);//el valor de la barra se setea al mismo que vmotor
UpdateProgressBar(Motor[i], i);//actualiza la barra
if(vMotor[vehicleid] >= 100)//si vmotor llega a 100
{
new IDAuto = GetPlayerVehicleID(playerid);//define que IDAuto es la id del auto
new enginem, lights, alarm, doors, bonnet, boot, objective;//define las cosas del auto
GetVehicleParamsEx(GetPlayerVehicleID(playerid),enginem, lights, alarm, doors, bonnet, boot, objective);
SetVehicleParamsEx(GetPlayerVehicleID(playerid),VEHICLE_PARAMS_ON, lights, alarm, doors, bonnet, boot, objective);//deja el auto con las luces encendidas, motor, etc.
GameTextForPlayer(playerid, "~w~Motor ~g~Encendido",1000,3);//mensaje de encendido
MotorAuto[IDAuto] = 1;//deja el motor encendido
vMotor[vehicleid] =(0);//le devuelve el vMotor a cero para evitar bugs
HideProgressBarForPlayer(playerid, Motor[playerid]);//Esconde la ProgressBar
SetProgressBarValue(Motor[playerid], 0);//pone la ProgressBar a 0
KillTimer(TMotor[playerid]);//mata el timer
}
}
}
return 1;
}
Entonces cuando presionen click se empezara a cargar la barra hasta llegar a 100% y se enciende el coche,si sueltan antes de llegar al 100% la barra se pondrб en cero de nuevo!.

Si quieren le pueden agregar

pawn Код:
new string[128];
format(string, sizeof(string), "* %s trata de encender su vehiculo.", NombreJugador(playerid));
ProxDetector(30.0, playerid, string, 0xB6DB22FF,0xB6DB22FF,0xB6DB22FF,0xB6DB22FF,0xB6DB22FF);
en if(HOLDING(KEY_FIRE)) para que salga el rol y tambiйn en if(RELEASED(KEY_FIRE))//

pawn Код:
new string[128];
format(string, sizeof(string), "* %s no pudo encender su vehнculo.", NombreJugador(playerid));
ProxDetector(30.0, playerid, string, 0xB6DB22FF,0xB6DB22FF,0xB6DB22FF,0xB6DB22FF,0xB6DB22FF);
Tambien debajo de if(vMotor[vehicleid] >= 100)

pawn Код:
new string[128];
format(string, sizeof(string), "* %s encendiу su vehнculo correctamente.", NombreJugador(playerid));
ProxDetector(30.0, playerid, string, 0xB6DB22FF,0xB6DB22FF,0xB6DB22FF,0xB6DB22FF,0xB6DB22FF);

Recuerden que nombrejugador lo pueden tener definido de otra manera .

CRЙDITOS

Paglia1992
Toribio(Include progress)
Nicolas_Labra(Tome cosas de su tutorial para hacer mas rбpido el post.)


Eso es todo,es algo simple pero bueno es lo que hay
Reply
#2

Buen tutorial !
Reply
#3

Quote:
Originally Posted by [NVC]iTrevaS
Посмотреть сообщение
Buen tutorial !
Grax
Reply
#4

Se parece a uno que yo (Ner0x) hice hace tiempo, sуlo que el mio era mбs bonito, sin ningъn bug, iva mбs rбpido y con sonido.

Buen tutorial, gracias.
Reply
#5

Quote:
Originally Posted by Pepot
Посмотреть сообщение
Se parece a uno que yo (Ner0x) hice hace tiempo, sуlo que el mio era mбs bonito, sin ningъn bug, iva mбs rбpido y con sonido.

Buen tutorial, gracias.
para modificar la velocidad se cambia.

vMotor[vehicleid] += (5);

el numero 5 por uno mas alto y listo ,lo hice asн lento para que se vea como subнa xD.
Reply
#6

esta bueno, para que se muestre el video quita el &feature=********* del link
Reply
#7

Quote:
Originally Posted by Jovanny
Посмотреть сообщение
esta bueno, para que se muestre el video quita el &feature=********* del link
Gracias ahora ya se ve el video
Reply
#8

їPodrнas acortar mucho mбs al timer que genera mбs agrandamiento de barras? Para que corra mбs rapido la barra, no se si me entiendo.
PD: Es solo una crнtica constructiva.
Reply
#9

Quote:
Originally Posted by TiNcH010
Посмотреть сообщение
їPodrнas acortar mucho mбs al timer que genera mбs agrandamiento de barras? Para que corra mбs rapido la barra, no se si me entiendo.
PD: Es solo una crнtica constructiva.
Claro no hay problema
Reply
#10

Si se baja el intervalo del timer y la cantidad que se suma a la progress bar, se verнa mas realista y quedarнa mejor, pero al juntarse con otros timers del servidor y otras cosas podrнa causar algo de lag.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)