Lugares en una Carrera -
EvelioCuenca - 21.03.2013
Hola amigos lelvo tiempo en el foro pero nunca habia posteado algo, ahora si necesito su ayuda estoy creando una carrera, tengo un textdraw que marca la posicion que va es decir "1/20" que va en primer luigar lo que quiero es que me ayuden en como hacer para que marque el lugar en el que el jugador va.
Yo ya lo eh hecho pero lo eh hecho asi que cuando un jugador pase el 1 checkpoint le de el lugar uno y a los de mas que pasen le de el 2 el 3 y ah si dependiendo en que lugar pasen en el checkpoint, yo lo tengo asi pero ahora yo no lo quiero asi , yo quiero que me ayuden ah hacer yo eh visto que otros servers lo tienen mejor como? asi ahora lo explico
Otros servers tienen que si alguien que va en 2 lugar y pasa al que va en 1 lugar rapidamente le da el lugar 1 al que le paso y asi y no es necesario que cada jugador pase por el cp para que cuente el Lugar en el que van
Bueno espero que me puedan ayudar y espero haberme explicado bien, Gracias
Respuesta: Lugares en una Carrera -
OTACON - 21.03.2013
coloca en OnPlayerEnterCheckpoint en el Checkpoint correspondiente ke le sume una variable y listo.
Respuesta: Lugares en una Carrera -
xSDx - 21.03.2013
Usa esta funcion es lo que necesitas:
pawn Код:
stock GetDistanceForNextChecktpointForTwoPlayers(player1,player2,Float:x1,Float:y1,Float:z1)
{
if(!IsPlayerConnected(player1) || !IsPlayerConnected(player2))return -1
new Float:P[2][2], Float:Z, Float:res[2];
GetPlayerPos(player1, P[0][0], P[0][1], Z);
P[1][0] = x1;
P[1][1] = y1;
Z = z1;
res[0] = floatsqroot(floatpower(floatabs(floatsub(P[0][0],P[1][0])),2)+floatpower(floatabs(floatsub(P[0][1],P[1][1])),2))
GetPlayerPos(player2, P[0][0], P[0][1], Z);
P[1][0] = x1;
P[1][1] = y1;
Z = z1;
res[1] = floatsqroot(floatpower(floatabs(floatsub(P[0][0],P[1][0])),2)+floatpower(floatabs(floatsub(P[0][1],P[1][1])),2))
if(res[0] > res[1])return player1;
if(res[1] > res[0])return player2;
return -1;
}
uso:
pawn Код:
new string[256], Ganador;
Ganador = GetDistanceForNextChecktpointForTwoPlayers(player1,player2,X,Y,Z);
if(Ganador != -1)
{
format(string,sizeof(string),"** El jugador %s (%d) va ganando la carrera!",PlayerName2(Ganador),Ganador);
SendClientMessageToAll(-1,string);
}
Esta funcion siempre regresara la id de el jugador mas cercano al punto X,Y entre dos jugadores.
la hise yo especialmente para este post, avisame si funciona, pues no puedo testearla ahora.
Saludos.
Respuesta: Lugares en una Carrera -
OTACON - 21.03.2013
Quote:
Originally Posted by xSDx
Usa esta funcion es lo que necesitas:
pawn Код:
stock GetDistanceForNextChecktpointForTwoPlayers(player1,player2,Float:x1,Float:y1,Float:z1) { if(!IsPlayerConnected(player1) || !IsPlayerConnected(player2))return -1 new Float:P[2][2], Float:Z, Float:res[2]; GetPlayerPos(player1, P[0][0], P[0][1], Z); P[1][0] = x1; P[1][1] = y1; Z = z1; res[0] = floatsqroot(floatpower(floatabs(floatsub(P[0][0],P[1][0])),2)+floatpower(floatabs(floatsub(P[0][1],P[1][1])),2))
GetPlayerPos(player2, P[0][0], P[0][1], Z); P[1][0] = x1; P[1][1] = y1; Z = z1; res[1] = floatsqroot(floatpower(floatabs(floatsub(P[0][0],P[1][0])),2)+floatpower(floatabs(floatsub(P[0][1],P[1][1])),2))
if(res[0] > res[1])return player1; if(res[1] > res[0])return player2; return -1; }
uso:
pawn Код:
new string[256], Ganador; Ganador = GetDistanceForNextChecktpointForTwoPlayers(player1,player2,X,Y,Z); if(Ganador != -1) { format(string,sizeof(string),"** El jugador %s (%d) va ganando la carrera!",PlayerName2(Ganador),Ganador); SendClientMessageToAll(-1,string); }
Esta funcion siempre regresara la id de el jugador mas cercano al punto X,Y entre dos jugadores.
la hise yo especialmente para este post, avisame si funciona, pues no puedo testearla ahora.
Saludos.
|
esta bien esa funcion, pero el lo ke kiere es ke se le marke en el textdraw .no el ganador, el puesto del vehiculo.
Respuesta: Lugares en una Carrera -
xSDx - 21.03.2013
es demasiado facil hacer eso, como ejemplo le di la funcion para que el lo termine.
Saludos.
Respuesta: Lugares en una Carrera -
OTACON - 21.03.2013
Quote:
Originally Posted by xSDx
es demasiado facil hacer eso, como ejemplo le di la funcion para que el lo termine.
Saludos.
|
¬¬, ya se ke es facil.
el simplemente lo ke kiere es lo ke le dije yo nada mas, pero por eso te dije ke esta bien la funcion le sevira para el sistema de carrara
.
Respuesta: Lugares en una Carrera -
Alberto_Avil - 21.03.2013
Borren comentario porfavor
Re: Lugares en una Carrera -
EvelioCuenca - 21.03.2013
Quote:
Originally Posted by bytytus
coloca en OnPlayerEnterCheckpoint en el Checkpoint correspondiente ke le sume una variable y listo.
|
si tengo como tu lo dices dejo una parte del public donde estan los cp
pawn Код:
case 2:
{
DisablePlayerRaceCheckpoint(playerid);
PlayerPlaySound(playerid, 1056, 0.0, 0.0, 10.0);
SetPlayerRaceCheckpoint(playerid, 0,-1668.36950684,-2717.47851562,46.40485382,-1941.94824219,-2717.49609375,53.02991104,10);////
Stats[playerid] = 3;
new string[128];
static place;
place++;
TextDrawHideForPlayer(playerid, Textdraw1);
format ( string , sizeof ( string ) , "~r~Place: ~w~%dst" , place) ;
Textdraw1 = TextDrawCreate(557.000000,331.000000,string);
TextDrawShowForPlayer(playerid, Textdraw1);
return 1;
}
case 3:
{
DisablePlayerRaceCheckpoint(playerid);
PlayerPlaySound(playerid, 1056, 0.0, 0.0, 10.0);
SetPlayerRaceCheckpoint(playerid, 0,-1941.94824219,-2717.49609375,53.02991104,-2233.88330078,-2753.46411133,36.40560150,10);/////
Stats[playerid] = 4;
new string[128];
static place;
place++;
TextDrawHideForPlayer(playerid, Textdraw1);
format ( string , sizeof ( string ) , "~r~Place: ~w~%dst" , place) ;
Textdraw1 = TextDrawCreate(557.000000,331.000000,string);
TextDrawShowForPlayer(playerid, Textdraw1);
return 1;
}
case 4:
{
DisablePlayerRaceCheckpoint(playerid);
PlayerPlaySound(playerid, 1056, 0.0, 0.0, 10.0);
SetPlayerRaceCheckpoint(playerid, 0,-2233.88330078,-2753.46411133,36.40560150,-2487.64746094,-2678.77075195,43.17927551,10);//////
Stats[playerid] = 5;
new string[128];
static place;
place++;
TextDrawHideForPlayer(playerid, Textdraw1);
format ( string , sizeof ( string ) , "~r~Place: ~w~%dst" , place) ;
Textdraw1 = TextDrawCreate(557.000000,331.000000,string);
TextDrawShowForPlayer(playerid, Textdraw1);
return 1;
}
Pero eso es para que cuando cada jugador pase ese Checkpoint le asigne el lugar correspondiente, yo me referia asi como dice "xSDx" asi como un medidor, me explico es decir que si voy primero sin cruzar un CP y alguien me pasa rapidamente se me pasa al 2do Lugar, es como un medidor entre los jugadores y no es necesario llegar al cp para que se te actualize el lugar en el que vas
Voy a ver creo que es como el script de xSDx pero no es asi porque ahi muestra quien va ganando y lo que quiere es que muestre en el textdraw como dicen