#1

Hola chicos mi duda es la siguiente,

Como hago para detectar una posiciуn exacta del St al entrar a un checkpoint

en mi caso lo tengo asi

pawn Код:
public OnPlayerEnterRaceCheckpoint(playerid)
{
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    PlayerPlaySound(playerid, 1139, x, y, z);
    switch(Stats[playerid])
    {

         case 1:
         {
              new tmp[256];
              static place;
              place++;
              DisablePlayerRaceCheckpoint(playerid);
              PlayerPlaySound(playerid, 1056, 0.0, 0.0, 10.0);
              SetPlayerRaceCheckpoint(playerid, 0,3016.3357,-1632.8782,67.4452,3067.0481,-1652.2799,80.6263,10);
              Stats[playerid] = 2;
              format (tmp, sizeof (tmp) , "   %d" , place) ;
              TextDrawSetString(Textdraw1,tmp);
              return 1;
         }
pero tal cosa se bugea ya que cuando un jugador entra al checkpoint le da la posiciуn 1 pero si otro jugador que no a pasado ese checkpoint y entra en uno anterior al del jugador 1 le da la posiciуn 1 y se bugea no detecta bien la posiciуn 1 por lo cual genera que todo este mal.
Reply
#2

Dices una posiciуn bien exacta? Asн como cuando usas 'SetPlayerPos'?.
Reply
#3

Si de la posiciуn 1, ya que cuando entran jugadores a anteriores checkpoints de la posiciуn 1 les da la a ellos la posiciуn 1 ._.
Reply
#4

Utiliza una variable .-.
Reply
#5

lol?.

Intente usar esto

pawn Код:
new ClosestID = INVALID_PLAYER_ID;
new Float:ClosestDis = 0;
for(new i; i < GetMaxPlayers(); i++)
{
if(ClosestID == INVALID_PLAYER_ID || GetPlayerDistanceToPoint(i, X, Y, Z) < ClosestDis)
{
ClosestID = i;
ClosestDis = GetPlayerDistanceToPoint(i, X, Y, Z);
}
}
pawn Код:
stock GetPlayerDistanceToPoint(playerid, Float:X, Float:Y, Float:Z)
{
  new Float:XP,Float:YP,Float:ZP;
  GetPlayerPos(playerid,XP,YP,ZP);
  return (XP - X) + (YP - Y) + (ZP - Z);
}
pero no sigue igual D: xDDD
Reply
#6

Quote:
Originally Posted by adrianxd
Посмотреть сообщение
lol?.
We xD.

Te doy un ejemplo:


pawn Код:
new EntroARace[MAX_PLAYERS];

public OnPlayerConnect(playerid)
{
EntroARace[playerid] = 0;
return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
for(new i; i < GetMaxPlayers(); i++)
{
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    PlayerPlaySound(playerid, 1139, x, y, z);
    switch(Stats[playerid])
    {

         case 1:
         {
              EntroARace[playerid] = 1;
              new tmp[256];
              static place;
              place++;
              DisablePlayerRaceCheckpoint(playerid);
              PlayerPlaySound(playerid, 1056, 0.0, 0.0, 10.0);
              SetPlayerRaceCheckpoint(playerid, 0,3016.3357,-1632.8782,67.4452,3067.0481,-1652.2799,80.6263,10);
              Stats[playerid] = 2;
              format (tmp, sizeof (tmp) , "   %d" , place) ;
              TextDrawSetString(Textdraw1,tmp);
              return 1;
         }
         case 2:
         {
              EntroARace[playerid] = 2;
              //Cуdigos...
          }
Y asн sucesivamente.

Eso es lo que querias? .-.
Reply
#7

Si te das cuenta

pawn Код:
Stats[playerid] = 2;
hace lo que tu estas mandando xD
Reply
#8

Quote:
Originally Posted by adrianxd
Посмотреть сообщение
Si te das cuenta

pawn Код:
Stats[playerid] = 2;
hace lo que tu estas mandando xD
No creo que sea un problema.

Te preguntй que era exactamente lo que necesitabas.
Reply
#9

No se muy bien de lo que hablan pero si es para carrera debes trabajar con velocidad no con exactitud ya que quien llegue de primero lo determina el lag
Reply
#10

"place" debe ser un array para todos los jugadores.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)