їEs lo mismo hacer esto?
#1

Hola, estuve haciendo unas cosillas y hice estos dos stock, querнa que me dijeran si es lo mismo:
pawn Код:
stock EnviarMensajeAdmins(playerid, color, string)
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(DatosPJ[playerid][pAdmin] < 1)
    {
        SendClientMessage(i, color, string);
    }
    }
    }
}
pawn Код:
stock EnviarMensajesAdmins(playerid, color, string)
{
    foreach(Admin, i)
    {
    if(IsPlayerConnected(Admin))
    {
    if(DatosPJ[playerid][pAdmin] < 1)
    {
        SendClientMessage(Admin, color, string);
    }
    }
    }
}
Desde ya muchas gracias.
Reply
#2

Con foreach no necesitas usar IsPlayerConnected, pero ъsalo asн:
foreach(new i : Player)

La diferencia estб en que la otra se repetirб 500 veces y con foreach solo serб mбs optimizado, dependiendo de la cantidad de jugadores.

Pero si te refieres a si vas a notar un cambia, la verdad es que quizбs no.
Reply
#3

es lo mismo nada mas que no usas un loop. ademas el foreach detecta por si mismo si el usuario esta conectado.
Reply
#4

їEntonces foreach ya al momento que se repite, solo lo envнa a los conectados?

EDIT: їEntonces serнa asн?:
pawn Код:
stock MensajeSoloAdmins(playerid, color, string)
{
    foreach(Admin, i)
    {
    if(DatosPJ[playerid][pAdmin] < 1)
    {
        SendClientMessage(Admin, color, string);
    }
    }
}
Reply
#5

Foreach esta mбs optimizado en sus funciones que las nativas del SA-MP.

stock EnviarMensajesAdmins(playerid, color, string)
{
foreach(Admin, i)
{
if(DatosPJ[playerid][pAdmin] < 1)
{
SendClientMessage(Admin, color, string);
}
}
}
Reply
#6

emm los dos estan mal..
pawn Код:
stock EnviarMensajesAdmins(playerid, color, string)
{
    foreach(Player, i) // foreach ya chequea por jugadores conectados
    {
    if(DatosPJ[i][pAdmin] >= 1) // el 'i' representa TODOS los jugadores que son admin
    {
        SendClientMessage(i, color, string);
    }
    }
}
Foreach, trata de leer eso con un traductor, porque no creo que haya un tutorial en espaсol de foreach.
Reply
#7

pawn Код:
stock MensajePremium(playerid, color, string)
{
    foreach(new i : Player)
    {
    if(DatosPJ[i][pAdmin] < 1)
    {
        SendClientMessage(i, color, string);
    }
    }
}
Reply
#8

Usa el de adri1, y como ya te dijo йl, no vas a notar la diferencia, a no ser que hagas una prueba de ejecuciуn, y verбs que la diferencia serбn milisegundos que no notarбs dentro del servidor. Igualmente, estб muy bien usar foreach reemplazando a todos los bucles normales de jugadores.
Reply
#9

Quote:
Originally Posted by adri1
Посмотреть сообщение
Con foreach no necesitas usar IsPlayerConnected, pero ъsalo asн:
foreach(new i : Player)

La diferencia estб en que la otra se repetirб 500 veces y con foreach solo serб mбs optimizado, dependiendo de la cantidad de jugadores.

Pero si te refieres a si vas a notar un cambia, la verdad es que quizбs no.
"foreach" esta hecho para crear, lo que se podrнa denominar "grupos" de "items", donde el bucle solo pasarб por estos... por lo que en ves de usar "Player" deberнa crear uno propio llamado "Admins"...

Quote:
Originally Posted by Alienwar3
Посмотреть сообщение
es lo mismo nada mas que no usas un loop. ademas el foreach detecta por si mismo si el usuario esta conectado.
"foreach" es un bucle, al igual que "for". De hecho, se hace en base a el mismo.
No detecta si esta conectado, sinу que el "grupo" de "items" llamado "Players", se modifica cada vez que un jugador entra y sale del servidor.


Quote:
Originally Posted by xTexTx
Посмотреть сообщение
їEntonces foreach ya al momento que se repite, solo lo envнa a los conectados?

EDIT: їEntonces serнa asн?:
pawn Код:
stock MensajeSoloAdmins(playerid, color, string)
{
    foreach(Admin, i)
    {
    if(DatosPJ[playerid][pAdmin] < 1)
    {
        SendClientMessage(Admin, color, string);
    }
    }
}
Ahн estas utilizando el "grupo" de "items" llamado "Admin". Supongo que ese es el que guarda a solo los administradores, por lo que no deberбs colocar el "if(DatosPJ[playerid][pAdmin] < 1)" ya que el bucle solo correrб para aquellos jugadores que son administradores.

Quote:
Originally Posted by LatinZ
Посмотреть сообщение
Foreach esta mбs optimizado en sus funciones que las nativas del SA-MP.

stock EnviarMensajesAdmins(playerid, color, string)
{
foreach(Admin, i)
{
if(DatosPJ[playerid][pAdmin] < 1)
{
SendClientMessage(Admin, color, string);
}
}
}
No. Pawn para SA-MP no tiene funciones para hacer iteraciones con bucles. Por eso mismo, se crearon varios includes que lo simulan.

Quote:
Originally Posted by Onfroi
Посмотреть сообщение
emm los dos estan mal..
pawn Код:
stock EnviarMensajesAdmins(playerid, color, string)
{
    foreach(Player, i) // foreach ya chequea por jugadores conectados
    {
    if(DatosPJ[i][pAdmin] >= 1) // el 'i' representa TODOS los jugadores que son admin
    {
        SendClientMessage(i, color, string);
    }
    }
}
Foreach, trata de leer eso con un traductor, porque no creo que haya un tutorial en espaсol de foreach.
Si bien no hay tutorial en espaсol de "foreach", yo creй un include que funciona de la misma manera que "foreach", y creo que era mas rбpido (por poco, obviamente), tienen practicament el mismo uso, solo cambian los nombres de funciones, por lo que podria servir.

Quote:
Originally Posted by adri1
Посмотреть сообщение
pawn Код:
stock MensajePremium(playerid, color, string)
{
    foreach(new i : Player)
    {
    if(DatosPJ[i][pAdmin] < 1)
    {
        SendClientMessage(i, color, string);
    }
    }
}
Estarнas ejecutando un bucle por todos los jugadores. Para que? si "foreach" esta hecho para hacer solo "consultas" exactas?

Deberia crear un nuevo iterator llamado "Admins" (creo que ya lo tiene) y agregarle un nuevo "item" cuando un administrador es ascendido y cuando uno de los mismos se conecta al servidor. Haciendo lo contrario cuando se desconectan.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)