AYUDAAAAA Sistema De Race
#1

Necesito ayuda en un sistema de races.. quiero que cuando ponga la race , salga el mejor corredor y el tiempo,,.. tengo uno pero aveces se bugea D: ayudanme

Imagen de lo que quiero





Mi codigo

Код:
#include <a_samp>
#include <dini>
#include <zcmd>

#define Azul 0x375FFFFF
#define Rojo 0xFF0000FF
#define Amarillo 0xFFFF00AA
#define Verde 0x00FF00FF


#pragma tabsize 0

#define ForEach(%0,%1) \
	for(new %0 = 0; %0 != %1; %0++) if(IsPlayerConnected(%0) && !IsPlayerNPC(%0))

#define Loop(%0,%1) \
	for(new %0 = 0; %0 != %1; %0++)

#define IsOdd(%1) \
	((%1) & 1)

#define ConvertTime(%0,%1,%2,%3,%4) \
	new \
	    Float: %0 = floatdiv(%1, 60000) \
	;\
	%2 = floatround(%0, floatround_tozero); \
	%3 = floatround(floatmul(%0 - %2, 60), floatround_tozero); \
	%4 = floatround(floatmul(floatmul(%0 - %2, 60) - %3, 1000), floatround_tozero)

#define function%0(%1) \
	forward%0(%1); public%0(%1)

#define MAX_RACE_CHECKPOINTS_EACH_RACE \
 	120

#define MAX_RACES \
 	100

#define COUNT_DOWN_TILL_RACE_START \
	40 // seconds

#define MAX_RACE_TIME \
	300 // seconds

#define RACE_CHECKPOINT_SIZE \
	12.0

#define DEBUG_RACE \
0
//#define green 0x33FF33AA
new string2[256];
new
	BuildRace,
	BuildRaceType,
	BuildVehicle,
	BuildCreatedVehicle,
	BuildModeVID,
	BuildName[30],
	bool: BuildTakeVehPos,
	BuildVehPosCount,
	bool: BuildTakeCheckpoints,
	BuildCheckPointCount,
	RaceBusy = 0x00,
	RaceName[30],
	RaceVehicle,
	RaceType,
	TotalCP,
	Float: RaceVehCoords[2][4],
	Float: CPCoords[MAX_RACE_CHECKPOINTS_EACH_RACE][4],
	CreatedRaceVeh[MAX_PLAYERS],
	Index,
	PlayersCount[2],
	CountTimer,
	CountAmount,
	bool: Joined[MAX_PLAYERS],
	RaceTick,
	RaceStarted,
	CPProgess[MAX_PLAYERS],
	Position,
	FinishCount,
	JoinCount,
	rCounter,
	RaceTime,
	//Text: RaceInfo[MAX_PLAYERS],
	InfoTimer[MAX_PLAYERS],
	RacePosition[MAX_PLAYERS],
	RaceNames[MAX_RACES][128],
 	TotalRaces,
 	bool: AutomaticRace,
 	TimeProgress,

   	VehicleNames[212][] = {
	"Landstalker","Bravura","Buffalo","Linerunner","Pereniel","Sentinel","Dumper","Firetruck","Trashmaster","Stretch","Manana","Infernus",
	"Voodoo","Pony","Mule","Cheetah","Ambulance","Leviathan","Moonbeam","Esperanto","Taxi","Washington","Bobcat","Mr Whoopee","BF Injection",
	"Hunter","Premier","Enforcer","Securicar","Banshee","Predator","Bus","Rhino","Barracks","Hotknife","Trailer","Previon","Coach","Cabbie",
	"Stallion","Rumpo","RC Bandit","Romero","Packer","Monster","Admiral","Squalo","Seasparrow","Pizzaboy","Tram","Trailer","Turismo","Speeder",
	"Reefer","Tropic","Flatbed","Yankee","Caddy","Solair","Berkley's RC Van","Skimmer","PCJ-600","Faggio","Freeway","RC Baron","RC Raider",
	"Glendale","Oceanic","Sanchez","Sparrow","Patriot","Quad","Coastguard","Dinghy","Hermes","Sabre","Rustler","ZR3 50","Walton","Regina",
	"Comet","BMX","Burrito","Camper","Marquis","Baggage","Dozer","Maverick","News Chopper","Rancher","FBI Rancher","Virgo","Greenwood",
	"Jetmax","Hotring","Sandking","Blista Compact","Police Maverick","Boxville","Benson","Mesa","RC Goblin","Hotring Racer A","Hotring Racer B",
	"Bloodring Banger","Rancher","Super GT","Elegant","Journey","Bike","Mountain Bike","Beagle","Cropdust","Stunt","Tanker","RoadTrain",
	"Nebula","Majestic","Buccaneer","Shamal","Hydra","FCR-900","NRG-500","HPV1000","Cement Truck","Tow Truck","Fortune","Cadrona","FBI Truck",
	"Willard","Forklift","Tractor","Combine","Feltzer","Remington","Slamvan","Blade","Freight","Streak","Vortex","Vincent","Bullet","Clover",
	"Sadler","Firetruck","Hustler","Intruder","Primo","Cargobob","Tampa","Sunrise","Merit","Utility","Nevada","Yosemite","Windsor","Monster A",
	"Monster B","Uranus","Jester","Sultan","Stratum","Elegy","Raindance","RC Tiger","Flash","Tahoma","Savanna","Bandito","Freight","Trailer",
	"Kart","Mower","Duneride","Sweeper","Broadway","Tornado","AT-400","DFT-30","Huntley","Stafford","BF-400","Newsvan","Tug","Trailer A","Emperor",
	"Wayfarer","Euros","Hotdog","Club","Trailer B","Trailer C","Andromada","Dodo","RC Cam","Launch","Police Car (LSPD)","Police Car (SFPD)",
	"Police Car (LVPD)","Police Ranger","Picador","S.W.A.T. Van","Alpha","Phoenix","Glendale","Sadler","Luggage Trailer A","Luggage Trailer B",
	"Stair Trailer","Boxville","Farm Plow","Utility Trailer"
    };


main()
{
	print("\n----------------------------------");
	print(" Blank Gamemode by your name here");
	print("----------------------------------\n");
}


public OnFilterScriptInit()
{
 print("\n----------------------------------");
	print(" Blank Gamemode by your name here");
	print("----------------------------------\n");
    BuildCreatedVehicle = (BuildCreatedVehicle == 0x01) ? (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00) : (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00);
	KillTimer(rCounter);
	KillTimer(CountTimer);
	Loop(i, MAX_PLAYERS)
	{
		DisablePlayerRaceCheckpoint(i);
		//TextDrawDestroy(RaceInfo[i]);
		DestroyVehicle(CreatedRaceVeh[i]);
		Joined[i] = false;
		KillTimer(InfoTimer[i]);
	}
	JoinCount = 0;
	FinishCount = 0;
	AutomaticRace = false;
	return 1;
}

