pawn Код:
/*
================================================================================
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.it
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//=========================FORWARDforward Tre
(playerid
);
forward Due
(playerid
);
forward Uno
(playerid
);
forward Via
(playerid
);
forward Secondo
(playerid
);
forward Cronometro
(playerid
);
//=========================VARIABILIGIOCATOREenum 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];
//==============VARIABILIGAREenum 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;
//=============VARIABILInew stringa
[1000],stringa2
[500];
new stringagara
[500];
//============TEXTDRAWnew Text:sfondo,
Text:sfondorosso,
Text:sfondogiallo,
Text:sfondoverde,
Text:rossoacceso,
Text:gialloacceso,
Text:verdeacceso;
//Textdraw semaforonew Text:TimerSfondo,
Text:TimerText
[MAX_PLAYERS
];
//Timer textdrawnew Text:TextGiriSfondo,
Text:TextGiriContatore
[MAX_PLAYERS
];
//Textdraw lapsnew Text:TextSfondoInseguimento,
Text:SfondoInseguimentoRosso,
Text:SfondoInseguimentoGiallo,
Text:SfondoInseguimentoVerde,
Text:SfondoInseguimentoAzzurro,
Text:TextInseguimento,
Text:TextPessimo,
Text:TextMediocre,
Text:TextBuono,
Text:TextOttimo,
Text:TextPunti
[MAX_PLAYERS
];
//====================================================================CARICAGAREstock 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;
}//====================================================================SALVAGAREstock 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;
}//=====================================================================AVVIAGARAstock 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;
}//===========================================================================TREpublic 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
);
}//===========================================================================DUEpublic 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
);
}//===========================================================================UNOpublic 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
);
}//===========================================================================VIApublic 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
);
}//=======================================================================SECONDOpublic Secondo
(playerid
){ TextDrawHideForPlayer
(playerid,sfondo
);
TextDrawHideForPlayer
(playerid,sfondorosso
);
TextDrawHideForPlayer
(playerid,sfondogiallo
);
TextDrawHideForPlayer
(playerid,sfondoverde
);
TextDrawHideForPlayer
(playerid,verdeacceso
);
return 1;
}//===================================================================CONTROMETROpublic 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;
}//====================================================================LASCIAGARAstock 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;
}//====================================================================CHIUDIGARAstock 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;
}}//============================================================ONFILTERSCRIPTINITpublic 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;
}//============================================================ONFILTERSCRIPTEXITpublic OnFilterScriptExit
(){ SalvaGare
();
return 1;
}//===============================================================ONPLAYERCONNECTpublic OnPlayerConnect
(playerid
){ return 1;
}//============================================================ONPLAYERDISCONNECTpublic 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;
}//===========================================================ONPLAYERCOMMANDTEXTpublic 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;
}//===================================================ONPLAYERENTERRACECHECKPOINTpublic 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;
}//===================================================ONPLAYERLEAVERACECHECKPOINTpublic OnPlayerLeaveRaceCheckpoint
(playerid
){ OnPlayerEnterRaceCheckpoint
(playerid
);
return 1;
}//==============================================================ONDIALOGRESPONSEpublic 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;
}//====================================================MANDAMESSAGGIOPARTECIPANTIstock MandaMessaggioPartecipanti
(idGara,Messaggio
[]){ for(new i
=0;i
<MAX_PLAYERS;i
++) { if(Giocatore
[i
][IdGara
]==idGara
) SendClientMessage
(i,BIANCO,Messaggio
);
}}//================================================================SUONOGIOCATOREstock SuonoGiocatore
(playerid,idsuono
){ new Float:SPosX,
Float:SPosY,
Float:SPosZ;
GetPlayerPos
(playerid,SPosX,SPosY,SPosZ
);
PlayerPlaySound
(playerid,idsuono,SPosX,SPosY,SPosZ
);
return 1;
}//=====================================================================ISNUMERICstock 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;
}