SA-MP Forums Archive
[Ajuda] Bloquear tele na corrida - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Ajuda] Bloquear tele na corrida (/showthread.php?tid=516806)



Bloquear tele na corrida - Bl4ckN3w - 01.06.2014

Galera to precisando de ajuda eu to com um FS de sistema de corrida que peguei de um outro servidor da internet o nome й RraceES mas nгo consigo fazer com que quando a pessoa der /entrarrace nгo consiga usar mas usar nenhum comando a nгo ser /Srace, se tiver como alguйm me ajudar ae porfavor.

Esse й o cуdigo que eu vi que meu gm usa para bloquear os teles quando vai /x1.

Код:
new bool:EventoProibirTele = false;
new EventoAtivo;
new NoEvento[MAX_PLAYERS];
if(EventoProibirTele == true && NoEvento[playerid] == 1 && EventoAtivo == 1) return
Aqui ta o FS quem puder me ajudar ae por favor


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


#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 \
	30 // seconds
	
#define MAX_RACE_TIME \
	300 // seconds
	
#define RACE_CHECKPOINT_SIZE \
	12.0

#define DEBUG_RACE \
 	0

#define DIALOG_RACES \
	350

#define IsPlayerInMiniGame \
    GetPVarInt(playerid, "PlayerInMiniGame") == 1
//#define RACE_IN_OTHER_WORLD // Uncomment to enable
	
#define GREY \
	0xAFAFAFAA
	
#define GREEN \
	0x9FFF00FF
	
#define RED \
	0xE60000FF
	
#define YELLOW \
	0xFFFF00AA
	
#define WHITE \
	0xFFFFFFAA
	
new
	vNames[212][] =
	{
		{"Landstalker"},
		{"Bravura"},
		{"Buffalo"},
		{"Linerunner"},
		{"Perrenial"},
		{"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 1"},
		{"Previon"},
		{"Coach"},
		{"Cabbie"},
		{"Stallion"},
		{"Rumpo"},
		{"RC Bandit"},
		{"Romero"},
		{"Packer"},
		{"Monster"},
		{"Admiral"},
		{"Squalo"},
		{"Seasparrow"},
		{"Pizzaboy"},
		{"Tram"},
		{"Trailer 2"},
		{"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"},
		{"ZR-350"},
		{"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 LA"},
		{"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 Flat"}, 
		{"Streak Carriage"}, 
		{"Kart"},
		{"Mower"},
		{"Duneride"},
		{"Sweeper"},
		{"Broadway"},
		{"Tornado"},
		{"AT-400"},
		{"DFT-30"},
		{"Huntley"},
		{"Stafford"},
		{"BF-400"},
		{"Newsvan"},
		{"Tug"},
		{"Trailer 3"},
		{"Emperor"},
		{"Wayfarer"},
		{"Euros"},
		{"Hotdog"},
		{"Club"},
		{"Freight Carriage"}, 
		{"Trailer 3"},
		{"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"}
	},
	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
 	
;

public OnFilterScriptExit()
{
	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;
		SetPVarInt(i, "JoinedToRRAce", false);
		KillTimer(InfoTimer[i]);
	}
	JoinCount = 0;
	FinishCount = 0;
	TimeProgress = 0;
	AutomaticRace = false;
	return 1;
}

CMD:buildrace(playerid, params[])
{
	if(BuildRace != 0) return SendClientMessage(playerid, RED, "<!> Ya se estб construyendo una carrera");
	if(RaceBusy == 0x01) return SendClientMessage(playerid, RED, "<!> Espera a que acabe la carrera primero");
	if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, RED, "<!> Por favor, primero bajate del vehнculo");
	BuildRace = playerid+1;
	ShowDialog(playerid, 599);
	return 1;
}

CMD:ssdstartrace(playerid, params[])
{
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, RED, "<!> No eres administrador!");
    if(IsPlayerInMiniGame) return SendClientMessage(playerid, 0xFF4500FF, "Estбs en un minijuego, usa /salir");
    if(AutomaticRace == true) return SendClientMessage(playerid, RED, "<!> No es posible, el modo automatico estб activado");
    if(BuildRace != 0) return SendClientMessage(playerid, RED, "<!> Se estб construyendo una carrera");
    if(RaceBusy == 0x01 || RaceStarted == 1) return SendClientMessage(playerid, RED, "<!> Hay una carrera en curso. Espera a que acabe");
    if(isnull(params)) return SendClientMessage(playerid, RED, "<!> /startrace [racename]");
    LoadRace(playerid, params);
    return 1;
}