public OnFilterScriptExit()
{
return 1;
}


public OnPlayerDeath(playerid, killerid, reason)
{

 if(Joined[playerid] == true)
    {
		JoinCount--;
		Joined[playerid] = false;
		DestroyVehicle(CreatedRaceVeh[playerid]);
		DisablePlayerRaceCheckpoint(playerid);
		CPProgess[playerid] = 0;
		KillTimer(InfoTimer[playerid]);
		#if defined RACE_IN_OTHER_WORLD
		SetPlayerVirtualWorld(playerid, 0);
		#endif
  	}

	if(BuildRace == playerid+1) BuildRace = 0;
	return 1;
}


//Comandos rRace

CMD:armarcarrera(playerid, params[])
{

   	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, Rojo, "<!> You are not an administrator!");
	if(BuildRace != 0) return SendClientMessage(playerid, Rojo, "<!> There's already someone building a race!");
	if(RaceBusy == 0x01) return SendClientMessage(playerid, Rojo, "<!> Wait first till race ends!");
	if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, Rojo, "<!> Please leave your vehicle first!");
	BuildRace = playerid+1;
	ShowDialog(playerid, 599);
	return 1;
}
CMD:abrircarrera(playerid, params[])
{

    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, Rojo, "<!> You are not an administrator!");
    if(AutomaticRace == true) return SendClientMessage(playerid, Rojo, "<!> Not possible. Automatic race is enabled!");
    if(BuildRace != 0) return SendClientMessage(playerid, Rojo, "<!> There's someone building a race!");
    if(RaceBusy == 0x01 || RaceStarted == 1) return SendClientMessage(playerid, Rojo, "<!> There's a race currently. Wait first till race ends!");
    if(isnull(params)) return SendClientMessage(playerid, Rojo, "<!> /loadrace [nombre]");
    LoadRace(playerid, params);
    return 1;
}
CMD:pararcarrera(playerid, params[])
{

   	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, Rojo, "<!> You are not an administrator!");
    if(RaceBusy == 0x00 || RaceStarted == 0) return SendClientMessage(playerid, Rojo, "<!> There's no race to stop!");
	return StopRace();
}
CMD:join(playerid, params[])
{

	if(RaceStarted == 1) return SendClientMessage(playerid, Rojo, "<!> La Carrera ya empeso! Espera que termine!");
	if(RaceBusy == 0x00) return SendClientMessage(playerid, Rojo, "<!> No hay carreras para entrar!");
	if(Joined[playerid] == true) return SendClientMessage(playerid, Rojo, "<!> Has Entrado a la carrera!");
	if(IsPlayerInAnyVehicle(playerid)) return SetTimerEx("SetupRaceForPlayer", 2500, 0, "e", playerid), RemovePlayerFromVehicle(playerid), Joined[playerid] = true;
	SetupRaceForPlayer(playerid);
	ResetPlayerWeapons(playerid);
	Joined[playerid] = true;
	return 1;
}
CMD:carrerason(playerid, params[])
{

	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, Rojo, "<!> You are not an administrator!");
	if(RaceBusy == 0x01 || RaceStarted == 1) return SendClientMessage(playerid, Rojo, "<!> There's a race currently. Wait first till race ends!");
	if(AutomaticRace == true) return SendClientMessage(playerid, Rojo, "<!> It's already enabled!");
    LoadRaceNames();
	LoadAutoRace(RaceNames[random(TotalRaces)]);
	AutomaticRace = true;
	SendClientMessage(playerid, Verde, ">> You staRojo auto race. The filterscript will start a random race everytime the previous race is over!");
	return 1;
}
CMD:carrerasoff(playerid, params[])
{

    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, Rojo, "<!> You are not an administrator!");
    if(AutomaticRace == false) return SendClientMessage(playerid, Rojo, "<!> It's already disabled!");
    AutomaticRace = false;
    return 1;
}
CMD:exit(playerid, params[])
{

    if(Joined[playerid] == true)
    {
		JoinCount--;
		Joined[playerid] = false;
		DestroyVehicle(CreatedRaceVeh[playerid]);
	    DisablePlayerRaceCheckpoint(playerid);
		//TextDrawHideForPlayer(playerid, RaceInfo[playerid]);
		CPProgess[playerid] = 0;
		KillTimer(InfoTimer[playerid]);
		TogglePlayerControllable(playerid, true);
		SetCameraBehindPlayer(playerid);
		#if defined RACE_IN_OTHER_WORLD
		SetPlayerVirtualWorld(playerid, 0);
		#endif
		SpawnPlayer(playerid);
		SetCameraBehindPlayer(playerid);
	} else return SendClientMessage(playerid, Rojo, "<!> No estas en una carrera!");
	return 1;
}


