SA-MP Forums Archive
їEs lo mismo hacer esto? - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: їEs lo mismo hacer esto? (/showthread.php?tid=531107)



їEs lo mismo hacer esto? - xTexTx - 10.08.2014

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.


Respuesta: їEs lo mismo hacer esto? - adri1 - 10.08.2014

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.


Respuesta: їEs lo mismo hacer esto? - Alienwar3 - 10.08.2014

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


Respuesta: їEs lo mismo hacer esto? - xTexTx - 10.08.2014

ї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);
    }
    }
}



Re: їEs lo mismo hacer esto? - Unrea1 - 10.08.2014

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);
}
}
}


Re: їEs lo mismo hacer esto? - Onfroi - 10.08.2014

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.


Respuesta: їEs lo mismo hacer esto? - adri1 - 10.08.2014

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



Respuesta: їEs lo mismo hacer esto? - Glimma - 10.08.2014

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.


Respuesta: їEs lo mismo hacer esto? - DesingMyCry - 11.08.2014

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.