CMD:sdstoprace(playerid, params[])
{
   	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, RED, "<!> No eres administrador!");
   	if(IsPlayerInMiniGame) return SendClientMessage(playerid, 0xFF4500FF, "Estбs en un minijuego, usa /salir");
    if(RaceBusy == 0x00 || RaceStarted == 0) return SendClientMessage(playerid, RED, "<!> No hay ninguna carrera activa!");
	SendClientMessageToAll(RED, ">> An admin stopped the current race!");
	return StopRace();
}

CMD:dsdjoinrace(playerid, params[])
{
	if(RaceStarted == 1) return SendClientMessage(playerid, RED, "<!> La carrera ya ha empezado, espera a que acabe");
	if(RaceBusy == 0x00) return SendClientMessage(playerid, RED, "<!> No hay ninguna carrera para unirte");
	if(IsPlayerInMiniGame) return SendClientMessage(playerid, 0xFF4500FF, "Estбs en un minijuego, usa /salir");
	if(Joined[playerid] == true) return SendClientMessage(playerid, RED, "<!> Ya estбs en una carrera!");
	if(IsPlayerInAnyVehicle(playerid)) return SetTimerEx("SetupRaceForPlayer", 2500, 0, "e", playerid), RemovePlayerFromVehicle(playerid), SetPVarInt(playerid, "JoinedToRRAce", true), Joined[playerid] = true;
	SetupRaceForPlayer(playerid);
	Joined[playerid] = true;
	SetPVarInt(playerid, "JoinedToRRAce", true);
	return 1;
}

CMD:dsdstartautorace(playerid, params[])
{
	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, RED, "<!> No eres administrador!");
	if(RaceBusy == 0x01 || RaceStarted == 1) return SendClientMessage(playerid, RED, "<!> Hay una carrera activada. Espera a que acabe!");
	if(AutomaticRace == true) return SendClientMessage(playerid, RED, "<!> El modo automбtico ya estб activado. Si se desea desactivar /stopautorace!");
    LoadRaceNames();
	LoadAutoRace(RaceNames[random(TotalRaces)]);
	AutomaticRace = true;
	SendClientMessage(playerid, GREEN, ">> Has iniciado la autocarrera. El filterscript elejirб carreras al azar!");
	return 1;
}

CMD:dsdstopautorace(playerid, params[])
{
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, RED, "<!> No eres administrador!");
    if(AutomaticRace == false) return SendClientMessage(playerid, RED, "<!> Ya estб desactivado!");
    AutomaticRace = false;
    return 1;
}

CMD:dsexitrace(playerid, params[])
{
    if(Joined[playerid] == true)
    {
		JoinCount--;
		Joined[playerid] = false;
		SetPVarInt(playerid, "JoinedToRRAce", 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
	} else return SendClientMessage(playerid, RED, "<!> No estбs en ninguna carrera");
	return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
	if(CPProgess[playerid] == TotalCP -1)
	{
		new
		    TimeStamp,
		    TotalRaceTime,
		    string[256],
		    rFile[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), ">> {00CCFF}%s {FFFFFF}ha terminado la carrera en la posiciуn {00CCFF}#%d", pName, Position);
		SendClientMessageToAll(WHITE, string);
		format(string, sizeof(string), "    - Tiempo: {FFFF00}%d:%d.%d.", rTime[0], rTime[1], rTime[2]);
		SendClientMessageToAll(WHITE, string);
		format(string, sizeof(string), "    - Premio: {FFFF00}$%d y +%d Score.", Prize[0], Prize[1]);
		SendClientMessageToAll(WHITE, string);
		
		if(FinishCount <= 5)
		{
			format(rFile, sizeof(rFile), "/rRaceSystem/%s.RRACE", RaceName);
		    format(string, sizeof(string), "BestRacerTime_%d", TimeProgress);
		    TempTotalTime = dini_Int(rFile, string);
		    ConvertTime(var1, TempTotalTime, TempTime[0], TempTime[1], TempTime[2]);
		    if(TotalRaceTime <= dini_Int(rFile, string) || TempTotalTime == 0)
		    {
		        dini_IntSet(rFile, string, TotalRaceTime);
				format(string, sizeof(string), "BestRacer_%d", TimeProgress);
		        if(TempTotalTime != 0) format(string, sizeof(string), ">> {00CCFF}%s {FFFFFF}ha echo un nuevo record en la carrera {00CCFF}%s {FFFFFF}con {00CCFF}%d segundos en la posiciуn {00CCFF}#%d", pName, dini_Get(rFile, string), -(rTime[1] - TempTime[1]), TimeProgress+1);
					else format(string, sizeof(string), ">> {00CCFF}%s ha hecho un nuevo record de posiciуn {00CCFF}#%d", pName, TimeProgress+1);
                SendClientMessageToAll(GREEN, "  ");
				SendClientMessageToAll(GREEN, string);
				SendClientMessageToAll(GREEN, "  ");
				format(string, sizeof(string), "BestRacer_%d", TimeProgress);
				dini_Set(rFile, string, pName);
				TimeProgress++;
		    }
		}
		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);
	    PlayerPlaySound(playerid, 1137, 0.0, 0.0, 0.0);
	}
    return 1;
}