public OnPlayerEnterRaceCheckpoint(playerid)
{
    if(CPProgess[playerid] == TotalCP -1)
	{
		new
		    TimeStamp,
		    TotalRaceTime,
            rFile[256],
			string[256],
		    pName[MAX_PLAYER_NAME],
			rTime[3],
			Prize[2],
			TempTotalTime,
		TempTime[3]
		;
		Position++;
		GetPlayerName(playerid, pName, sizeof(pName));
		TimeStamp = GetTickCount();
		TotalRaceTime = TimeStamp - RaceTick;
		ConvertTime(var, TotalRaceTime, rTime[0], rTime[1], rTime[2]);
		switch(Position)
		{
		    case 1: Prize[0] = (random(random(5000)) + 10000), Prize[1] = 10;
		    case 2: Prize[0] = (random(random(4500)) + 9000), Prize[1] = 9;
		    case 3: Prize[0] = (random(random(4000)) + 8000), Prize[1] = 8;
		    case 4: Prize[0] = (random(random(3500)) + 7000), Prize[1] = 7;
		    case 5: Prize[0] = (random(random(3000)) + 6000), Prize[1] = 6;
		    case 6: Prize[0] = (random(random(2500)) + 5000), Prize[1] = 5;
		    case 7: Prize[0] = (random(random(2000)) + 4000), Prize[1] = 4;
		    case 8: Prize[0] = (random(random(1500)) + 3000), Prize[1] = 3;
		    case 9: Prize[0] = (random(random(1000)) + 2000), Prize[1] = 2;
		    default: Prize[0] = random(random(1000)), Prize[1] = 1;
		}
		format(string, sizeof(string), "* %s Termino la carrera en la posicion %d de %d jugadores, Tiempo %d:%d.%d.", pName, RacePosition[playerid], JoinCount, rTime[0], rTime[1], rTime[2]);
		SendClientMessageToAll(Amarillo, string);

        new stringxd[400];
	    format(stringxd, sizeof(stringxd), "~b~~h~~h~tiempo:~w~ %d:%d.%d ~b~~h~~h~- ganancia:~w~$%d~n~~b~~h~~h~score:~w~+%d", rTime[0], rTime[1], rTime[2], Prize[0],Prize[1]);
	    GameTextForPlayer(playerid,stringxd,9000,3);

	    if(FinishCount <= 5)
		{
			format(rFile, sizeof(rFile), "/rRaceSystem/%s.RRACE", RaceName);
		    format(string2, sizeof(string2), "BestRacerTime_%d", TimeProgress);
		    TempTotalTime = dini_Int(rFile, string2);
		    ConvertTime(var1, TempTotalTime, TempTime[0], TempTime[1], TempTime[2]);
		    if(TotalRaceTime <= dini_Int(rFile, string2) || TempTotalTime == 0)
		    {
		        dini_IntSet(rFile, string2, TotalRaceTime);
				format(string2, sizeof(string2), "BestRacer_%d", TimeProgress);
		        if(TempTotalTime != 0) format(string2, sizeof(string2), "** \"%s\" rompiу el record de \"%s\" con \"%d\" segundos mбs rбpido en la \"%d\"!", pName, dini_Get(rFile, string2), -(rTime[1] - TempTime[1]), TimeProgress+1);
				else format(string2, sizeof(string2), "**\"%s\" rompiу un nuevo record en la \"%d\"' posiciуn!", pName, TimeProgress+1);
				SendClientMessageToAll(0x0000FFFF, string2);
				format(string2, sizeof(string2), "BestRacer_%d", TimeProgress);
				dini_Set(rFile, string2, pName);
				TimeProgress++;
		    }
		}

		SetCameraBehindPlayer(playerid);
		FinishCount++;
		GivePlayerMoney(playerid, Prize[0]);
		SetPlayerScore(playerid, GetPlayerScore(playerid) + Prize[1]);
		DisablePlayerRaceCheckpoint(playerid);
		CPProgess[playerid]++;
		if(FinishCount >= JoinCount) return StopRace();
    }
	else
	{
		CPProgess[playerid]++;
		CPCoords[CPProgess[playerid]][3]++;
		RacePosition[playerid] = floatround(CPCoords[CPProgess[playerid]][3], floatround_floor);
	    SetCP(playerid, CPProgess[playerid], CPProgess[playerid]+1, TotalCP, RaceType);

        new stringxd[400];
	    format(stringxd, sizeof(stringxd), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~b~~h~~h~checkpoint:~w~ %d/%d",CPProgess[playerid]+1, TotalCP);
	    GameTextForPlayer(playerid,stringxd,2000,3);

	    PlayerPlaySound(playerid, 1137, 0.0, 0.0, 0.0);
	}
	return 1;
}


public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    new
 		string[256],
 		rNameFile[256],
   		rFile[256],
     	Float: vPos[4]
	;
	if(newkeys & KEY_FIRE)
	{
	    if(BuildRace == playerid+1)
	    {
		    if(BuildTakeVehPos == true)
		    {
		    	if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, Rojo, ">> You need to be in a vehicle");
				format(rFile, sizeof(rFile), "/rRaceSystem/%s.RRACE", BuildName);
				GetVehiclePos(GetPlayerVehicleID(playerid), vPos[0], vPos[1], vPos[2]);
				GetVehicleZAngle(GetPlayerVehicleID(playerid), vPos[3]);
		        dini_Create(rFile);
				dini_IntSet(rFile, "vModel", BuildModeVID);
				dini_IntSet(rFile, "rType", BuildRaceType);
		        format(string, sizeof(string), "vPosX_%d", BuildVehPosCount), dini_FloatSet(rFile, string, vPos[0]);
		        format(string, sizeof(string), "vPosY_%d", BuildVehPosCount), dini_FloatSet(rFile, string, vPos[1]);
		        format(string, sizeof(string), "vPosZ_%d", BuildVehPosCount), dini_FloatSet(rFile, string, vPos[2]);
		        format(string, sizeof(string), "vAngle_%d", BuildVehPosCount), dini_FloatSet(rFile, string, vPos[3]);
		        format(string, sizeof(string), ">> Posicion del Vehiculo N° '%d' Bien Puesta!.", BuildVehPosCount+1);
		        SendClientMessage(playerid, Amarillo, string);
				BuildVehPosCount++;
			}
   			if(BuildVehPosCount >= 2)
		    {
		        BuildVehPosCount = 0;
		        BuildTakeVehPos = false;
		        ShowDialog(playerid, 605);
		    }
			if(BuildTakeCheckpoints == true)
			{
			    if(BuildCheckPointCount > MAX_RACE_CHECKPOINTS_EACH_RACE) return SendClientMessage(playerid, Rojo, ">> You reached the maximum amount of checkpoints!");
			    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, Rojo, ">> You need to be in a vehicle");
				format(rFile, sizeof(rFile), "/rRaceSystem/%s.RRACE", BuildName);
				GetVehiclePos(GetPlayerVehicleID(playerid), vPos[0], vPos[1], vPos[2]);
				format(string, sizeof(string), "CP_%d_PosX", BuildCheckPointCount), dini_FloatSet(rFile, string, vPos[0]);
				format(string, sizeof(string), "CP_%d_PosY", BuildCheckPointCount), dini_FloatSet(rFile, string, vPos[1]);
				format(string, sizeof(string), "CP_%d_PosZ", BuildCheckPointCount), dini_FloatSet(rFile, string, vPos[2]);
    			format(string, sizeof(string), ">> Checkpoint '%d' Bien Colocado!", BuildCheckPointCount+1);
		        SendClientMessage(playerid, Amarillo, string);
				BuildCheckPointCount++;
			}
		}
	}
	if(newkeys & KEY_SECONDARY_ATTACK)
	{
	    if(BuildTakeCheckpoints == true)
	    {
	        ShowDialog(playerid, 606);
			format(rNameFile, sizeof(rNameFile), "/rRaceSystem/RaceNames/RaceNames.txt");
			TotalRaces = dini_Int(rNameFile, "TotalRaces");
			TotalRaces++;
			dini_IntSet(rNameFile, "TotalRaces", TotalRaces);
			format(string, sizeof(string), "Race_%d", TotalRaces-1);
			format(rFile, sizeof(rFile), "/rRaceSystem/%s.RRACE", BuildName);
			dini_Set(rNameFile, string, BuildName);
			dini_IntSet(rFile, "TotalCP", BuildCheckPointCount);
			Loop(x, 5)
			{
				format(string, sizeof(string), "BestRacerTime_%d", x);
				dini_Set(rFile, string, "0");
				format(string, sizeof(string), "BestRacer_%d", x);
				dini_Set(rFile, string, "noone");
			}
	    }
	}
	return 1;
}


