Lugares en una Carrera
#1

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
Reply
#2

coloca en OnPlayerEnterCheckpoint en el Checkpoint correspondiente ke le sume una variable y listo.
Reply
#3

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.
Reply
#4

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.
Reply
#5

es demasiado facil hacer eso, como ejemplo le di la funcion para que el lo termine.

Saludos.
Reply
#6

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 .
Reply
#7

Borren comentario porfavor
Reply
#8

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
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)