public OnPlayerDisconnect(playerid)
{
	if(Joined[playerid] == true)
    {
		JoinCount--;
		Joined[playerid] = false;
		SetPVarInt(playerid, "JoinedToRRAce", 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
	}
	TextDrawDestroy(RaceInfo[playerid]);
	if(BuildRace == playerid+1) BuildRace = 0;
	return 1;
}

public OnPlayerConnect(playerid)
{
	RaceInfo[playerid] = TextDrawCreate(488.199737, 317.916625, " ");
	TextDrawLetterSize(RaceInfo[playerid], 0.449999, 1.600000);
	TextDrawAlignment(RaceInfo[playerid], 1);
	TextDrawColor(RaceInfo[playerid], -1);
	TextDrawSetShadow(RaceInfo[playerid], 0);
	TextDrawSetOutline(RaceInfo[playerid], 1);
	TextDrawBackgroundColor(RaceInfo[playerid], 255);
	TextDrawFont(RaceInfo[playerid], 1);
	TextDrawSetProportional(RaceInfo[playerid], 58);
	return 1;
}

public OnPlayerDeath(playerid)
{
    if(Joined[playerid] == true)
    {
		JoinCount--;
		Joined[playerid] = false;
		SetPVarInt(playerid, "JoinedToRRAce", 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;
}

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, GREEN, ">> Ir a la lнnea de salida de la izquierda y pulsa 'KEY_FIRE' y hacer lo mismo con el bloque de camino.");
			SendClientMessage(playerid, GREEN, "   - Cuando se hace esto, verб un cuadro de diбlogo para continuar.");
			BuildVehPosCount = 0;
	        BuildTakeVehPos = true;
	    }
	    case 605:
	    {
	        if(!response) return ShowDialog(playerid, 604);
	        SendClientMessage(playerid, GREEN, ">> Comience a tomar los puestos de control ahora pulsando 'KEY_FIRE'.");
	        SendClientMessage(playerid, GREEN, "   - IMPORTANTE: Presione 'ENTER' cuando haya terminado con los puntos de control! Si no reacciona presiona una y 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;
}

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, RED, ">> Se necesita estar en un vehнculo");
				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), ">> Vehicle Pos '%d' has been taken.", BuildVehPosCount+1);
		        SendClientMessage(playerid, YELLOW, 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, RED, ">> Llegу a la mбxima cantidad de puntos de control!");
			    //if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, RED, ">> Se necesita estar en un vehнculo");
				format(rFile, sizeof(rFile), "/rRaceSystem/%s.RRACE", BuildName);
				GetVehiclePos(GetPlayerVehicleID(playerid), vPos[0], vPos[1], vPos[2]);
				new string1[64];
				format(string1, sizeof(string1), "CP_%d_PosX", BuildCheckPointCount);
				dini_FloatSet(rFile, string1, vPos[0]);
				new string2[64];
				format(string2, sizeof(string2), "CP_%d_PosY", BuildCheckPointCount);
				dini_FloatSet(rFile, string2, vPos[1]);
				new string3[64];
				format(string3, sizeof(string3), "CP_%d_PosZ", BuildCheckPointCount);
				dini_FloatSet(rFile, string3, vPos[2]);
				new string4[145];
    			format(string4, sizeof(string4), ">> Punto de control {00CCFF}#%d {FFFF00}ha sido puesto correctamente!", BuildCheckPointCount+1);
		        SendClientMessage(playerid, YELLOW, string4);
				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;
}

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]);
	}
	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;
	CallRemoteFunction("OnRaceStart", "");
	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, RED, "<!> La carrera no existe"), printf("La carrera \"%s\" no existe!", 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;
	SetPVarInt(playerid, "JoinedToRRAce", true);
	CountAmount = COUNT_DOWN_TILL_RACE_START;
	RaceTime = MAX_RACE_TIME;
	RaceBusy = 0x01;
	TimeProgress = 0;
	SetupRaceForPlayer(playerid);
	CountTimer = SetTimer("CountTillRace", 999, 1);
	CallRemoteFunction("OnRaceStart", "");
	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);
				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);
				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);
				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);
				Camera(playerid, RaceVehCoords[1][0], RaceVehCoords[1][1], RaceVehCoords[1][2], RaceVehCoords[1][3], 20);
				PlayersCount[1] = 1;
		    }
   		}
	}
	new
	    string[128]
	;
	#if defined RACE_IN_OTHER_WORLD
	SetPlayerVirtualWorld(playerid, 10);
	#endif
	InfoTimer[playerid] = SetTimerEx("TextInfo", 500, 1, "e", playerid);
	if(JoinCount == 1) format(string, sizeof(string), "~r~~h~Nombre: ~w~%s~n~~r~~h~Checkpoint: ~w~%d/%d~n~~r~~h~Tiempo: ~w~%s~n~~r~~h~Posicion: ~w~1/1", RaceName, CPProgess[playerid], TotalCP, TimeConvert(RaceTime));
		else format(string, sizeof(string), "~r~~h~Nombre: ~w~%s~n~~r~~h~Checkpoint: ~w~%d/%d~n~~r~~h~Tiempo: ~w~%s~n~~r~~h~Posicion: ~w~%d/%d", RaceName, CPProgess[playerid], TotalCP, TimeConvert(RaceTime), RacePosition[playerid], JoinCount);
	TextDrawSetString(RaceInfo[playerid], string);
	TextDrawShowForPlayer(playerid, RaceInfo[playerid]);
	JoinCount++;
	return 1;
}