public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{

  switch(dialogid)
	{
	    case 599:
	    {
	        if(!response) return BuildRace = 0;
	        switch(listitem)
	        {
	        	case 0: BuildRaceType = 0;
	        	case 1: BuildRaceType = 3;
			}
			ShowDialog(playerid, 600);
	    }
	    case 600..601:
	    {
	        if(!response) return ShowDialog(playerid, 599);
	        if(!strlen(inputtext)) return ShowDialog(playerid, 601);
	        if(strlen(inputtext) < 1 || strlen(inputtext) > 20) return ShowDialog(playerid, 601);
	        strmid(BuildName, inputtext, 0, strlen(inputtext), sizeof(BuildName));
	        ShowDialog(playerid, 602);
	    }
	    case 602..603:
	    {
	        if(!response) return ShowDialog(playerid, 600);
	        if(!strlen(inputtext)) return ShowDialog(playerid, 603);
	        if(IsNumeric(inputtext))
	        {

	            if(!IsValidVehicle(strval(inputtext))) return ShowDialog(playerid, 603);
				new
	                Float: pPos[4]
				;
				GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
				GetPlayerFacingAngle(playerid, pPos[3]);
				BuildModeVID = strval(inputtext);
				BuildCreatedVehicle = (BuildCreatedVehicle == 0x01) ? (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00) : (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00);
	            BuildVehicle = CreateVehicle(strval(inputtext), pPos[0], pPos[1], pPos[2], pPos[3], random(126), random(126), (60 * 60));
	            PutPlayerInVehicle(playerid, BuildVehicle, 0);
				BuildCreatedVehicle = 0x01;
				ShowDialog(playerid, 604);
			}
	        else
	        {
	            if(!IsValidVehicle(ReturnVehicleID(inputtext))) return ShowDialog(playerid, 603);
				new
	                Float: pPos[4]
				;
				GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
				GetPlayerFacingAngle(playerid, pPos[3]);
				BuildModeVID = ReturnVehicleID(inputtext);
				BuildCreatedVehicle = (BuildCreatedVehicle == 0x01) ? (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00) : (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00);
	            BuildVehicle = CreateVehicle(ReturnVehicleID(inputtext), pPos[0], pPos[1], pPos[2], pPos[3], random(126), random(126), (60 * 60));
	            PutPlayerInVehicle(playerid, BuildVehicle, 0);
				BuildCreatedVehicle = 0x01;
				ShowDialog(playerid, 604);
	        }
	    }
	    case 604:
	    {
	        if(!response) return ShowDialog(playerid, 602);
			SendClientMessage(playerid, Verde, ">> Ir a la lнnea de salida en la carretera a la izquierda y pulse 'KEY_FIRE' y hacer lo mismo con la Derecha!.");
			SendClientMessage(playerid, Verde, "   - When this is done, you will see a dialog to continue.");
			BuildVehPosCount = 0;
	        BuildTakeVehPos = true;
	    }
	    case 605:
	    {
	        if(!response) return ShowDialog(playerid, 604);
	        SendClientMessage(playerid, Verde, ">> Comience a tomar los puestos de control ahora haciendo click 'KEY_FIRE'.");
	        SendClientMessage(playerid, Verde, "   - Presione 'ENTER' cuando haya terminado con los puntos de control: IMPORTANTE! Si no reacciona de aprete otra vez.");
	        BuildCheckPointCount = 0;
	        BuildTakeCheckpoints = true;
	    }
	    case 606:
	    {
	        if(!response) return ShowDialog(playerid, 606);
	        BuildRace = 0;
	        BuildCheckPointCount = 0;
	        BuildVehPosCount = 0;
	        BuildTakeCheckpoints = false;
	        BuildTakeVehPos = false;
	        BuildCreatedVehicle = (BuildCreatedVehicle == 0x01) ? (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00) : (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00);
	    }
	}
	return 1;

}



stock Float:GetDistanceBetweenPlayers(p1,p2)
{
	new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;

	if (!IsPlayerConnected(p1) || !IsPlayerConnected(p2)){
		return -1.00;
	}
	GetPlayerPos(p1,x1,y1,z1);
	GetPlayerPos(p2,x2,y2,z2);
	return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
}


stock GetModel(weaponid)
{
	for(new i=0; i<sizeof(ForbiddenWeapons); i++)
	{
		if(weaponid == ForbiddenWeapons[i])
		{
			return -1;
		}
	}
	switch(weaponid)
	{   case 1: return 331;case 2: return 333;case 3: return 334;
	    case 4: return 335;case 5: return 336;case 6: return 337;
	    case 7: return 338;case 8: return 339;case 9: return 341;case 10: return 321;
	    case 11: return 322;case 12: return 323;case 13: return 324;
	    case 14: return 325; case 15: return 326;case 16: return 342;
	    case 17: return 343; case 18: return 344;case 22: return 346;
	    case 23: return 347;case 24: return 348; case 25: return 349;
	    case 26: return 350;case 27: return 351;case 28: return 352;
	    case 29: return 353;case 30: return 355;case 31: return 356;case 32:
        return 372;case 33: return 357;case 34: return 358;case 35: return 359;
	    case 36: return 360;case 37: return 361;case 38: return 362;case 39: return 363;
	    case 40: return 364;case 41: return 365;case 42: return 366;case 43: return 367;
	    case 44: return 368;case 45: return 369;case 46: return 371;default: return -1;
	}
	return -1;
}

function LoadRaceNames()
{
	new
	    rNameFile[64],
	    string[64]
	;
	format(rNameFile, sizeof(rNameFile), "/rRaceSystem/RaceNames/RaceNames.txt");
	TotalRaces = dini_Int(rNameFile, "TotalRaces");
	Loop(x, TotalRaces)
	{
	    format(string, sizeof(string), "Race_%d", x), strmid(RaceNames[x], dini_Get(rNameFile, string), 0, 20, sizeof(RaceNames));
	    printf(">> Loaded Races: %s", RaceNames[x]);
	}
    TimeProgress = 0;
	return 1;
}

