Pregunta.
#1

Ayuden me con esto por favor:

Yo uso:
pawn Код:
dcmd_comprar(playerid, params[])
{
    if(IsPlayerInRangeOfPoint(playerid, Range, X, Y, Z);
...
o

pawn Код:
dcmd_comprar(playerid, params[])
{
    if(!PlayerToPoint(playerid, X, Y, Z, Range);
...
Para que cuando el jugador use el comando "/comprar" tenga que estar en una posiciуn.
Pero quiero otra forma para hacer esto, que cuando el jugador entre al lugar que seсalй, diga "Bienvenido a (lugar)"
y cuando salga diga "Has salido de (lugar)".
Reply
#2

Tenйs dos formas de hacerlo.
Una es manualmente, creando un timer, lo suficientemente rбpido, que use IsPlayerInRangeOfPoint o similar a travйs de todos los jugadores, habiendo guardado en una variable el estado en el que estaba cada jugador en el checkeo anterior. Si hubo un cambio en el estado, el jugador entrу o saliу del area. Sin embargo, hacer esto es algo que consume mucha CPU, principalmente con muchos jugadores.
Otra forma es usar el plugin Streamer de Incognito, el cual trae directamente funciones y callbacks para crear бreas. Usa un algoritmo bastante avanzado de grillas, por lo que se ahorra bastante en uso de CPU.
Reply
#3

pawn Код:
new EnZona[MAX_PLAYERS];
public OnPlayerUpdate(playerid)
{
   if(IsPlayerInRangeOfPoint(playerid, Range, X, Y, Z);
   {
       if(EnZona[playerid] == 1) return 1;      
       EnZona[playerid] = 1;
       SendClientMessage(playerid, -1, "Bienvenido a ... .");
   }
   else
   {
       if(EnZona[playerid] == 1)
       {
            SendClientMessage(playerid, -1, "Saliste de ... .");
            EnZona[playerid] = 0;
       }
   }
   return 1;
}
No lo probй, lo hice acб en el foro, calculo que funcionarб. xD
Reply
#4

Quote:
Originally Posted by [J]ulian
Посмотреть сообщение
pawn Код:
new EnZona[MAX_PLAYERS];
public OnPlayerUpdate(playerid)
{
   if(IsPlayerInRangeOfPoint(playerid, Range, X, Y, Z);
   {
       EnZona[playerid] = 1;
       SendClientMessage(playerid, -1, "Bienvenido a ... .");
   }
   else
   {
       if(EnZona[playerid] == 1)
       {
            SendClientMessage(playerid, -1, "Saliste de ... .");
            EnZona[playerid] = 0;
       }
   }
   return 1;
}
No lo probй, lo hice acб en el foro, calculo que funcionarб. xD
Jaja, tremendo spam hace eso xD

pawn Код:
public OnPlayerUpdate(playerid)
{
    if(IsPlayerInRangeOfPoint(playerid, Range, X, Y, Z) && EnZona[playerid] == 0) //Cambia tus coordenadas
    {
        EnZona[playerid] = 1;
        SendClientMessage(playerid, -1, "Bienvenido a ... .");
    }
    else if(!IsPlayerInRangeOfPoint(playerid, Range, X, Y, Z) && EnZona[playerid] == 1)
    {
        SendClientMessage(playerid, -1, "Saliste de ... .");
        EnZona[playerid] = 0;
    }
    return 1;
}
Aca lo editй, pero no te recomiendo usar IsPlayerInRangeOfPoint dentro de OnPlayerUpdate, hace un timer mejor.
Reply
#5

Quote:
Originally Posted by The_Moddler
Посмотреть сообщение
Jaja, tremendo spam hace eso xD

pawn Код:
public OnPlayerUpdate(playerid)
{
    if(IsPlayerInRangeOfPoint(playerid, Range, X, Y, Z) && EnZona[playerid] == 0) //Cambia tus coordenadas
    {
        EnZona[playerid] = 1;
        SendClientMessage(playerid, -1, "Bienvenido a ... .");
    }
    else if(!IsPlayerInRangeOfPoint(playerid, Range, X, Y, Z) && EnZona[playerid] == 1)
    {
        SendClientMessage(playerid, -1, "Saliste de ... .");
        EnZona[playerid] = 0;
    }
    return 1;
}
Aca lo editй, pero no te recomiendo usar IsPlayerInRangeOfPoint dentro de OnPlayerUpdate, hace un timer mejor.
No hace spam, porque luego del else estб el if(EnZona[playerid] == 1), es lo mismo que hiciste vos nada mбs que vos lo pusiste en 1 linea, yo en 3.


Lo que si hace spam es al entrar xD que no me habнa dado cuenta, edito el anterior post.
Reply
#6

їComo seria el timer?

їAsн?

pawn Код:
new EnZona[MAX_PLAYERS];

forward Zona(playerid);
public Zona(playerid)
{
   if(IsPlayerInRangeOfPoint(playerid, 5.0, 361.8299,173.6597,1008.3828) && EnZona[playerid] == 0)
   {
       EnZona[playerid] = 1;
       SendClientMessage(playerid, COLOR_GREEN,"Bienvenido a Zona");
   }
   return 1;
}

public OnPlayerUpdate(playerid)
{
    Zona(playerid);
    return 1;
}
Reply
#7

Me parece que asн la memoria te la fumбs como si fuese un porro xD..

їProbaste como te puse yo en mi primer post?
Reply
#8

Si, pero al entrar a la zona, hace demasiado spam. xd
Probй usando:

pawn Код:
SetTimer("Zona", 1000, true);
Pero me manda el mensaje de "Bienvenido ..." y "Has salido de ..." cada 1 segundo.
Reply
#9

Cambia el "true" por "false". Ese parametro define si el timer se repite o no, al poner true pusiste que se repita cada 1 segundo xD
Reply
#10

Quote:
Originally Posted by Rodro
Посмотреть сообщение
Cambia el "true" por "false". Ese parametro define si el timer se repite o no, al poner true pusiste que se repita cada 1 segundo xD
Ajб, pero asi checkearia una sola vez, y no constantemente.

Igualmente ese codigo te tendrнa que andar, no hay nada mal.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)