function CountTillRace()
{
	switch(CountAmount)
	{
 		case 0:
	    {
			ForEach(i, MAX_PLAYERS)
			{
			    if(Joined[i] == false)
			    {
			        new
			            string[128]
					;
					format(string, sizeof(string), ">> No te puedes unir a la carrera \"%s\". El tiempo terminу!", RaceName);
					SendClientMessage(i, RED, string);
				}
			}
			StartRace();
	    }
	    case 1..5:
	    {
	        new
	            string[10]
			;
			format(string, sizeof(string), "~b~%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 60, 50, 40, 30, 20, 10:
	    {
	        new
	            string[145]
			;
			format(string, sizeof(string), ">> Faltan {00CCFF}%d {9FFF00}segundos para que la carrera {00CCFF}%s {9FFF00}empieze! Escribe {00CCFF}/joinrace", CountAmount, RaceName);
			SendClientMessageToAll(GREEN, string);
	    }
	}
	return CountAmount--;
}

function StartRace()
{
	ForEach(i, MAX_PLAYERS)
	{
	    if(Joined[i] == true)
	    {
	        TogglePlayerControllable(i, true);
	        PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
	        CallRemoteFunction("OnRaceEnd", "");
  			GameTextForPlayer(i, "~g~VAMOS !", 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;
	CallRemoteFunction("OnRaceEnd", "");
	JoinCount = 0;
	FinishCount = 0;
    TimeProgress = 0;
    
	ForEach(i, MAX_PLAYERS)
	{
	    if(Joined[i] == true)
	    {
	    	DisablePlayerRaceCheckpoint(i);
	    	DestroyVehicle(CreatedRaceVeh[i]);
	    	Joined[i] = false;
	    	SetPVarInt(i, "JoinedToRRAce", false);
			TextDrawHideForPlayer(i, RaceInfo[i]);
			CPProgess[i] = 0;
			KillTimer(InfoTimer[i]);
		}
	}
	SendClientMessageToAll(YELLOW, ">> La carrera ha terminado!");
	if(AutomaticRace == true) LoadRaceNames(), LoadAutoRace(RaceNames[random(TotalRaces)]);
	return 1;
}

function RaceCounter()
{
	if(RaceStarted == 1)
	{
		RaceTime--;
		if(JoinCount <= 0)
		{
			StopRace();
			SendClientMessageToAll(RED, ">> La carrera finalizу.. No hay nadie en la carrera!");
		}
	}
	if(RaceTime <= 0)
	{
	    StopRace();
	}
	return 1;
}

function TextInfo(playerid)
{
	new
	    string[128]
	;
	if(JoinCount == 1) format(string, sizeof(string), "~r~~h~Nombre: ~w~%s~n~~r~~h~Checkpoint: ~w~%d/%d~n~~r~~h~Tiempo: ~w~%s~n~~r~~h~Posicion: ~w~1/1", RaceName, CPProgess[playerid], TotalCP, TimeConvert(RaceTime));
		else format(string, sizeof(string), "~r~~h~Nombre: ~w~%s~n~~r~~h~Checkpoint: ~w~%d/%d~n~~r~~h~Tiempo: ~w~%s~n~~r~~h~Posicion: ~w~%d/%d", RaceName, CPProgess[playerid], TotalCP, TimeConvert(RaceTime), RacePosition[playerid], JoinCount);
	TextDrawSetString(RaceInfo[playerid], string);
	TextDrawShowForPlayer(playerid, RaceInfo[playerid]);
}

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 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("Construir una nueva carrera"), "\
		Carrera Normal\n\
		Carrera por el aire", ">>", "Salir");

	    case 600: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateCaption("Construir una nueva carrera (Paso 1/4)"), "\
		Step 1:\n\
		********\n\
 		Welcome to wizard 'Build New Race'.\n\
		Before getting started, I need to know the name (e.g. SFRace) of the to save it under.\n\n\
		>> Give the NAME below and press 'Next' to continue.", "Next", "Back");

	    case 601: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateCaption("Construir una nueva carrera (Paso 1/4)"), "\
	    ERROR: Name too short or too long! (min. 1 - max. 20)\n\n\n\
		Step 1:\n\
		********\n\
 		Welcome to wizard 'Build New Race'.\n\
		Before getting started, I need to know the name (e.g. SFRace) of the to save it under.\n\n\
		>> Give the NAME below and press 'Next' to continue.", "Next", "Back");

		case 602: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateCaption("Construir una nueva carrera (Paso 2/4)"), "\
		Step 2:\n\
		********\n\
		Please give the ID or NAME of the vehicle that's going to be used in the race you are creating now.\n\n\
		>> Give the ID or NAME of the vehicle below and press 'Next' to continue. 'Back' to change something.", "Next", "Back");

		case 603: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateCaption("Build New Race (Step 2/4)"), "\
		ERROR: Invalid Vehilce ID/Name\n\n\n\
		Step 2:\n\
		********\n\
		Please give the ID or NAME of the vehicle that's going to be used in the race you are creating now.\n\n\
		>> Give the ID or NAME of the vehicle below and press 'Next' to continue. 'Back' to change something.", "Next", "Back");

		case 604: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, CreateCaption("Construir una nueva carrera (Paso 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("Construir una nueva carrera (Paso 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;
}

stock IsNumeric(string[])
{
	for (new i = 0, j = strlen(string); i < j; i++)
	{
		if (string[i] > '9' || string[i] < '0') return 0;
	}
	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(vNames[x], vName, true) != -1)
		return x + 400;
	}
	return -1;
}