function LoadAutoRace(rName[])
{
	new
		rFile[256],
		string[256]
	;
	format(rFile, sizeof(rFile), "/rRaceSystem/%s.RRACE", rName);
	if(!dini_Exists(rFile)) return printf("Race \"%s\" doesn't exist!", rName);
	strmid(RaceName, rName, 0, strlen(rName), sizeof(RaceName));
	RaceVehicle = dini_Int(rFile, "vModel");
	RaceType = dini_Int(rFile, "rType");
	TotalCP = dini_Int(rFile, "TotalCP");

	#if DEBUG_RACE == 1
	printf("VehicleModel: %d", RaceVehicle);
	printf("RaceType: %d", RaceType);
	printf("TotalCheckpoints: %d", TotalCP);
	#endif

	Loop(x, 2)
	{
		format(string, sizeof(string), "vPosX_%d", x), RaceVehCoords[x][0] = dini_Float(rFile, string);
		format(string, sizeof(string), "vPosY_%d", x), RaceVehCoords[x][1] = dini_Float(rFile, string);
		format(string, sizeof(string), "vPosZ_%d", x), RaceVehCoords[x][2] = dini_Float(rFile, string);
		format(string, sizeof(string), "vAngle_%d", x), RaceVehCoords[x][3] = dini_Float(rFile, string);
		#if DEBUG_RACE == 1
		//printf("VehiclePos %d: %f, %f, %f, %f", x, RaceVehCoords[x][0], RaceVehCoords[x][1], RaceVehCoords[x][2], RaceVehCoords[x][3]);
		#endif
	}
	Loop(x, TotalCP)
	{
 		format(string, sizeof(string), "CP_%d_PosX", x), CPCoords[x][0] = dini_Float(rFile, string);
 		format(string, sizeof(string), "CP_%d_PosY", x), CPCoords[x][1] = dini_Float(rFile, string);
 		format(string, sizeof(string), "CP_%d_PosZ", x), CPCoords[x][2] = dini_Float(rFile, string);
 		#if DEBUG_RACE == 1
 		//printf("RaceCheckPoint %d: %f, %f, %f", x, CPCoords[x][0], CPCoords[x][1], CPCoords[x][2]);
 		#endif
	}
	Position = 0;
	FinishCount = 0;
	JoinCount = 0;
	Loop(x, 2) PlayersCount[x] = 0;
	CountAmount = COUNT_DOWN_TILL_RACE_START;
	RaceTime = MAX_RACE_TIME;
	RaceBusy = 0x01;
	CountTimer = SetTimer("CountTillRace", 999, 1);
    TimeProgress = 0;
	return 1;
}

function LoadRace(playerid, rName[])
{
	new
		rFile[256],
		string[256]
	;
	format(rFile, sizeof(rFile), "/rRaceSystem/%s.RRACE", rName);
	if(!dini_Exists(rFile)) return SendClientMessage(playerid, Rojo, "<!> Race doesn't exist!"), printf("Race \"%s\" doesn't exist!", rName);
	strmid(RaceName, rName, 0, strlen(rName), sizeof(RaceName));
	RaceVehicle = dini_Int(rFile, "vModel");
	RaceType = dini_Int(rFile, "rType");
	TotalCP = dini_Int(rFile, "TotalCP");

	#if DEBUG_RACE == 1
	printf("VehicleModel: %d", RaceVehicle);
	printf("RaceType: %d", RaceType);
	printf("TotalCheckpoints: %d", TotalCP);
	#endif

	Loop(x, 2)
	{
		format(string, sizeof(string), "vPosX_%d", x), RaceVehCoords[x][0] = dini_Float(rFile, string);
		format(string, sizeof(string), "vPosY_%d", x), RaceVehCoords[x][1] = dini_Float(rFile, string);
		format(string, sizeof(string), "vPosZ_%d", x), RaceVehCoords[x][2] = dini_Float(rFile, string);
		format(string, sizeof(string), "vAngle_%d", x), RaceVehCoords[x][3] = dini_Float(rFile, string);
		#if DEBUG_RACE == 1
		//printf("VehiclePos %d: %f, %f, %f, %f", x, RaceVehCoords[x][0], RaceVehCoords[x][1], RaceVehCoords[x][2], RaceVehCoords[x][3]);
		#endif
	}
	Loop(x, TotalCP)
	{
 		format(string, sizeof(string), "CP_%d_PosX", x), CPCoords[x][0] = dini_Float(rFile, string);
 		format(string, sizeof(string), "CP_%d_PosY", x), CPCoords[x][1] = dini_Float(rFile, string);
 		format(string, sizeof(string), "CP_%d_PosZ", x), CPCoords[x][2] = dini_Float(rFile, string);
 		#if DEBUG_RACE == 1
 		//printf("RaceCheckPoint %d: %f, %f, %f", x, CPCoords[x][0], CPCoords[x][1], CPCoords[x][2]);
 		#endif
	}
	Position = 0;
	FinishCount = 0;
	JoinCount = 0;
	Loop(x, 2) PlayersCount[x] = 0;
	Joined[playerid] = true;
	CountAmount = COUNT_DOWN_TILL_RACE_START;
	RaceTime = MAX_RACE_TIME;
	RaceBusy = 0x01;
//	TimeProgress = 0;
	SetupRaceForPlayer(playerid);
	CountTimer = SetTimer("CountTillRace", 999, 1);
	return 1;
}

function SetCP(playerid, PrevCP, NextCP, MaxCP, Type)
{
	if(Type == 0)
	{
		if(NextCP == MaxCP) SetPlayerRaceCheckpoint(playerid, 1, CPCoords[PrevCP][0], CPCoords[PrevCP][1], CPCoords[PrevCP][2], CPCoords[NextCP][0], CPCoords[NextCP][1], CPCoords[NextCP][2], RACE_CHECKPOINT_SIZE);
			else SetPlayerRaceCheckpoint(playerid, 0, CPCoords[PrevCP][0], CPCoords[PrevCP][1], CPCoords[PrevCP][2], CPCoords[NextCP][0], CPCoords[NextCP][1], CPCoords[NextCP][2], RACE_CHECKPOINT_SIZE);
	}
	else if(Type == 3)
	{
		if(NextCP == MaxCP) SetPlayerRaceCheckpoint(playerid, 4, CPCoords[PrevCP][0], CPCoords[PrevCP][1], CPCoords[PrevCP][2], CPCoords[NextCP][0], CPCoords[NextCP][1], CPCoords[NextCP][2], RACE_CHECKPOINT_SIZE);
			else SetPlayerRaceCheckpoint(playerid, 3, CPCoords[PrevCP][0], CPCoords[PrevCP][1], CPCoords[PrevCP][2], CPCoords[NextCP][0], CPCoords[NextCP][1], CPCoords[NextCP][2], RACE_CHECKPOINT_SIZE);
	}
	return 1;
}

