[Ayuda] foreach ... -
OTACON - 04.10.2012
Buenas a Todos, Como hago este bucle con foreach por ke me tira error cuando lo hago de la siguiente manera :S.
ASI TENGO:
pawn Код:
for(new i = 0; i < 67; i++)
ASI COLOKE:
ERROR:
pawn Код:
: error 020: invalid symbol name ""
: error 029: invalid expression, assumed zero
: warning 215: expression has no effect
: error 001: expected token: ";", but found "]"
: fatal error 107: too many error messages on one line
Desde ya muchas Gracias .
Respuesta: [Ayuda] foreach ... -
CaptainMactavish - 04.10.2012
Primero que nada, foreach, no es una alternativa al for, foreach sirve especialmente para loopear jugadores, te explico mira:
pawn Код:
for(new i;i<MAX_PLAYERS;i++) if(IsPlayerConnected(i))
{
//codigo
}
Eso lo que harнa serнa contar desde el 0 al 499, o sea desde el id 0 al id 499, y "i" serнa la id. Si la id estб conectada se ejecuta la pieza de cуdigo. Por lo tanto, este bucle lo que hace es pasar por todas las ids y chequear si estбn conectadas.
El include foreach a diferencia de este solamente pasa por las ids conectadas, es decir, un iterador.
Lo que hace es hacer una especie de lista o mapa de los jugadores conectados y luego al hacer el bucle solamente pasarнa con ellos.
Tambien podes crear tus propias listas, se puede hacer con vehiculos, hookeando las funciones. Tiene bastante utilidad.
Respuesta: [Ayuda] foreach ... -
OTACON - 04.10.2012
Quote:
Originally Posted by CaptainMactavish
Primero que nada, foreach, no es una alternativa al for, foreach sirve especialmente para loopear jugadores, te explico mira:
pawn Код:
for(new i;i<MAX_PLAYERS;i++) if(IsPlayerConnected(i)) { //codigo }
Eso lo que harнa serнa contar desde el 0 al 499, o sea desde el id 0 al id 499, y "i" serнa la id. Si la id estб conectada se ejecuta la pieza de cуdigo. Por lo tanto, este bucle lo que hace es pasar por todas las ids y chequear si estбn conectadas.
El include foreach a diferencia de este solamente pasa por las ids conectadas, es decir, un iterador.
Lo que hace es hacer una especie de lista o mapa de los jugadores conectados y luego al hacer el bucle solamente pasarнa con ellos.
Tambien podes crear tus propias listas, se puede hacer con vehiculos, hookeando las funciones. Tiene bastante utilidad.
|
ah ok hay entendi
muchas Gracias .
Respuesta: [Ayuda] foreach ... -
Fluid016 - 04.10.2012
Pero de igual forma puedes utilizar esto
pawn Код:
#define FOREACH(%0,%1) for(new %0=0;%0<%1;%0++)
//Es lo mismo nada mбs que definido para usar
new I;
FOREACH(I, 67)
{
//codigo
}
Respuesta: [Ayuda] foreach ... -
xSDx - 04.10.2012
Quote:
Originally Posted by GROVE22
Pero de igual forma puedes utilizar esto
pawn Код:
#define FOREACH(%0,%1) for(new %0=0;%0<%1;%0++)
//Es lo mismo nada mбs que definido para usar new I; FOREACH(I, 67) { //codigo }
|
ese codigo te daria un warning por la sencilla razon de que estas haciendo dos veces un new, uno en el macro y el otro antes del FOREACH lo normal seria asi
pawn Код:
#define ForEach(%0,%1) for(new %0=0;%0<%1;%0++)
ForEach(a,100) //variable y limite del arreglo
{
SetPlayerHealth(a,100);
}
aqui te dejo un macro para los players
pawn Код:
#define ForEach(%0,%1) for(new %0 = 0; %0 != %1; %0++) if(IsPlayerConnected(%0) && !IsPlayerNPC(%0))
Re: Respuesta: [Ayuda] foreach ... -
CaptainMactavish - 04.10.2012
Quote:
Originally Posted by GROVE22
Pero de igual forma puedes utilizar esto
pawn Код:
#define FOREACH(%0,%1) for(new %0=0;%0<%1;%0++)
//Es lo mismo nada mбs que definido para usar new I; FOREACH(I, 67) { //codigo }
|
No es lo mismo, por algo estб el include, їno te parece?
Hay mucha diferencia en cuanto al rendimiento de ambos.
Respuesta: Re: Respuesta: [Ayuda] foreach ... -
xSDx - 04.10.2012
Quote:
Originally Posted by CaptainMactavish
No es lo mismo, por algo estб el include, їno te parece?
Hay mucha diferencia en cuanto al rendimiento de ambos.
|
es verdad... podria ser tomado como alternativa al include
Re: [Ayuda] foreach ... -
digman - 04.10.2012
Funcionara igual solo q foreach.inc tiene mejor optimizacion y mejor manejo
Respuesta: [Ayuda] foreach ... -
TheChaoz - 04.10.2012
foreach no funciona solo para jugadores. Es un bucle mediante iteradores, por eso es mucho mas eficiente que cualquier bucle a travez de los jugadores, pero pueden agregarse iteradores personalizados y utilizarlos.
Esto puede realizarse mediante la funcion:
Donde name, representa el nombre del Iterador al cual se le asignara el elemento llamado value.
Ejemplo:
pawn Код:
//Declaracion de nuestro nuevo iterador:
new Iterator:Vehicles<MAX_VEHICLES>;
//hookeamos un par de funciones para el correcto uso del mismo
stock _AddStaticVehicle(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:angle, color1, color2)
{
new veh = AddStaticVehicle(modelid, spawn_x, spawn_y, spawn_z, angle, color1, color2)
if(veh != INVALID_VEHICLE_ID)
Iter_Add(Vehicles, veh);
return veh;
}
#define AddStaticVehicle _AddStaticVehicle
stock _AddStaticVehicleEx(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:angle, color1, color2, respawn_delay)
{
new veh = AddStaticVehicle(modelid, spawn_x, spawn_y, spawn_z, angle, color1, color2, respawn_delay)
if(veh != INVALID_VEHICLE_ID)
Iter_Add(Vehicles, veh);
return veh;
}
#define AddStaticVehicleEx _AddStaticVehicleEx
stock _CreateVehicle(modelid, Float:x, Float:y, Float:z, Float:angle, color1, color2, respawn_delay)
{
new veh = CreateVehicle(modelid, x, y, z, angle, color1, color2, respawn_delay);
if(veh != INVALID_VEHICLE_ID)
Iter_Add(Vehicles, veh);
return veh;
}
#define CreateVehicle _CreateVehicle
stock _DestroyVehicle(vehicleid)
{
if(DestroyVehicle(vehicleid))
{
Iter_Remove(Vehicles, vehicleid);
return 1;
}
return 0;
}
#define DestroyVehicle _DestroyVehicle
//1є posible uso:
new Float:heath;
foreach(new i : Vehicles)
{
GetVehicleHealth(i, health);
printf("La vida del vehiculo %i es: %.3f", i, health);
}
//2є posible uso:
printf("Hay %i vehiculos creados", Iter_Count(Vehicles));
Para mas informacion sobre
foreach lean el topico de su lanzamiento, que comprenderan mucho mejor su gran capacidad.
Nota: Para que el script ejemplo que deje, funcione correctamente, deberian agregarse las funciones en cada script y se deberia definir el iterador de forma tal que el mismo sea comun a todos los scripts (Deberia editarse el include para utilizar CallRemoteFunction y acceder a una funcion declarada en el GM para acceder al iterador correspondiente, algo no muy sensillo).
Respuesta: Re: Respuesta: [Ayuda] foreach ... -
Fluid016 - 05.10.2012
Quote:
Originally Posted by CaptainMactavish
No es lo mismo, por algo estб el include, їno te parece?
Hay mucha diferencia en cuanto al rendimiento de ambos.
|
la rre flashaste mal -.-
es lo mismo usar el macro y el for(new i;i<MAX_PLAYERS;i++)
a eso me referнa no que es lo mismo que usar el include -.-