Race system help
#1

See I have this Prace system. I want that during the time when it is asking about the building details it should also ask the vehicle ID we want to race with. and during the race all players should be on the same vehicle. I tried posting in Prace system's topic but there was no reply. Please help me with this.


Код:
/*
================================================================================
                               Phanto's Script
________________________________________________________________________________
•Script: PRaceSystem         •Scripter: Phanto90
•Type: FS                    •File size: 60 Kb(.pwn) / 43 Kb(.amx)
•Lines: 993                  •Version: 1.3v
________________________________________________________________________________
                              * Description *
                              
Tired of your server modes? No problem! Here it is a nice FS that allows you to
play races on your server! Added also a in-game race editor!
This is an update of PRaceSystem v1.2.1.

System:
•3 types of races: Circuit, Sprint & Chase.
•You can build your own race in few minutes thanks to the powerful editor.
•Different players can race on different tracks at the same time.
•Functional & nice system

                                   Changelog
           >________________________________________________________<
  		   |-Version 1.1                                            |
           |•Fixed a bug /quitrace when race isn't started yet.     |
   		   |•Added a nice ingame race editor                        |
           |-Version 1.2                                            |
           |•Added new race type "Chase"                            |
           |•Modified the Race Edior to build also Chase Races.     |
           |-Version 1.2.1                                          |
		   |•Fixed a serious bug in OnDialogResponse callback.      |
           |-Version 1.3                                            |
           |•Rewrited checkpoint saving and loading system. Now     |
           | there are no more limit to checkpoint due to the fact  |
           | that does not save all in one line as previous version |
           |________________________________________________________|
           
           
Very important: Old Check#.txt are no longer compatible. Change the races in
                scriptfiles with the new one.
 
 
Credits: Phanto90 for PRaceSystem
		 ****** for sscanf plugin and include

                     Thanks for choosing Pawnoscripter!
                     http://pawnoscripter.forumfree.itnl663f3...3.64280658	 
																	  Phanto90
________________________________________________________________________________
Do not remove credits.
================================================================================
*/
#include <a_samp>
#include <sscanf2>
//===============MODIFICABILI
#define TELEPORT_TO_START // Comment to disable teleport to the starting checkpoint
#define MAX_GARE              20
#define MAX_CHECKPOINT        40
//===============COLORI
#define ROSSO    			  0xFF3233FF
#define BIANCO   			  0xFFFFFFFF
#define VERDE                 0x00FF00FF
#define TURCHESE              0x3C93FFFF
//================DIALOG
#define DIALOGGARE            8016
#define DIALOGINFO            8017
#define DIALOGINFOCOSTRUTTORE 8018
#define DIALOGNOMEGARA        8019
#define DIALOGGIRIGARA        8020
#define DIALOGCOSTOGARA       8021
#define DIALOGINFOGARA2       8022
#define DIALOGINSEGUIMENTO    8023
//=========================FORWARD
forward Tre(playerid);
forward Due(playerid);
forward Uno(playerid);
forward Via(playerid);
forward Secondo(playerid);
forward Cronometro(playerid);
//=========================VARIABILIGIOCATORE
enum InfoGiocatore{IdGara,Tempo,Giro,Checkpoint,Pronto,Costruttore,GaraEditorId,AttivaCheck,Inseguitore,Punti};
new Giocatore[MAX_PLAYERS][InfoGiocatore];
new Float:XPosizione,Float:YPosizione,Float:ZPosizione;
new nome[25];
//==============VARIABILIGARE
enum InfoGara{Nome[50],Giri,NumeroCheckpoint,Inseguimento,Costo,Partecipanti,PartecipantiPronti,Avviata,Record,GiocatoreRecord[25],Produttore[25],Podio};
new Gara[MAX_GARE][InfoGara];
enum CheckInfo{Float:CXPos,Float:CYPos,Float:CZPos};
new CheckpointGara[MAX_GARE][MAX_CHECKPOINT][CheckInfo];
new TimerPlayers[MAX_PLAYERS];
new GareCaricate,GareEditor;
//=============VARIABILI
new stringa[1000],stringa2[500];
new stringagara[500];
//============TEXTDRAW
new Text:sfondo,Text:sfondorosso,Text:sfondogiallo,Text:sfondoverde,Text:rossoacceso,Text:gialloacceso,Text:verdeacceso; //Textdraw semaforo
new Text:TimerSfondo,Text:TimerText[MAX_PLAYERS]; //Timer textdraw
new Text:TextGiriSfondo,Text:TextGiriContatore[MAX_PLAYERS]; //Textdraw laps
new Text:TextSfondoInseguimento,Text:SfondoInseguimentoRosso,Text:SfondoInseguimentoGiallo,Text:SfondoInseguimentoVerde,Text:SfondoInseguimentoAzzurro,Text:TextInseguimento,Text:TextPessimo,Text:TextMediocre,Text:TextBuono,Text:TextOttimo,Text:TextPunti[MAX_PLAYERS];
//====================================================================CARICAGARE
stock CaricaGare()
{
   for(new i=0;i<MAX_GARE;i++)
   {
	   //==============CARICAMENTOINFOGARA
	   format(stringa,sizeof(stringa),"Races/Race%d.txt",i);
	   format(stringa2,sizeof(stringa2),"Race %d not found. This race cannot be loaded.",i);
	   if(!fexist(stringa)) return printf(stringa2);
	   new File:nomegara=fopen(stringa, io_read);
	   fread(nomegara,stringagara);
	   fclose(nomegara);
       sscanf(stringagara,"p<,>s[50]ddds[24]s[24]d",Gara[i][Nome],Gara[i][Giri],Gara[i][Costo],Gara[i][Record],Gara[i][GiocatoreRecord],Gara[i][Produttore],Gara[i][Inseguimento]);
	   Gara[i][NumeroCheckpoint]=-1;
	   format(stringa,sizeof(stringa),"%s,%d,%d$,%s,%s",Gara[i][Nome],Gara[i][Giri],Gara[i][Costo],Gara[i][GiocatoreRecord],Gara[i][Produttore]);
	   printf(stringa);
	   //================CARICAMENTOCHECKPOINT
	   format(stringagara,sizeof(stringagara),"");
	   format(stringa,sizeof(stringa),"Races/Check%d.txt",i);
	   format(stringa2,sizeof(stringa2),"Checkpoint list for Race %d not found. This race cannot be loaded.",i);
	   if(!fexist(stringa)) return printf(stringa2);
	   nomegara=fopen(stringa, io_read);
	   print("____________________________________");
	   for(new j=0;j<MAX_CHECKPOINT;j++)
		{
	        fread(nomegara,stringagara);
            sscanf(stringagara,"p<,>fff",CheckpointGara[i][j][CXPos],CheckpointGara[i][j][CYPos],CheckpointGara[i][j][CZPos]);
			if(CheckpointGara[i][j][CXPos]==0) {printf("%d checkpoints loaded for Race %d.",Gara[i][NumeroCheckpoint]+1,i);break;}
		    Gara[i][NumeroCheckpoint]++;
		}
       fclose(nomegara);
	   GareCaricate=i;
	   GareEditor=i;
	   print("____________________________________");
   }
   return 1;
}
//====================================================================SALVAGARE
stock SalvaGare()
{
   for(new i=0;i<GareCaricate;i++)
   {
	   format(stringa,sizeof(stringa),"Races/Race%d.txt",i);
	   format(stringa2,sizeof(stringa2),"Race %d not found. Failed to save this race.",i);
	   if(!fexist(stringa)) return printf(stringa2);
	   new File:nomegara=fopen(stringa, io_write);
	   format(stringagara,sizeof(stringagara),"%s,%d,%d,%d,%s,%s,%d",Gara[i][Nome],Gara[i][Giri],Gara[i][Costo],Gara[i][Record],Gara[i][GiocatoreRecord],Gara[i][Produttore],Gara[i][Inseguimento]);
	   fwrite(nomegara,stringagara);
	   fclose(nomegara);
   }
   return 1;
}
//=====================================================================AVVIAGARA
stock AvviaGara(idGara)
{
  format(stringa,sizeof(stringa),"[RACE:] Race {446ED1}%s{FFFFFF} starts!",Gara[idGara][Nome]);
  SendClientMessageToAll(BIANCO,stringa);
  Gara[idGara][Avviata]=1;
  for(new i=0;i<MAX_PLAYERS;i++)
  {
	  if(Giocatore[i][IdGara]==idGara)
	   {
		   TogglePlayerControllable(i,0);
		   TextDrawShowForPlayer(i,sfondo);
		   TextDrawShowForPlayer(i,sfondorosso);
		   TextDrawShowForPlayer(i,sfondogiallo);
		   TextDrawShowForPlayer(i,sfondoverde);
		   TextDrawShowForPlayer(i,rossoacceso);
		   if(Gara[Giocatore[i][IdGara]][Inseguimento])
		   {
			    TextDrawShowForPlayer(i,TextSfondoInseguimento);
			    TextDrawShowForPlayer(i,SfondoInseguimentoRosso);
			    TextDrawShowForPlayer(i,SfondoInseguimentoGiallo);
			    TextDrawShowForPlayer(i,SfondoInseguimentoVerde);
			    TextDrawShowForPlayer(i,SfondoInseguimentoAzzurro);
			    TextDrawShowForPlayer(i,TextInseguimento);
			    TextDrawShowForPlayer(i,TextPessimo);
			    TextDrawShowForPlayer(i,TextMediocre);
			    TextDrawShowForPlayer(i,TextBuono);
			    TextDrawShowForPlayer(i,TextOttimo);
			    TextDrawSetString(TextPunti[i],"Points: 0000");
			    TextDrawShowForPlayer(i,TextPunti[i]);
		   }
		   SetTimerEx("Tre",1000,false,"idx",i);
	   }
  }
  return 1;
}
//===========================================================================TRE
public Tre(playerid)
{
	 GameTextForPlayer(playerid,"~r~3",1000,3);
	 SuonoGiocatore(playerid,1056);
	 Giocatore[playerid][Tempo]=0;
	 Giocatore[playerid][Giro]=1;
	 format(stringa,sizeof(stringa),"Laps: 1/%d",Gara[Giocatore[playerid][IdGara]][Giri]);
	 TextDrawSetString(TextGiriContatore[playerid],stringa);
	 TextDrawSetString(TimerText[playerid],"00:00");
	 GetPlayerPos(playerid,XPosizione,YPosizione,ZPosizione);
	 SetPlayerCameraPos(playerid,XPosizione+4,YPosizione+2,ZPosizione+3);
	 SetPlayerCameraLookAt(playerid,XPosizione,YPosizione,ZPosizione);
	 TextDrawShowForPlayer(playerid,TimerSfondo);
	 TextDrawShowForPlayer(playerid,TimerText[playerid]);
	 TextDrawShowForPlayer(playerid,TextGiriSfondo);
	 TextDrawShowForPlayer(playerid,TextGiriContatore[playerid]);
	 SetTimerEx("Due",1000,false,"idx",playerid);
}
//===========================================================================DUE
public Due(playerid)
{
	 GameTextForPlayer(playerid,"~r~3~n~~y~2",1000,3);
	 SuonoGiocatore(playerid,1056);
	 GetPlayerPos(playerid,XPosizione,YPosizione,ZPosizione);
	 SetPlayerCameraPos(playerid,XPosizione-4,YPosizione-2,ZPosizione+3);
	 SetPlayerCameraLookAt(playerid,XPosizione,YPosizione,ZPosizione);
	 SetTimerEx("Uno",1000,false,"idx",playerid);
}
//===========================================================================UNO
public Uno(playerid)
{
	 GameTextForPlayer(playerid,"~r~3~n~~y~2~n~~g~~h~1",1000,3);
	 SuonoGiocatore(playerid,1056);
	 GetPlayerPos(playerid,XPosizione,YPosizione,ZPosizione);
	 SetPlayerCameraPos(playerid,XPosizione+4,YPosizione-2,ZPosizione+3);
	 SetPlayerCameraLookAt(playerid,XPosizione,YPosizione,ZPosizione);
	 TextDrawShowForPlayer(playerid,gialloacceso);
	 TextDrawHideForPlayer(playerid,rossoacceso);
	 SetTimerEx("Via",1000,false,"idx",playerid);
}
//===========================================================================VIA
public Via(playerid)
{
	 SetCameraBehindPlayer(playerid);
	 GameTextForPlayer(playerid,"~w~Go!",3000,3);
	 SuonoGiocatore(playerid,1057);
	 TogglePlayerControllable(playerid,1);
	 TextDrawShowForPlayer(playerid,verdeacceso);
	 TextDrawHideForPlayer(playerid,gialloacceso);
	 SetTimerEx("Secondo",1000,false,"idx",playerid);
	 TimerPlayers[playerid]=SetTimerEx("Cronometro",1000,true,"idx",playerid);
}
//=======================================================================SECONDO
public Secondo(playerid)
{
	 TextDrawHideForPlayer(playerid,sfondo);
	 TextDrawHideForPlayer(playerid,sfondorosso);
	 TextDrawHideForPlayer(playerid,sfondogiallo);
	 TextDrawHideForPlayer(playerid,sfondoverde);
	 TextDrawHideForPlayer(playerid,verdeacceso);
	 return 1;
}
//===================================================================CONTROMETRO
public Cronometro(playerid)
{
	 Giocatore[playerid][Tempo]++;
	 new Minuti=floatround(Giocatore[playerid][Tempo]/60);
	 new Secondi=Giocatore[playerid][Tempo]-(Minuti*60);
	 if(Minuti>20)
	 {
		 SendClientMessage(playerid,ROSSO,"[RACE:] {FFFFFF}You quit automatically the race for excessive time (20 minutes)");
		 LasciaGara(playerid);
		 return 1;
	 }
	 new stringatempo[10];
	 format(stringatempo,sizeof(stringatempo),"%02d:%02d",Minuti,Secondi);
	 TextDrawSetString(TimerText[playerid],stringatempo);
	 if(Gara[Giocatore[playerid][IdGara]][Inseguimento]==1)
	 {
		 for(new i=0;i<MAX_PLAYERS;i++)
		  {
			  if(Giocatore[i][IdGara]==Giocatore[playerid][IdGara] && i!=playerid)
			   {
				   GetPlayerPos(i,XPosizione,YPosizione,ZPosizione);
				   break;
			   }
		  }
		 TextDrawHideForPlayer(playerid,SfondoInseguimentoRosso);
		 TextDrawHideForPlayer(playerid,SfondoInseguimentoGiallo);
		 TextDrawHideForPlayer(playerid,SfondoInseguimentoVerde);
		 TextDrawHideForPlayer(playerid,SfondoInseguimentoAzzurro);
		 if(!Giocatore[playerid][Inseguitore])
		  {
			  if(IsPlayerInRangeOfPoint(playerid,15,XPosizione,YPosizione,ZPosizione)){
			  Giocatore[playerid][Punti]+=3; TextDrawShowForPlayer(playerid,SfondoInseguimentoRosso);}
			  else if (IsPlayerInRangeOfPoint(playerid,30,XPosizione,YPosizione,ZPosizione)){
			  Giocatore[playerid][Punti]+=5; TextDrawShowForPlayer(playerid,SfondoInseguimentoGiallo);}
			  else if(IsPlayerInRangeOfPoint(playerid,40,XPosizione,YPosizione,ZPosizione)){
			  Giocatore[playerid][Punti]+=7; TextDrawShowForPlayer(playerid,SfondoInseguimentoVerde);}
			  else{
			  Giocatore[playerid][Punti]+=8; TextDrawShowForPlayer(playerid,SfondoInseguimentoAzzurro);}
		  }
		 else
		  {
			  if(IsPlayerInRangeOfPoint(playerid,15,XPosizione,YPosizione,ZPosizione)){
			  Giocatore[playerid][Punti]+=8; TextDrawShowForPlayer(playerid,SfondoInseguimentoAzzurro);}
			  else if (IsPlayerInRangeOfPoint(playerid,30,XPosizione,YPosizione,ZPosizione)){
			  Giocatore[playerid][Punti]+=7; TextDrawShowForPlayer(playerid,SfondoInseguimentoVerde);}
			  else if(IsPlayerInRangeOfPoint(playerid,40,XPosizione,YPosizione,ZPosizione)){
			  Giocatore[playerid][Punti]+=5; TextDrawShowForPlayer(playerid,SfondoInseguimentoGiallo);}
			  else{
			  Giocatore[playerid][Punti]+=3; TextDrawShowForPlayer(playerid,SfondoInseguimentoRosso);}
		  }
		 format(stringa,sizeof(stringa),"Points: %d",Giocatore[playerid][Punti]);
		 TextDrawSetString(TextPunti[playerid],stringa);
	 }
	 return 1;
}
//====================================================================LASCIAGARA
stock LasciaGara(playerid)
{
	if(Giocatore[playerid][IdGara]==-1) return 1;
	if(Gara[Giocatore[playerid][IdGara]][Avviata]==0)
	{
		if(Giocatore[playerid][Pronto]==1)
		Gara[Giocatore[playerid][IdGara]][PartecipantiPronti]--;
	}
    KillTimer(TimerPlayers[playerid]);
    Giocatore[playerid][Tempo]=0;
	GetPlayerName(playerid,nome,sizeof(nome));
	format(stringa,sizeof(stringa),"[RACE:] {8CE46C}%s {FFFFFF}quit the race.", nome);
    MandaMessaggioPartecipanti(Giocatore[playerid][IdGara],stringa);
    //==========TEXTBASE
    TextDrawHideForPlayer(playerid,sfondo);
    TextDrawHideForPlayer(playerid,TimerText[playerid]);
    TextDrawHideForPlayer(playerid,TimerSfondo);
    TextDrawHideForPlayer(playerid,sfondorosso);
    TextDrawHideForPlayer(playerid,sfondogiallo);
    TextDrawHideForPlayer(playerid,sfondoverde);
    TextDrawHideForPlayer(playerid,rossoacceso);
    TextDrawHideForPlayer(playerid,gialloacceso);
    TextDrawHideForPlayer(playerid,verdeacceso);
    TextDrawHideForPlayer(playerid,TextGiriSfondo);
	//==========TEXTINSEGUIMENTO
    TextDrawHideForPlayer(playerid,TextSfondoInseguimento);
    TextDrawHideForPlayer(playerid,SfondoInseguimentoRosso);
    TextDrawHideForPlayer(playerid,SfondoInseguimentoGiallo);
    TextDrawHideForPlayer(playerid,SfondoInseguimentoVerde);
    TextDrawHideForPlayer(playerid,SfondoInseguimentoAzzurro);
    TextDrawHideForPlayer(playerid,TextInseguimento);
    TextDrawHideForPlayer(playerid,TextPessimo);
    TextDrawHideForPlayer(playerid,TextMediocre);
    TextDrawHideForPlayer(playerid,TextBuono);
    TextDrawHideForPlayer(playerid,TextOttimo);
    TextDrawHideForPlayer(playerid,TextPunti[playerid]);
    
    TextDrawHideForPlayer(playerid,TextGiriContatore[playerid]);
    TextDrawSetString(TimerText[playerid],"00:00");
    Giocatore[playerid][Checkpoint]=0;
    Gara[Giocatore[playerid][IdGara]][Partecipanti]--;
	if(Gara[Giocatore[playerid][IdGara]][PartecipantiPronti]==Gara[Giocatore[playerid][IdGara]][Partecipanti] && Gara[Giocatore[playerid][IdGara]][Partecipanti]!=0 && Gara[Giocatore[playerid][IdGara]][Avviata]==0)
    AvviaGara(Giocatore[playerid][IdGara]);
    ChiudiGara(Giocatore[playerid][IdGara]);
    Giocatore[playerid][IdGara]=-1;
    Giocatore[playerid][Pronto]=0;
    Giocatore[playerid][Giro]=1;
    Giocatore[playerid][Inseguitore]=0;
    Giocatore[playerid][Punti]=0;
    DisablePlayerRaceCheckpoint(playerid);
    return 1;
}
//====================================================================CHIUDIGARA
stock ChiudiGara(idGara)
{
 if(Gara[idGara][Partecipanti]==0 && idGara!=-1)
 {
	 format(stringa,sizeof(stringa),"[RACE:] {FFFFFF}Race {446ED1}%s{FFFFFF} finish.",Gara[idGara][Nome]);
	 SendClientMessageToAll(BIANCO,stringa);
	 Gara[idGara][Podio]=0;
	 Gara[idGara][Avviata]=0;
	 Gara[idGara][Partecipanti]=0;
	 Gara[idGara][PartecipantiPronti]=0;
 }
}
//============================================================ONFILTERSCRIPTINIT
public OnFilterScriptInit()
  {
  print("_______________________________________________");
  print("       PRaceSystem by Phanto90 loaded ");
  print("            Current version: 1.3v");
  print("_______________________________________________");
  CaricaGare();
  TextGiriSfondo = TextDrawCreate(541.000000, 189.000000, "1");
  TextDrawBackgroundColor(TextGiriSfondo, 0);
  TextDrawFont(TextGiriSfondo, 1);
  TextDrawLetterSize(TextGiriSfondo, 0.579999, 1.700000);
  TextDrawColor(TextGiriSfondo, 0);
  TextDrawSetOutline(TextGiriSfondo, 0);
  TextDrawSetProportional(TextGiriSfondo, 1);
  TextDrawSetShadow(TextGiriSfondo, 1);
  TextDrawUseBox(TextGiriSfondo, 1);
  TextDrawBoxColor(TextGiriSfondo, 1010580600);
  TextDrawTextSize(TextGiriSfondo, 613.000000, 0.000000);
  
  TimerSfondo = TextDrawCreate(620.000000, 160.000000, ".sfo");
  TextDrawBackgroundColor(TimerSfondo, 0);
  TextDrawFont(TimerSfondo, 1);
  TextDrawLetterSize(TimerSfondo, 0.500000, 2.499999);
  TextDrawColor(TimerSfondo, 0);
  TextDrawSetOutline(TimerSfondo, 0);
  TextDrawSetProportional(TimerSfondo, 1);
  TextDrawSetShadow(TimerSfondo, 1);
  TextDrawUseBox(TimerSfondo, 1);
  TextDrawBoxColor(TimerSfondo, 1010580580);
  TextDrawTextSize(TimerSfondo, 535.000000, 0.000000);
  
  sfondo = TextDrawCreate(265.000000, 40.000000, "sfondo");
  TextDrawBackgroundColor(sfondo, 0);
  TextDrawFont(sfondo, 1);
  TextDrawLetterSize(sfondo, 0.500000, 3.500000);
  TextDrawColor(sfondo, 0);
  TextDrawSetOutline(sfondo, 0);
  TextDrawSetProportional(sfondo, 1);
  TextDrawSetShadow(sfondo, 1);
  TextDrawUseBox(sfondo, 1);
  TextDrawBoxColor(sfondo, 338826495);
  TextDrawTextSize(sfondo, 384.000000, 0.000000);

  sfondorosso = TextDrawCreate(278.000000, 48.000000, "sfondorosso");
  TextDrawBackgroundColor(sfondorosso, 0);
  TextDrawFont(sfondorosso, 1);
  TextDrawLetterSize(sfondorosso, 0.500000, 1.800001);
  TextDrawColor(sfondorosso, 0);
  TextDrawSetOutline(sfondorosso, 0);
  TextDrawSetProportional(sfondorosso, 1);
  TextDrawSetShadow(sfondorosso, 1);
  TextDrawUseBox(sfondorosso, 1);
  TextDrawBoxColor(sfondorosso, 840176895);
  TextDrawTextSize(sfondorosso, 293.000000, 0.000000);

  sfondogiallo = TextDrawCreate(320.000000, 48.000000, "sfondoarancione");
  TextDrawBackgroundColor(sfondogiallo, 0);
  TextDrawFont(sfondogiallo, 1);
  TextDrawLetterSize(sfondogiallo, 0.500000, 1.800001);
  TextDrawColor(sfondogiallo, 0);
  TextDrawSetOutline(sfondogiallo, 0);
  TextDrawSetProportional(sfondogiallo, 1);
  TextDrawSetShadow(sfondogiallo, 1);
  TextDrawUseBox(sfondogiallo, 1);
  TextDrawBoxColor(sfondogiallo, 842142975);
  TextDrawTextSize(sfondogiallo, 334.000000, 0.000000);

  sfondoverde = TextDrawCreate(359.000000, 48.000000, "sfondoverde");
  TextDrawBackgroundColor(sfondoverde, 0);
  TextDrawFont(sfondoverde, 1);
  TextDrawLetterSize(sfondoverde, 0.500000, 1.800001);
  TextDrawColor(sfondoverde, 0);
  TextDrawSetOutline(sfondoverde, 0);
  TextDrawSetProportional(sfondoverde, 1);
  TextDrawSetShadow(sfondoverde, 1);
  TextDrawUseBox(sfondoverde, 1);
  TextDrawBoxColor(sfondoverde, 337515775);
  TextDrawTextSize(sfondoverde, 373.000000, 0.000000);

  rossoacceso = TextDrawCreate(281.000000, 51.000000, "sfondorossoacceso");
  TextDrawBackgroundColor(rossoacceso, 0);
  TextDrawFont(rossoacceso, 1);
  TextDrawLetterSize(rossoacceso, 0.500000, 1.100001);
  TextDrawColor(rossoacceso, 0);
  TextDrawSetOutline(rossoacceso, 0);
  TextDrawSetProportional(rossoacceso, 1);
  TextDrawSetShadow(rossoacceso, 1);
  TextDrawUseBox(rossoacceso, 1);
  TextDrawBoxColor(rossoacceso, -938208001);
  TextDrawTextSize(rossoacceso, 291.000000, 0.000000);

  gialloacceso = TextDrawCreate(322.000000, 51.000000, "sfondoarancioneacceso");
  TextDrawBackgroundColor(gialloacceso, 0);
  TextDrawFont(gialloacceso, 1);
  TextDrawLetterSize(gialloacceso, 0.500000, 1.100001);
  TextDrawColor(gialloacceso, 0);
  TextDrawSetOutline(gialloacceso, 0);
  TextDrawSetProportional(gialloacceso, 1);
  TextDrawSetShadow(gialloacceso, 1);
  TextDrawUseBox(gialloacceso, 1);
  TextDrawBoxColor(gialloacceso, -926411521);
  TextDrawTextSize(gialloacceso, 332.000000, 0.000000);

  verdeacceso = TextDrawCreate(362.000000, 51.000000, "sfondoverdeacceso");
  TextDrawBackgroundColor(verdeacceso, 0);
  TextDrawFont(verdeacceso, 1);
  TextDrawLetterSize(verdeacceso, 0.500000, 1.100001);
  TextDrawColor(verdeacceso, 0);
  TextDrawSetOutline(verdeacceso, 0);
  TextDrawSetProportional(verdeacceso, 1);
  TextDrawSetShadow(verdeacceso, 1);
  TextDrawUseBox(verdeacceso, 1);
  TextDrawBoxColor(verdeacceso, 348656895);
  TextDrawTextSize(verdeacceso, 370.000000, 0.000000);
  
  TextSfondoInseguimento = TextDrawCreate(170.000000, 362.000000, "box");
  TextDrawBackgroundColor(TextSfondoInseguimento, 0);
  TextDrawFont(TextSfondoInseguimento, 1);
  TextDrawLetterSize(TextSfondoInseguimento, 0.460000, 2.700011);
  TextDrawColor(TextSfondoInseguimento, 0);
  TextDrawSetOutline(TextSfondoInseguimento, 0);
  TextDrawSetProportional(TextSfondoInseguimento, 1);
  TextDrawSetShadow(TextSfondoInseguimento, 1);
  TextDrawUseBox(TextSfondoInseguimento, 1);
  TextDrawBoxColor(TextSfondoInseguimento, 505290340);
  TextDrawTextSize(TextSfondoInseguimento, 467.000000, 0.000000);

  SfondoInseguimentoRosso = TextDrawCreate(174.000000, 366.000000, "boxrosso");
  TextDrawBackgroundColor(SfondoInseguimentoRosso, 0);
  TextDrawFont(SfondoInseguimentoRosso, 1);
  TextDrawLetterSize(SfondoInseguimentoRosso, 0.460000, 1.600010);
  TextDrawColor(SfondoInseguimentoRosso, 0);
  TextDrawSetOutline(SfondoInseguimentoRosso, 0);
  TextDrawSetProportional(SfondoInseguimentoRosso, 1);
  TextDrawSetShadow(SfondoInseguimentoRosso, 1);
  TextDrawUseBox(SfondoInseguimentoRosso, 1);
  TextDrawBoxColor(SfondoInseguimentoRosso, -1776410956);
  TextDrawTextSize(SfondoInseguimentoRosso, 243.000000, 0.000000);

  SfondoInseguimentoGiallo = TextDrawCreate(249.000000, 366.000000, "boxgiallo");
  TextDrawBackgroundColor(SfondoInseguimentoGiallo, 0);
  TextDrawFont(SfondoInseguimentoGiallo, 1);
  TextDrawLetterSize(SfondoInseguimentoGiallo, 0.460000, 1.600010);
  TextDrawColor(SfondoInseguimentoGiallo, 0);
  TextDrawSetOutline(SfondoInseguimentoGiallo, 0);
  TextDrawSetProportional(SfondoInseguimentoGiallo, 1);
  TextDrawSetShadow(SfondoInseguimentoGiallo, 1);
  TextDrawUseBox(SfondoInseguimentoGiallo, 1);
  TextDrawBoxColor(SfondoInseguimentoGiallo, -1768546636);
  TextDrawTextSize(SfondoInseguimentoGiallo, 319.000000, 0.000000);

  SfondoInseguimentoVerde = TextDrawCreate(325.000000, 366.000000, "boxverde");
  TextDrawBackgroundColor(SfondoInseguimentoVerde, 0);
  TextDrawFont(SfondoInseguimentoVerde, 1);
  TextDrawLetterSize(SfondoInseguimentoVerde, 0.460000, 1.600010);
  TextDrawColor(SfondoInseguimentoVerde, 0);
  TextDrawSetOutline(SfondoInseguimentoVerde, 0);
  TextDrawSetProportional(SfondoInseguimentoVerde, 1);
  TextDrawSetShadow(SfondoInseguimentoVerde, 1);
  TextDrawUseBox(SfondoInseguimentoVerde, 1);
  TextDrawBoxColor(SfondoInseguimentoVerde, 513154740);
  TextDrawTextSize(SfondoInseguimentoVerde, 394.000000, 0.000000);

  SfondoInseguimentoAzzurro = TextDrawCreate(400.000000, 366.000000, "boxazzurro");
  TextDrawBackgroundColor(SfondoInseguimentoAzzurro, 0);
  TextDrawFont(SfondoInseguimentoAzzurro, 1);
  TextDrawLetterSize(SfondoInseguimentoAzzurro, 0.460000, 1.600010);
  TextDrawColor(SfondoInseguimentoAzzurro, 0);
  TextDrawSetOutline(SfondoInseguimentoAzzurro, 0);
  TextDrawSetProportional(SfondoInseguimentoAzzurro, 1);
  TextDrawSetShadow(SfondoInseguimentoAzzurro, 1);
  TextDrawUseBox(SfondoInseguimentoAzzurro, 1);
  TextDrawBoxColor(SfondoInseguimentoAzzurro, 513198260);
  TextDrawTextSize(SfondoInseguimentoAzzurro, 463.000000, 0.000000);

  TextInseguimento = TextDrawCreate(274.000000, 339.000000, "   Chase");
  TextDrawBackgroundColor(TextInseguimento, 255);
  TextDrawFont(TextInseguimento, 0);
  TextDrawLetterSize(TextInseguimento, 0.629999, 2.599999);
  TextDrawColor(TextInseguimento, -1);
  TextDrawSetOutline(TextInseguimento, 0);
  TextDrawSetProportional(TextInseguimento, 1);
  TextDrawSetShadow(TextInseguimento, 1);

  TextPessimo = TextDrawCreate(188.000000, 363.000000, "  Bad");
  TextDrawBackgroundColor(TextPessimo, 255);
  TextDrawFont(TextPessimo, 1);
  TextDrawLetterSize(TextPessimo, 0.339999, 2.000000);
  TextDrawColor(TextPessimo, -1);
  TextDrawSetOutline(TextPessimo, 0);
  TextDrawSetProportional(TextPessimo, 1);
  TextDrawSetShadow(TextPessimo, 1);

  TextMediocre = TextDrawCreate(258.000000, 363.000000, "Average");
  TextDrawBackgroundColor(TextMediocre, 255);
  TextDrawFont(TextMediocre, 1);
  TextDrawLetterSize(TextMediocre, 0.339999, 2.000000);
  TextDrawColor(TextMediocre, -1);
  TextDrawSetOutline(TextMediocre, 0);
  TextDrawSetProportional(TextMediocre, 1);
  TextDrawSetShadow(TextMediocre, 1);

  TextBuono = TextDrawCreate(344.000000, 363.000000, "Good");
  TextDrawBackgroundColor(TextBuono, 255);
  TextDrawFont(TextBuono, 1);
  TextDrawLetterSize(TextBuono, 0.339999, 2.000000);
  TextDrawColor(TextBuono, -1);
  TextDrawSetOutline(TextBuono, 0);
  TextDrawSetProportional(TextBuono, 1);
  TextDrawSetShadow(TextBuono, 1);

  TextOttimo = TextDrawCreate(410.000000, 363.000000, "Excellent");
  TextDrawBackgroundColor(TextOttimo, 255);
  TextDrawFont(TextOttimo, 1);
  TextDrawLetterSize(TextOttimo, 0.339999, 2.000000);
  TextDrawColor(TextOttimo, -1);
  TextDrawSetOutline(TextOttimo, 0);
  TextDrawSetProportional(TextOttimo, 1);
  TextDrawSetShadow(TextOttimo, 1);
  
  for(new i=0;i<MAX_PLAYERS;i++)
  {
    Giocatore[i][IdGara]=-1;

    TextPunti[i] = TextDrawCreate(288.000000, 386.000000, "Points: 0000");
    TextDrawBackgroundColor(TextPunti[i], 255);
    TextDrawFont(TextPunti[i], 1);
    TextDrawLetterSize(TextPunti[i], 0.339999, 2.000000);
    TextDrawColor(TextPunti[i], -1);
    TextDrawSetOutline(TextPunti[i], 0);
    TextDrawSetProportional(TextPunti[i], 1);
    TextDrawSetShadow(TextPunti[i], 1);

    TimerText[i] = TextDrawCreate(542.000000, 150.000000, "00:00");
    TextDrawBackgroundColor(TimerText[i], 255);
    TextDrawFont(TimerText[i], 2);
    TextDrawLetterSize(TimerText[i], 0.610000, 4.099999);
    TextDrawColor(TimerText[i], TURCHESE);
    TextDrawSetOutline(TimerText[i], 0);
    TextDrawSetProportional(TimerText[i], 1);
    TextDrawSetShadow(TimerText[i], 1);
    
    TextGiriContatore[i] = TextDrawCreate(542.000000, 192.000000, "Laps: 1/3");
    TextDrawBackgroundColor(TextGiriContatore[i], 255);
    TextDrawFont(TextGiriContatore[i], 1);
    TextDrawLetterSize(TextGiriContatore[i], 0.460000, 1.000000);
    TextDrawColor(TextGiriContatore[i], -1);
    TextDrawSetOutline(TextGiriContatore[i], 0);
    TextDrawSetProportional(TextGiriContatore[i], 1);
    TextDrawSetShadow(TextGiriContatore[i], 1);
  }
  return 1;
}
//============================================================ONFILTERSCRIPTEXIT
public OnFilterScriptExit()
{
 SalvaGare();
 return 1;
}
//===============================================================ONPLAYERCONNECT
public OnPlayerConnect(playerid)
{
  return 1;
}
//============================================================ONPLAYERDISCONNECT
public OnPlayerDisconnect(playerid, reason)
{
	if(Gara[Giocatore[playerid][IdGara]][Inseguimento] && Gara[Giocatore[playerid][IdGara]][Avviata]==1)
	{
		for(new i=0;i<MAX_PLAYERS;i++)
		 {
			 if(Giocatore[i][IdGara]==Giocatore[playerid][IdGara] && i!=playerid)
			  {
				  GetPlayerName(i,nome,sizeof(nome));
				  format(stringa,sizeof(stringa),"[RACE:] {8ECE46}%s{FFFFFF} wons the race because the opponent disconnected.",nome);
				  SendClientMessageToAll(BIANCO,stringa);
				  GivePlayerMoney(i,Gara[Giocatore[i][IdGara]][Costo]*2);
				  LasciaGara(i);
			  }
		 }
	}
	LasciaGara(playerid);
	Giocatore[playerid][Costruttore]=0;
	return 1;
}
//===========================================================ONPLAYERCOMMANDTEXT
public OnPlayerCommandText(playerid, cmdtext[])
{
//=====================================GARE
	if(!strcmp(cmdtext,"/race",true))
	{
	if(Giocatore[playerid][Costruttore]==1) return SendClientMessage(playerid,ROSSO,"[ERROR:] {FFFFFF}You are in builder mode.");
	format(stringa,sizeof(stringa),"");
	for(new i=0;i<=GareCaricate; i++)
	 {
	 if(Gara[i][Giri]>1 && Gara[i][Inseguimento]==0)
	 format(stringa2,sizeof(stringa2),"{F58C5B}Circuit-{FFFFFF}%s (%d laps)",Gara[i][Nome],Gara[i][Giri]);
	 if(Gara[i][Giri]==1 && Gara[i][Inseguimento]==0)
	 format(stringa2,sizeof(stringa2),"{97EA68}Sprint-{FFFFFF}%s",Gara[i][Nome]);
	 if(Gara[i][Giri]>1 && Gara[i][Inseguimento]==1)
	 format(stringa2,sizeof(stringa2),"{446ED1}Chase-{FFFFFF}%s (%d laps)",Gara[i][Nome],Gara[i][Giri]);
	 if(Gara[i][Giri]==1 && Gara[i][Inseguimento]==1)
	 format(stringa2,sizeof(stringa2),"{446ED1}Chase-{FFFFFF}%s",Gara[i][Nome]);
	 strins(stringa,stringa2,strlen(stringa),sizeof(stringa));
	 if(i!=GareCaricate)
	 strins(stringa,"\n",strlen(stringa),sizeof(stringa));
	 }
	ShowPlayerDialog(playerid,DIALOGGARE,DIALOG_STYLE_LIST,"Avaible races",stringa,"Join","Exit");
	return 1;
	}
//=====================================LASCIAGARA
	if(!strcmp(cmdtext,"/quitrace",true))
	{
	if(Giocatore[playerid][IdGara]==-1) return SendClientMessage(playerid,ROSSO,"[ERROR:] {FFFFFF}You did not join any race.");
	if(Gara[Giocatore[playerid][IdGara]][Inseguimento] && Gara[Giocatore[playerid][IdGara]][Avviata]==1)
	{
	for(new i=0;i<MAX_PLAYERS;i++)
	 {
	 if(Giocatore[i][IdGara]==Giocatore[playerid][IdGara] && i!=playerid)
	  {
	  GetPlayerName(i,nome,sizeof(nome));
	  format(stringa,sizeof(stringa),"[RACE:] {8ECE46}%s{FFFFFF} wons the race because the opponent quitted.",nome);
	  SendClientMessageToAll(BIANCO,stringa);
	  GivePlayerMoney(i,Gara[Giocatore[i][IdGara]][Costo]*2);
	  LasciaGara(i);
	  }
	 }
	}
	LasciaGara(playerid);
	return 1;
	}
//=====================================PRONTO
	if(!strcmp(cmdtext,"/ready",true))
	{
	if(Giocatore[playerid][IdGara]==-1) return SendClientMessage(playerid,ROSSO,"[ERROR:] {FFFFFF}You did not join any race.");
	if(Giocatore[playerid][Pronto]==1) return SendClientMessage(playerid,ROSSO,"[ERROR:] {FFFFFF} You are yet ready, wait opponents to be.");
	SendClientMessage(playerid,BIANCO,"[PRONTO:] Now you are ready, wait other players to be.");
	Gara[Giocatore[playerid][IdGara]][PartecipantiPronti]++;
	Giocatore[playerid][Pronto]=1;
	if(Gara[Giocatore[playerid][IdGara]][Partecipanti]==Gara[Giocatore[playerid][IdGara]][PartecipantiPronti] && Gara[Giocatore[playerid][IdGara]][Inseguimento]==0)
	AvviaGara(Giocatore[playerid][IdGara]);
	if(Gara[Giocatore[playerid][IdGara]][PartecipantiPronti]==2 && Gara[Giocatore[playerid][IdGara]][Inseguimento]==1)
	AvviaGara(Giocatore[playerid][IdGara]);
	return 1;
	}
//=====================================COSTRUISCIGARA
	if(!strcmp(cmdtext,"/builder",true))
	{
	if(!IsPlayerAdmin(playerid)) return 1;
	if(Giocatore[playerid][IdGara]!=-1) return SendClientMessage(playerid,ROSSO,"[ERROR:]{FFFFFF} You cannot build races while racing.");
	ShowPlayerDialog(playerid,DIALOGINFOCOSTRUTTORE,0,"Info Builder","{FFFFFF}Welcome in the builder mode of {C14124}PRaceSystem{FFFFFF}.\nNow you have to inserit some race informations:\n•Race's Name\n•Laps\n•Cost\n•Creation of a checkpoint list\n\nNote: During the builder mode you cannot join races.","Proceed","");
	GareEditor++;
	Giocatore[playerid][GaraEditorId]=GareEditor;
	Giocatore[playerid][Costruttore]=1;
	format(stringa,sizeof(stringa),"Races/Race%d.txt",GareEditor);
	new File:nomegara=fopen(stringa, io_write);
	fwrite(nomegara,"Name,1,50,1000,Nobody,0");
	fclose(nomegara);
	return 1;
	}
//======================================CHECK
	if (!strcmp("/check", cmdtext, true))
	{
	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,ROSSO,"[ERROR:] {FFFFFF}You are not logged as RCON Admin");
	if(Giocatore[playerid][Costruttore]==0) return SendClientMessage(playerid,ROSSO,"[ERROR:]{FFFFFF} You are not in builder mode.");
	if(Giocatore[playerid][AttivaCheck]==0) return SendClientMessage(playerid,ROSSO,"[ERROR:]{FFFFFF} Finish to inserit race information before creating a checkpoint list.");
	SendClientMessage(playerid,VERDE,"[CHECKPOINT:] {FFFFFF}Checkpoint saved.");
	format(stringa,sizeof(stringa),"Races/Check%d.txt",Giocatore[playerid][GaraEditorId]);
	new File:nomegara=fopen(stringa, io_append);
    GetPlayerPos(playerid,XPosizione,YPosizione,ZPosizione);
    format(stringagara,sizeof(stringagara),"%f,%f,%f,\r\n",XPosizione,YPosizione,ZPosizione);
    SetPlayerCheckpoint(playerid,XPosizione,YPosizione,ZPosizione,9);
    fwrite(nomegara,stringagara);
    fclose(nomegara);
	return 1;
	}