function SetupRaceForPlayer(playerid)
{
	CPProgess[playerid] = 0;
	TogglePlayerControllable(playerid, false);
	CPCoords[playerid][3] = 0;
	SetCP(playerid, CPProgess[playerid], CPProgess[playerid]+1, TotalCP, RaceType);
	if(IsOdd(playerid)) Index = 1;
	    else Index = 0;

	switch(Index)
	{
		case 0:
		{
		    if(PlayersCount[0] == 1)
		    {
				RaceVehCoords[0][0] -= (6 * floatsin(-RaceVehCoords[0][3], degrees));
		 		RaceVehCoords[0][1] -= (6 * floatcos(-RaceVehCoords[0][3], degrees));
		   		CreatedRaceVeh[playerid] = CreateVehicle(RaceVehicle, RaceVehCoords[0][0], RaceVehCoords[0][1], RaceVehCoords[0][2]+2, RaceVehCoords[0][3], random(126), random(126), (60 * 60));
				SetPlayerPos(playerid, RaceVehCoords[0][0], RaceVehCoords[0][1], RaceVehCoords[0][2]+2);
				SetPlayerFacingAngle(playerid, RaceVehCoords[0][3]);
				PutPlayerInVehicle(playerid, CreatedRaceVeh[playerid], 0);

                SendClientMessage(playerid, 0xFFFF00AA, "		");
	            SendClientMessage(playerid, 0xFFFF00AA, "* Estas congelado, cuando termine la cuenta regresiva podrбs comenzar");
	            SendClientMessage(playerid, 0xFFFF00AA, "A correr contra los competidores por el primer puesto, Dinero y Score!");
	            SendClientMessage(playerid, 0xFFFF00AA, "AutoFix Activado (Vehiculo indestructible) y Turbo Desactivado");

				Camera(playerid, RaceVehCoords[0][0], RaceVehCoords[0][1], RaceVehCoords[0][2], RaceVehCoords[0][3], 20);
			}
		}
		case 1:
 		{
 		    if(PlayersCount[1] == 1)
 		    {
				RaceVehCoords[1][0] -= (6 * floatsin(-RaceVehCoords[1][3], degrees));
		 		RaceVehCoords[1][1] -= (6 * floatcos(-RaceVehCoords[1][3], degrees));
		   		CreatedRaceVeh[playerid] = CreateVehicle(RaceVehicle, RaceVehCoords[1][0], RaceVehCoords[1][1], RaceVehCoords[1][2]+2, RaceVehCoords[1][3], random(126), random(126), (60 * 60));
				SetPlayerPos(playerid, RaceVehCoords[1][0], RaceVehCoords[1][1], RaceVehCoords[1][2]+2);
				SetPlayerFacingAngle(playerid, RaceVehCoords[1][3]);
				PutPlayerInVehicle(playerid, CreatedRaceVeh[playerid], 0);

	            SendClientMessage(playerid, 0xFFFF00AA, "		");
	            SendClientMessage(playerid, 0xFFFF00AA, "* Estas congelado, cuando termine la cuenta regresiva podrбs comenzar");
	            SendClientMessage(playerid, 0xFFFF00AA, "A correr contra los competidores por el primer puesto, Dinero y Score!");
	            SendClientMessage(playerid, 0xFFFF00AA, "AutoFix Activado (Vehiculo indestructible) y Turbo Desactivado");
				Camera(playerid, RaceVehCoords[1][0], RaceVehCoords[1][1], RaceVehCoords[1][2], RaceVehCoords[1][3], 20);
    		}
 		}
	}
	switch(Index)
	{
	    case 0:
		{
			if(PlayersCount[0] != 1)
			{
		   		CreatedRaceVeh[playerid] = CreateVehicle(RaceVehicle, RaceVehCoords[0][0], RaceVehCoords[0][1], RaceVehCoords[0][2]+2, RaceVehCoords[0][3], random(126), random(126), (60 * 60));
				SetPlayerPos(playerid, RaceVehCoords[0][0], RaceVehCoords[0][1], RaceVehCoords[0][2]+2);
				SetPlayerFacingAngle(playerid, RaceVehCoords[0][3]);
				PutPlayerInVehicle(playerid, CreatedRaceVeh[playerid], 0);

	            SendClientMessage(playerid, 0xFFFF00AA, "		");
	            SendClientMessage(playerid, 0xFFFF00AA, "* Estas congelado, cuando termine la cuenta regresiva podrбs comenzar");
	            SendClientMessage(playerid, 0xFFFF00AA, "A correr contra los competidores por el primer puesto, Dinero y Score!");
	            SendClientMessage(playerid, 0xFFFF00AA, "AutoFix Activado (Vehiculo indestructible) y Turbo Desactivado");

				Camera(playerid, RaceVehCoords[0][0], RaceVehCoords[0][1], RaceVehCoords[0][2], RaceVehCoords[0][3], 20);
			    PlayersCount[0] = 1;
		    }
	    }
	    case 1:
	    {
			if(PlayersCount[1] != 1)
			{
		   		CreatedRaceVeh[playerid] = CreateVehicle(RaceVehicle, RaceVehCoords[1][0], RaceVehCoords[1][1], RaceVehCoords[1][2]+2, RaceVehCoords[1][3], random(126), random(126), (60 * 60));
				SetPlayerPos(playerid, RaceVehCoords[1][0], RaceVehCoords[1][1], RaceVehCoords[1][2]+2);
				SetPlayerFacingAngle(playerid, RaceVehCoords[1][3]);
				PutPlayerInVehicle(playerid, CreatedRaceVeh[playerid], 0);
				SendClientMessage(playerid, 0xFFFF00AA, "		");
	            SendClientMessage(playerid, 0xFFFF00AA, "* Estas congelado, cuando termine la cuenta regresiva podrбs comenzar");
	            SendClientMessage(playerid, 0xFFFF00AA, "A correr contra los competidores por el primer puesto, Dinero y Score!");
	            SendClientMessage(playerid, 0xFFFF00AA, "AutoFix Activado (Vehiculo indestructible) y Turbo Desactivado");
				Camera(playerid, RaceVehCoords[1][0], RaceVehCoords[1][1], RaceVehCoords[1][2], RaceVehCoords[1][3], 20);
				PlayersCount[1] = 1;
		    }
   		}
	}

	#if defined RACE_IN_OTHER_WORLD
	SetPlayerVirtualWorld(playerid, 10);
	#endif
	JoinCount++;
	return 1;
}

function Camera(playerid, Float:X, Float:Y, Float:Z, Float:A, Mul)
{
	SetPlayerCameraLookAt(playerid, X, Y, Z);
	SetPlayerCameraPos(playerid, X + (Mul * floatsin(-A, degrees)), Y + (Mul * floatcos(-A, degrees)), Z+6);
}

function CountTillRace()
{
	switch(CountAmount)
	{
 		case 0:
	    {
			ForEach(i, MAX_PLAYERS)
			{
			    if(Joined[i] == false)
			    {

    	        }
			}
			StartRace();
	    }

	    case 1..5:
	    {
	    new
	            string[100]
			;
	    ForEach(i, MAX_PLAYERS)
        {
        if(Joined[i] == true)
	    {
	    SetCameraBehindPlayer(i);
	    format(string, sizeof(string), "~G~~h~~h~%d!", CountAmount);
	    }

        if(Joined[i] == true)
        {
        GameTextForPlayer(i, string, 999, 5);
		PlayerPlaySound(i, 1039, 0.0, 0.0, 0.0);
        }
	    }
	    }
	    case 6..39:
	    {
	        new
	            string[100]
			;
			format(string, sizeof(string), "~n~~r~~h~~h~%d!", CountAmount);
			ForEach(i, MAX_PLAYERS)
			{
			    if(Joined[i] == true)
			    {
			    	GameTextForPlayer(i, string, 999, 5);
			    	PlayerPlaySound(i, 1056, 0.0, 0.0, 0.0);
			    }
			}
	    }
	    case 40:
	    {
	        new
	            string[128]
			;
			SendClientMessageToAll(Verde, " ");
			format(string, sizeof(string), "{E1FF00}* Carrera {FFFFFF}\"%s\" {E1FF00}comienza en \"%d\" segundos!.", RaceName, CountAmount);
			SendClientMessageToAll(Verde, string);
			SendClientMessageToAll(Verde, "{E1FF00}Escribe {FFFFFF}/join {E1FF00}para participar en la carrera, Debes estar dentro de un vehнculo");
			SendClientMessageToAll(Verde, "{E1FF00}Escribe {FFFFFF}/exit {E1FF00}para salir de la carrera, Spawnearas en tu Equipo-Spawn");

			ForEach(i, MAX_PLAYERS)
			{
			}
	    }
	}
	return CountAmount--;
}