TimeConvert(seconds)
{
	new tmp[16];
 	new minutes = floatround(seconds/60);
  	seconds -= minutes*60;
   	format(tmp, sizeof(tmp), "%d:%02d", minutes, seconds);
   	return tmp;
}



Re: Bloquear tele na corrida - CyNiC - 01.06.2014

Vocк tб usando um FS, logo o cуdigo й separado do gamemode, terб que fazer algo no FS entгo jб que os comandos sгo verificados primeiro nos filterscripts.

Seu FS usa ZCMD, o que facilita um pouco seu trabalho.

Use a callback OnPlayerCommandPerfomed para detectar o comando que foi digitado pelo jogador e assim, se for diferente do comando de sair da corrida dar retorno 0 nos comandos do gamemode.

pawn Код:
public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
    if(IsPlayerInRace(playerid) && strcmp(cmdtext, "/SAIRDACORRIDA", true) != 0) return 0;
    return 1;
}
Deixe este filterscript em primeiro na linha filterscripts do server.cfg.


Re: Bloquear tele na corrida - Bl4ckN3w - 01.06.2014

Tipo no caso eu so preciso usar esse comando que vocк coloco ae nгo manjo muito de pawno
e pergunta tem como eu bloquear o sistema de god car e flip quando ele ir desativa ?