//====================================FINECHECK
	if(!strcmp("/endcheck", cmdtext, true))
	{
	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,ROSSO,"[ERROR:] {FFFFFF}You are not logged as RCON Admin");
	if(Giocatore[playerid][Costruttore]==0) return SendClientMessage(playerid,ROSSO,"[ERROR:]{FFFFFF} You are not in builder mode.");
	if(Giocatore[playerid][AttivaCheck]==0) return SendClientMessage(playerid,ROSSO,"[ERROR:]{FFFFFF} To finish, create first a checkpoint list with /check");
	Giocatore[playerid][Costruttore]=0;
	Giocatore[playerid][AttivaCheck]=0;
	SendClientMessage(playerid,BIANCO,"[EDITOR:] You completed the race.");
	DisablePlayerCheckpoint(playerid);
	SalvaGare();
	for(new i=0;i<MAX_PLAYERS;i++){
	LasciaGara(i);}
	SendClientMessageToAll(BIANCO,"[ANNOUNCE:] Administrator has build a new race. In order to load all the other races have been forced to finish.");
	CaricaGare();
	return 1;
	}
	return 0;
}
//===================================================ONPLAYERENTERRACECHECKPOINT
public OnPlayerEnterRaceCheckpoint(playerid)
{
 if(Giocatore[playerid][IdGara]==-1) return 1;
 new g=Giocatore[playerid][IdGara];
 new c=Giocatore[playerid][Checkpoint];
 if(Gara[Giocatore[playerid][IdGara]][Avviata]==0) return 1;
 SuonoGiocatore(playerid,1138);
 //==============SECHECKPOINT==ULTIMO
 if(Giocatore[playerid][Checkpoint]==Gara[Giocatore[playerid][IdGara]][NumeroCheckpoint])
  {
  //===========SEGIRO=ULTIMO
  if(Giocatore[playerid][Giro]==Gara[Giocatore[playerid][IdGara]][Giri])
    {
    GetPlayerName(playerid,nome,sizeof(nome));
    Gara[Giocatore[playerid][IdGara]][Podio]++;
    if(Giocatore[playerid][Tempo]<Gara[Giocatore[playerid][IdGara]][Record])
    {
    new Minuti=floatround(Giocatore[playerid][Tempo]/60);
    new Secondi=Giocatore[playerid][Tempo]-(Minuti*60);
    format(stringa,sizeof(stringa),"[RECORD:] Player:{8ECE46}%s{FFFFFF} Track: {446ED1}%s{FFFFFF} Record: {C14124}%02d:%02d",nome,Gara[Giocatore[playerid][IdGara]][Nome],Minuti,Secondi);
	SendClientMessageToAll(BIANCO,stringa);
	Gara[Giocatore[playerid][IdGara]][Record]=Giocatore[playerid][Tempo];
    format(Gara[Giocatore[playerid][IdGara]][GiocatoreRecord],25,nome);
    }
	if(!Gara[Giocatore[playerid][IdGara]][Inseguimento])
	{
	format(stringa,sizeof(stringa),"[RACE:] {8ECE46}%s{FFFFFF} finish the race. Position: {C14124}%d",nome,Gara[Giocatore[playerid][IdGara]][Podio]);
	GivePlayerMoney(playerid,floatround(Gara[Giocatore[playerid][IdGara]][Costo]*Gara[Giocatore[playerid][IdGara]][PartecipantiPronti]/Gara[Giocatore[playerid][IdGara]][Podio]));
    SendClientMessageToAll(BIANCO,stringa);
	}
	if(Gara[Giocatore[playerid][IdGara]][Inseguimento])
	{
	for(new i=0;i<MAX_PLAYERS;i++)
	 {
	 if(Giocatore[i][IdGara]==Giocatore[playerid][IdGara] && i!=playerid)
	  {
	  if(Giocatore[playerid][Punti]>=Giocatore[i][Punti])
		{
	    GetPlayerName(playerid,nome,sizeof(nome));
	    format(stringa,sizeof(stringa),"[RACE:] {8ECE46}%s{FFFFFF} wons the chase race with {C14124}%d{FFFFFF} points.",nome,Giocatore[playerid][Punti]);
        SendClientMessageToAll(BIANCO,stringa);
	    GivePlayerMoney(playerid,Gara[Giocatore[playerid][IdGara]][Costo]*2);
		}
	  if(Giocatore[playerid][Punti]<Giocatore[i][Punti])
		{
	    GetPlayerName(i,nome,sizeof(nome));
	    format(stringa,sizeof(stringa),"[RACE:] {8ECE46}%s{FFFFFF} wons the chase race with {C14124}%d{FFFFFF} points.",nome,Giocatore[i][Punti]);
        SendClientMessageToAll(BIANCO,stringa);
        GivePlayerMoney(i,Gara[Giocatore[playerid][IdGara]][Costo]*2);
		}
      LasciaGara(i);
	  }
	 }
	}
    DisablePlayerRaceCheckpoint(playerid);
    LasciaGara(playerid);
    return 1;
    }
  //========SEGIRO!=ULTIMO
  else
    {
    Giocatore[playerid][Giro]++;
	SetPlayerRaceCheckpoint(playerid,0,CheckpointGara[g][0][CXPos],CheckpointGara[g][0][CYPos],CheckpointGara[g][0][CZPos],CheckpointGara[g][1][CXPos],CheckpointGara[g][1][CYPos],CheckpointGara[g][1][CZPos],9);
	Giocatore[playerid][Checkpoint]=0;
	format(stringa,sizeof(stringa),"Laps: %d/%d",Giocatore[playerid][Giro],Gara[Giocatore[playerid][IdGara]][Giri]);
	TextDrawSetString(TextGiriContatore[playerid],stringa);
	return 1;
	}
  }
  //=========SECHECKPOINTNORMALE
 if(Giocatore[playerid][Checkpoint]<Gara[Giocatore[playerid][IdGara]][NumeroCheckpoint]-1)
  {
  Giocatore[playerid][Checkpoint]++;
  c=Giocatore[playerid][Checkpoint];
  SetPlayerRaceCheckpoint(playerid,0,CheckpointGara[g][c][CXPos],CheckpointGara[g][c][CYPos],CheckpointGara[g][c][CZPos],CheckpointGara[g][c+1][CXPos],CheckpointGara[g][c+1][CYPos],CheckpointGara[g][c+1][CZPos],9);
  return 1;
  }
 //=========SECHECKPOINTFINALE
 else if(Giocatore[playerid][Checkpoint]==Gara[Giocatore[playerid][IdGara]][NumeroCheckpoint]-1)
  {
  Giocatore[playerid][Checkpoint]++;
  c=Giocatore[playerid][Checkpoint];
  SetPlayerRaceCheckpoint(playerid,1,CheckpointGara[g][c][CXPos],CheckpointGara[g][c][CYPos],CheckpointGara[g][c][CZPos],CheckpointGara[g][c+1][CXPos],CheckpointGara[g][c+1][CYPos],CheckpointGara[g][c+1][CZPos],9);
  return 1;
  }
 return 1;
}
//===================================================ONPLAYERLEAVERACECHECKPOINT
public OnPlayerLeaveRaceCheckpoint(playerid)
{
    OnPlayerEnterRaceCheckpoint(playerid);
	return 1;
}
//==============================================================ONDIALOGRESPONSE
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
	if(dialogid==DIALOGINFOGARA2)
	  {
	  Giocatore[playerid][AttivaCheck]=1;
	  return 1;
	  }
	if(dialogid==DIALOGINSEGUIMENTO)
	  {
	  if(strcmp(inputtext,"Yes",true) && strcmp(inputtext,"No",true)) return ShowPlayerDialog(playerid,DIALOGINSEGUIMENTO,DIALOG_STYLE_INPUT,"Chase option","{FFFFFF}ERROR:\nType Yes or No\nDo you want this race to be a Chase type?\n(Type Yes or No)","Continue","");
	  format(stringa,sizeof(stringa),"Races/Race%d.txt",Giocatore[playerid][GaraEditorId]);
	  new File:nomegara=fopen(stringa, io_append);
	  if(!strcmp(inputtext,"Yes",true))
	  fwrite(nomegara,",1");
	  if(!strcmp(inputtext,"No",true))
	  fwrite(nomegara,",0");
	  fclose(nomegara);
	  ShowPlayerDialog(playerid,DIALOGINFOGARA2,0,"Race Info Menu","{FFFFFF}You created the race's info file.\nNow you need a checkpoint list.\nUse the command \"{C14124}/check{FFFFFF}\" to create checkpoint for your race.\nOnce you've finished, type \"{C14124}/endcheck{FFFFFF}\" to exit builder mode and load the new race.","Go","");
	  return 1;
	  }
	if(dialogid==DIALOGCOSTOGARA)
	  {
	  if(!strlen(inputtext) || !isNumeric(inputtext) || strval(inputtext)<=0) return ShowPlayerDialog(playerid,DIALOGCOSTOGARA,DIALOG_STYLE_INPUT,"Race's Cost","{FFFFFF}Type the cost to join your race (min 1):","Continue","");
	  format(stringa,sizeof(stringa),"Races/Race%d.txt",Giocatore[playerid][GaraEditorId]);
	  new File:nomegara=fopen(stringa, io_append);
	  GetPlayerName(playerid,nome,sizeof(nome));
	  format(stringa,sizeof(stringa),"%d,1000,Nobody,%s",strval(inputtext),nome);
	  fwrite(nomegara,stringa);
	  fclose(nomegara);
	  ShowPlayerDialog(playerid,DIALOGINSEGUIMENTO,DIALOG_STYLE_INPUT,"Chase option","{FFFFFF}Do you want this race to be a Chase type?\n(Type Yes or No)","Continue","");
	  return 1;
	  }
	if(dialogid==DIALOGGIRIGARA)
	  {
	  if(!strlen(inputtext) || !isNumeric(inputtext) || strval(inputtext)<=0) return ShowPlayerDialog(playerid,DIALOGGIRIGARA,DIALOG_STYLE_INPUT,"Race's Laps","{FFFFFF}ERROR:\nType the number of laps for your races (1:sprint 2-more:circuit)","Continue","");
	  format(stringa,sizeof(stringa),"Races/Race%d.txt",Giocatore[playerid][GaraEditorId]);
	  new File:nomegara=fopen(stringa, io_append);
	  format(stringa,sizeof(stringa),"%d,",strval(inputtext));
	  fwrite(nomegara,stringa);
	  fclose(nomegara);
	  ShowPlayerDialog(playerid,DIALOGCOSTOGARA,DIALOG_STYLE_INPUT,"Race's Cost","{FFFFFF}Type the cost to join your race (min 1):","Continue","");
	  return 1;
	  }
	if(dialogid==DIALOGNOMEGARA)
	  {
	  if(!strlen(inputtext)) return ShowPlayerDialog(playerid,DIALOGNOMEGARA,DIALOG_STYLE_INPUT,"Race's Name","{FFFFFF}ERROR:\nType the name of your race:","Continua","");
	  format(stringa,sizeof(stringa),"Races/Race%d.txt",Giocatore[playerid][GaraEditorId]);
	  new File:nomegara=fopen(stringa, io_write);
	  format(stringa,sizeof(stringa),"%s,",inputtext);
	  fwrite(nomegara,stringa);
	  fclose(nomegara);
	  ShowPlayerDialog(playerid,DIALOGGIRIGARA,DIALOG_STYLE_INPUT,"Race's Laps","{FFFFFF}Type the number of laps for your races (1:sprint 2-more:circuit)","Continue","");
	  return 1;
	  }
	if(dialogid==DIALOGINFOCOSTRUTTORE)
	  {
	  ShowPlayerDialog(playerid,DIALOGNOMEGARA,DIALOG_STYLE_INPUT,"Race's Name","{FFFFFF}Type the name of you race:","Continue","");
	  return 1;
	  }
	if(dialogid==DIALOGINFO) return 1;
	if(dialogid==DIALOGGARE && response)
	{
	if(Giocatore[playerid][IdGara]!=-1) return SendClientMessage(playerid,ROSSO,"[ERROR:] {FFFFFF}You already joined another race.");
	if(Gara[listitem][Avviata]==1) return SendClientMessage(playerid,ROSSO,"[ERROR:] {FFFFFF}This race is already started. Wait its ending before joining.");
	if(Gara[listitem][Inseguimento]==1)
	{
	if(Gara[listitem][Partecipanti]==2) return SendClientMessage(playerid,ROSSO,"[ERROR:] {FFFFFF}There are already two player in this race (chase race limit)");
	if(Gara[listitem][Partecipanti]==0)
	 {
	 SendClientMessage(playerid,BIANCO,"[RACE:] You are the hunted. When the race starts, stay in front of your opponent and try to escape.");
	 }
	if(Gara[listitem][Partecipanti]==1)
	 {
	 SendClientMessage(playerid,BIANCO,"[RACE:] You are the hunter. When the race starts, stay behind your opponent and chase him.");
	 Giocatore[playerid][Inseguitore]=1;
	 }
	}
	Giocatore[playerid][IdGara]=listitem;
	GetPlayerName(playerid,nome,sizeof(nome));
	format(stringa,sizeof(stringa),"{8CE46C}%s {FFFFFF}join the race.",nome);
	GivePlayerMoney(playerid,-Gara[listitem][Costo]);
	MandaMessaggioPartecipanti(listitem,stringa);
	#if defined TELEPORT_TO_START
	SetPlayerPos(playerid,CheckpointGara[listitem][0][CXPos],CheckpointGara[listitem][0][CYPos],CheckpointGara[listitem][0][CZPos]);
	SendClientMessage(playerid,BIANCO,"[RACE:] You join the race. Type \"{C14124}/Ready{FFFFFF}\" when you are ready.");
	#else
    SendClientMessage(playerid,BIANCO,"[RACE:] You join the race. Go to the checkpoint and type \"{C14124}/Ready{FFFFFF}\" when you are ready");
	#endif
	Gara[listitem][Partecipanti]++;
	SetPlayerRaceCheckpoint(playerid,0,CheckpointGara[listitem][0][CXPos],CheckpointGara[listitem][0][CYPos],CheckpointGara[listitem][0][CZPos],CheckpointGara[listitem][1][CXPos],CheckpointGara[listitem][1][CYPos],CheckpointGara[listitem][1][CZPos],9);
    new minuti=floatround(Gara[listitem][Record]/60);
    new secondi=Gara[listitem][Record]-(minuti*60);
	format(stringa,sizeof(stringa),"{FFFFFF}Track: {8CE46C}%s\n{FFFFFF}Laps: {8CE46C}%d\n{FFFFFF}Cost: {8CE46C}%d$\n{FFFFFF}Record: {8CE46C}%02d:%02d\n{FFFFFF}Player's Record: {8CE46C}%s\n{FFFFFF}Builder: {8CE46C}%s",Gara[listitem][Nome],Gara[listitem][Giri],Gara[listitem][Costo],minuti,secondi,Gara[listitem][GiocatoreRecord],Gara[listitem][Produttore]);
	ShowPlayerDialog(playerid,DIALOGINFO,0,"Race Info",stringa,"Quit","");
	return 1;
	}
	return 1;
}
//====================================================MANDAMESSAGGIOPARTECIPANTI
stock MandaMessaggioPartecipanti(idGara,Messaggio[])
{
 for(new i=0;i<MAX_PLAYERS;i++)
 {
 if(Giocatore[i][IdGara]==idGara)
 SendClientMessage(i,BIANCO,Messaggio);
 }
}
//================================================================SUONOGIOCATORE
stock SuonoGiocatore(playerid,idsuono)
{
 new Float:SPosX,Float:SPosY,Float:SPosZ;
 GetPlayerPos(playerid,SPosX,SPosY,SPosZ);
 PlayerPlaySound(playerid,idsuono,SPosX,SPosY,SPosZ);
 return 1;
}
//=====================================================================ISNUMERIC
stock isNumeric(const string[]) {
	new length=strlen(string);
	if (length==0) return false;
	for (new i = 0; i < length; i++) {
		if (
		(string[i] > '9' || string[i] < '0' && string[i]!='-' && string[i]!='+') 
		|| (string[i]=='-' && i!=0)                                             
		|| (string[i]=='+' && i!=0)                                             
		) return false;
	}
	if (length==1 && (string[0]=='-' || string[0]=='+')) return false;
	return true;
}
Reply
#2

/bump
Reply
#3

/bump Please help dudes
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)