function StartRace()
{
	ForEach(i, MAX_PLAYERS)
	{
	    if(Joined[i] == true)
	    {
	        TogglePlayerControllable(i, true);
	        PlayerPlaySound(i, 1141, 0.0, 0.0, 0.0);
  			GameTextForPlayer(i, "~b~~h~~h~ya ya ya!!!!", 2000, 5);




			//SetCameraBehindPlayer(i);
	    }
	}
	rCounter = SetTimer("RaceCounter", 900, 1);
	RaceTick = GetTickCount();
	RaceStarted = 1;
	KillTimer(CountTimer);
	return 1;
}

function StopRace()
{
	KillTimer(rCounter);
	RaceStarted = 0;
	RaceTick = 0;
	RaceBusy = 0x00;
	JoinCount = 0;
	FinishCount = 0;
    TimeProgress = 0;

	ForEach(i, MAX_PLAYERS)
	{
	    if(Joined[i] == true)
	    {
	    	DisablePlayerRaceCheckpoint(i);
	    	DestroyVehicle(CreatedRaceVeh[i]);
	    	Joined[i] = false;
			CPProgess[i] = 0;
			KillTimer(InfoTimer[i]);
		}
	}
	//TextDrawDestroy(TextoAnuncioCarrera);
	if(AutomaticRace == true) LoadRaceNames(), LoadAutoRace(RaceNames[random(TotalRaces)]);
	return 1;
}

function RaceCounter()
{
	if(RaceStarted == 1)
	{
		RaceTime--;
		if(JoinCount <= 0)
		{
			StopRace();
			SendClientMessageToAll(Rojo, ">> Carrera terminу .. No queda nadie en la carrera!");
		}
	}
	if(RaceTime <= 0)
	{
	    StopRace();
	}
	return 1;
}

function IsPlayerInRace(playerid)
{
	if(Joined[playerid] == true) return true;
	    else return false;
}

function ShowDialog(playerid, dialogid)
{
	switch(dialogid)
	{
		case 599: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, CreateCaption("Creando una nueva carrera"), "\
		Carrera Normal (en vehiculo)\n\
		Carrera de aviones", "Siguiente", "Salir");

	    case 600: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateCaption("Creando nueva carrera (Paso 1/4)"), "\
		Paso 1:\n\
		********\n\
 		Bienvenido a 'Construccion de carreras'.\n\
		Antes de comenzar debes ingresar el nombre que le quieres poner a la nueva carrera (EJ: SFRace)\n\n\
		>> Luego de haberle puesto el nombre a tu carrera presiona 'Siguiente' para continuar.", "Siguiente", "Volver");

	    case 601: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateCaption("Creando nueva carrera (Paso 1/4)"), "\
	    ERROR: el nombre que le pusiste a la carrera es muy corto o muy largo! (min. 1 - max. 20 letras)\n\n\n\
		Paso 1:\n\
        ********\n\
 		Bienvenido a 'Construccion de carreras'.\n\
		Antes de comenzar debes ingresar el nombre que le quieres poner a la nueva carrera (EJ: SFRace)\n\n\
		>> Luego de haberle puesto el nombre a tu carrera presiona 'Siguiente' para continuar.", "Siguiente", "Volver");

		case 602: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateCaption("Creando nueva carrera (Paso 2/4)"), "\
		Paso 2:\n\
		********\n\
		Ingresa la 'ID' o 'Nombre' del vehiculo que quieres que se utiliza en esta carrera.\n\n\
		>> Luego de haber ingresado la 'ID' o el 'Nombre' presiona 'Siguiente' para continuar. 'Volver' para cambiar algo anterior.", "Siguiente", "Volver");

		case 603: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateCaption("Build New Race (Step 2/4)"), "\
		ERROR: El nombre del vehiculo o la id que ingresaste no existe.\n\n\n\
		Step 2:\n\
		********\n\
		Ingresa la 'ID' o 'Nombre' del vehiculo que quieres que se utiliza en esta carrera.\n\n\
		>> Luego de haber ingresado la 'ID' o el 'Nombre' presiona 'Siguiente' para continuar. 'Volver' para cambiar algo anterior.", "Siguiente", "Volver");

		case 604: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, CreateCaption("Build New Race (Step 3/4)"),
		"\
		Step 3:\n\
		********\n\
		We are almost done! Now go to the start line where the first and second car should stand.\n\
		Note: When you click 'OK' you will be free. Use 'KEY_FIRE' to set the first position and second position.\n\
		Note: After you got these positions you will automaticly see a dialog to continue the wizard.\n\n\
		>> Press 'OK' to do the things above. 'Back' to change something.", "OK", "Back");

		case 605: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, CreateCaption("Build New Race (Step 4/4)"),
		"\
		Step 4:\n\
		********\n\
		Welcome to the last stap. In this stap you have to set the checkpoints; so if you click 'OK' you can set the checkpoints.\n\
		You can set the checkpoints with 'KEY_FIRE'. Each checkpoint you set will save.\n\
		You have to press 'ENTER' button when you're done with everything. You race is aviable then!\n\n\
		>> Press 'OK' to do the things above. 'Back' to change something.", "OK", "Back");

		case 606: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, CreateCaption("Build New Race (Done)"),
		"\
		You have created your race and it's ready to use now.\n\n\
		>> Press 'Finish' to finish. 'Exit' - Has no effect.", "Finish", "Exit");
	}
	return 1;
}

CreateCaption(arguments[])
{
	new
	    string[128 char]
	;
	format(string, sizeof(string), "RyDeR's Race System - %s", arguments);
	return string;
}

stock IsValidVehicle(vehicleid)
{
	if(vehicleid < 400 || vehicleid > 611) return false;
	    else return true;
}

ReturnVehicleID(vName[])
{
	Loop(x, 211)
	{
	    if(strfind(VehicleNames[x], vName, true) != -1)
		return x + 400;
	}
	return -1;
}