Re: Bloquear tele na corrida - Bl4ckN3w - 01.06.2014

Tem como me ajuda com esses warning

Код:
C:\Users\asus-pc\Desktop\TRABALHO DE MATEMATICA\filterscripts\rRaceES.pwn(958) : warning 219: local variable "Index" shadows a variable at a preceding level
C:\Users\asus-pc\Desktop\TRABALHO DE MATEMATICA\filterscripts\rRaceES.pwn(1293) : warning 203: symbol is never used: "Index"
Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


2 Warnings
As linhas

(958 ): new Index;
(1293): Nгo existe essa linha


Re: Bloquear tele na corrida - Bl4ckN3w - 01.06.2014

Mano consegui bloquear o teleporte sу que eutenho que bloquear um por um, e tambйm ele estб bloqueando mesmo fora da corrida se puder ajudar ae.

[PEDIDO]
Queria saber se nгo tinha nenhum outro cуdigo que pudesse bloquear os outros comandos automaticamente quando fosse para a corrida e que eu pudesse seleciona somente o comando que eu quero que funcione na corrida, e tambйm uma mensagem para o player quando tivesse na corrida e digitasse qualquer outro comando mostra-se esta mensagem.
Vocк estб em uma corrida use /Srace para sair.


Re: Bloquear tele na corrida - CyNiC - 02.06.2014

Nгo й permitido postar uma mensagem se a ъltima mensagem tiver sido sua, o moderador pode te advertir.

Quote:
Originally Posted by Bl4ckN3w
Посмотреть сообщение
Tipo no caso eu so preciso usar esse comando que vocк coloco ae nгo manjo muito de pawno
e pergunta tem como eu bloquear o sistema de god car e flip quando ele ir desativa ?
Achei que vocк entendia um pouco, bom, se vocк tiver interesse em aprender, o pessoal te ajuda, agora se quiser que resolvamos o problema aн й diferente, nгo dб.

Sobre a pergunta, o cуdigo que te passei bloqueia todos os comandos, sу й permitido o "/SAIRDACORRIDA", se quiser permitir outro, copie a parte do strcmp e adicionando um && antes.
pawn Код:
&& strcmp(cmdtext, "/report", true) != 0
Quote:
Originally Posted by Bl4ckN3w
Посмотреть сообщение
Tem como me ajuda com esses warning

As linhas

(958 ): new Index;
(1293): Nгo existe essa linha
Mude todas apariзхes de Index para outro nome.

Quote:
Originally Posted by Bl4ckN3w
Посмотреть сообщение
Mano consegui bloquear o teleporte sу que eutenho que bloquear um por um, e tambйm ele estб bloqueando mesmo fora da corrida se puder ajudar ae.
Poste como vocк fez.

Boa sorte, nгo sei se vou te responder mais por hoje, boa noite.


Re: Bloquear tele na corrida - Bl4ckN3w - 03.06.2014

Mano eu usei Aquele cуdigo que vocк me passo e ele nгo estб bloqueando os outros comandos ele ta dando algum erro eu nгo sei o que pode sу sei que quando uso o comando de iniciar a corrida as vezes bloqueia os comandos sem ir a corrida se puder me ajudar ae.

Код:
public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
    if(IsPlayerInRace(playerid) && strcmp(cmdtext, "/SAIRDACORRIDA", true) != 0) return 0;
    return 1;
}



Re: Bloquear tele na corrida - Bl4ckN3w - 03.06.2014

Tem como alguйm me ajudar ae ?


Re: Bloquear tele na corrida - Bl4ckN3w - 09.06.2014

Ei alguem ae pode me dar uma ajuda com esse sistema.