stock IsNumeric(string[])
{
	for (new i = 0, j = strlen(string); i < j; i++)
	{
		if (string[i] > '9' || string[i] < '0') return 0;
	}
	return 1;
}

stock VehiculosInvalidos(modelo)
{
    switch(GetVehicleModel(modelo))
    {
		case 520, 432,476,593,553,513,
		512,577,592,511,539,464,460,519,
		548,425,417,487,497,563,501,465,
		447,469,488,472,473,493,595,484,
		430,453,452,446,454: return 1;
	}
	return 0;
}


stock ResetPlayerVarDisconnect(playerid)
{
  if(Joined[playerid] == true)
    {
		JoinCount--;
		Joined[playerid] = false;
		DestroyVehicle(CreatedRaceVeh[playerid]);
		DisablePlayerRaceCheckpoint(playerid);
		//TextDrawHideForPlayer(playerid, RaceInfo[playerid]);
		CPProgess[playerid] = 0;
		KillTimer(InfoTimer[playerid]);
		#if defined RACE_IN_OTHER_WORLD
		SetPlayerVirtualWorld(playerid, 0);
		#endif
	}
	if(BuildRace == playerid+1) BuildRace = 0;
 return 1;
}
Reply
#2

Debes contar cuando arranque la carrera y hacer un timer por jugador, y cuando llega a la meta obtener el nombre de quien terminу primero y el tiempo.
Reply
#3

Quote:
Originally Posted by Goncho28
Посмотреть сообщение
Debes contar cuando arranque la carrera y hacer un timer por jugador, y cuando llega a la meta obtener el nombre de quien terminу primero y el tiempo.
Hola, gracias por responder, pero...ya puse lo del mensaje del mejor corredor ., ahora intento poner lo del tiempo, y me sale BUG Osea pongo el tiempo y cuando pongo la race me salen numeros locos...:/ y cuando se termina la race y la vuelvo a poner salen otros numeros locos, sin aver echo RECORD, AYUDA, Gracias...
Reply
#4

Quote:
Originally Posted by Goncho28
Посмотреть сообщение
Debes contar cuando arranque la carrera y hacer un timer por jugador, y cuando llega a la meta obtener el nombre de quien terminу primero y el tiempo.
Como pongo el tiempo en el mensaje cuando haga una race... Gracias..
Reply
#5

ejemplo...

PHP код:
#define RACE_CANTIDAD (2)
new race_vueltas[MAX_PLAYERS];
new 
race_hora[MAX_PLAYERS][RACE_CANTIDAD],race_minuto[MAX_PLAYERS][RACE_CANTIDAD],race_segundo[MAX_PLAYERS][RACE_CANTIDAD];
// cuando inicia la carrera
race_iniciada true;
new 
HourMinuteSecond;
gettime(HourMinuteSecond);
for(new 
i=0j=GetPlayerPoolSize(); i<=ji++){
    
race_hora[i][race_vueltas[i]] = Hour,race_minuto[i][race_vueltas[i]] = Minute,race_segundo[i][race_vueltas[i]] = Second;
}
// cuando entramos al checkpoint que corresponde a la meta
new HourMinuteSecond;
if(
race_vueltas[playerid] <= RACE_CANTIDAD ){
    
race_vueltas[playerid] ++;
    
gettime(HourMinuteSecond);
    
printf("tiempo que tardo en la vuelta:%02d, tiempo:%02d:%02d:%02d"race_vueltas[playerid],Hour-race_hora[playerid][race_vueltas[playerid]], Minute-race_minuto[playerid][race_vueltas[playerid]], Secondrace_segundo[playerid][race_vueltas[playerid]]);
}
// cuando termina la carrera
for(new size=0size<sizeof race_vueltassize++){
    if(
size == 0printf("tiempo que comenzo en la vuelta:%02d, tiempo:%02d:%02d:%02d"size,race_hora[playerid][size],race_minuto[playerid][size],race_segundo[playerid][size]);
    else 
printf("tiempo que tardo en la vuelta:%02d, tiempo:%02d:%02d:%02d"size,race_hora[playerid][size],race_minuto[playerid][size],race_segundo[playerid][size]);

Reply
#6

Quote:
Originally Posted by OTACON
Посмотреть сообщение
ejemplo...

PHP код:
#define RACE_CANTIDAD (2)
new race_vueltas[MAX_PLAYERS];
new 
race_hora[MAX_PLAYERS][RACE_CANTIDAD],race_minuto[MAX_PLAYERS][RACE_CANTIDAD],race_segundo[MAX_PLAYERS][RACE_CANTIDAD];
// cuando inicia la carrera
race_iniciada true;
new 
HourMinuteSecond;
gettime(HourMinuteSecond);
for(new 
i=0j=GetPlayerPoolSize(); i<=ji++){
    
race_hora[i][race_vueltas[i]] = Hour,race_minuto[i][race_vueltas[i]] = Minute,race_segundo[i][race_vueltas[i]] = Second;
}
// cuando entramos al checkpoint que corresponde a la meta
new HourMinuteSecond;
if(
race_vueltas[playerid] <= RACE_CANTIDAD ){
    
race_vueltas[playerid] ++;
    
gettime(HourMinuteSecond);
    
printf("tiempo que tardo en la vuelta:%02d, tiempo:%02d:%02d:%02d"race_vueltas[playerid],Hour-race_hora[playerid][race_vueltas[playerid]], Minute-race_minuto[playerid][race_vueltas[playerid]], Secondrace_segundo[playerid][race_vueltas[playerid]]);
}
// cuando termina la carrera
for(new size=0size<sizeof race_vueltassize++){
    if(
size == 0printf("tiempo que comenzo en la vuelta:%02d, tiempo:%02d:%02d:%02d"size,race_hora[playerid][size],race_minuto[playerid][size],race_segundo[playerid][size]);
    else 
printf("tiempo que tardo en la vuelta:%02d, tiempo:%02d:%02d:%02d"size,race_hora[playerid][size],race_minuto[playerid][size],race_segundo[playerid][size]);


Hola si, muchas gracias por responder.. pero como pongo los minutos que hizo el corredor , en el mensaje que sale cando hago la race? Ejemplo:

"la carrera samp empezara en unos momentos , el record es de "User (esto ya lo tengo) tiempo 00:05:02 (esto es lo que quiero) , Gracias...
Reply
#7

їEstas pidiendo que te lo hagan, no?
Reply
#8

Quote:
Originally Posted by Speedpro
Посмотреть сообщение
їEstas pidiendo que te lo hagan, no?

No PUTO que me ayuden pendejo..
Reply
#9

Ya dieron varios ejemplo, podrнas guiarte.
Reply
#10

Quote:
Originally Posted by Speedpro
Посмотреть сообщение
Ya dieron varios ejemplo, podrнas guiarte.
Lo hago, lo hice, pero me salen bug D:
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)