Raised This Month: $51 Target: $400
 12% 

[ES]Ayuda con for (No lo entiendo)


  
 
 
Thread Tools Display Modes
Author Message
!Morte
Veteran Member
Join Date: May 2010
Old 06-24-2010 , 20:16   [ES]Ayuda con for (No lo entiendo)
#1

Alguien me puede explicar el funcionamiento del for?? no lo entiendo un pito.

Pd. No me den un link que me lleve al theard de Alucard^ sobre pawn, porque igual no lo entiendo.

Gracias.
__________________
First Zombie Class
[ZP] Zombie Class: Houndeye Zombie
Quote:
Originally Posted by lucas_7_94 View Post
tenes que saber pawn antes de intentar hacer algo digno.
!Morte is offline
Send a message via MSN to !Morte Send a message via Skype™ to !Morte
rubee
Senior Member
Join Date: Oct 2009
Location: party rocking
Old 06-24-2010 , 20:33   Re: [ES]Ayuda con for (No lo entiendo)
#2

es una estructura repititiva
for(inicializacion; condicion; formula)
__________________


rubee is offline
AntiBots
Veteran Member
Join Date: May 2008
Location: Brazil
Old 06-24-2010 , 20:40   Re: [ES]Ayuda con for (No lo entiendo)
#3

Wikipedia Sabeeeeeee!!! http://es.wikipedia.org/wiki/Bucle_for
__________________
AntiBots is offline
Send a message via ICQ to AntiBots Send a message via MSN to AntiBots Send a message via Skype™ to AntiBots
Alucard^
AMXX Moderator: Others
Join Date: Sep 2007
Location: Street
Old 06-24-2010 , 20:58   Re: [ES]Ayuda con for (No lo entiendo)
#4

Fijate si te sirve esto... todavia no lo termine (mas que nada me falta la parte del while).... y fijarme si hay algun error... pero como no se cuando lo voy a terminar, te posteo esto que hice hasta ahora. Lo hice en el momento que estaba sin internet :E

Te recomiendo que no copies y pegues en algun editor de texto como Notepad++ y asi lo puedas leer completo sin tener que correr las barras horizontales.

PHP Code:
/*

*     Este tutorial muestra como hacer uso de los loops (for y while en este caso).
*     Se que ya hay varias especificaciones sobre estos, pero de todas formas quiero
*     hacer un tutorial propio y quizas a mas de uno le pueda servir mi explicacion.

*     Cuando se empieza en el scripting, es normal que entender los loops sea un poco
*     complicado o molesto, pero de a poco... sin que uno se de cuenta lo va entendiendo.

*     Un loop es una accion repetitiva a la cual nosotros le damos ciertos parametros.
*     Por ejemplo, la cantidad de repeticiones que va a hacer dicho loop.

*     Un ejemplo sencillo de loop FOR es el siguiente:

*/

    
for(new 03i++)
    {
        
client_print(0print_chat"Soy el mensaje numero %d"i);
    }

/*

*     Para poder analizar este codigo, deben saber primero como es la estructura del
*     loop FOR. La cual esta dividida en 3 segmentos y son los siguientes:

*/

    
for("variable a usar""condicion""incremento de la variable")
    {
        
// codigo a ejecutar
    
}

/*

*     Esta estructura anteriormente mostrada es la estructura del codigo anterior. No
*     siempre es de la misma forma, dicha estructura. Es decir, que puede variar...
*     Por ejemplo, en el tercer segmento, en vez de ser una incrementacion, puede ser
*     una decrecion de la variable (pero el ejemplo mostrado al principio es mayormente
*     el mas usado).

*     Vuelvo a mostrar el codigo para que no quede arriba y se pueda explicar facilmente:

*/

    
for(new 03i++)
    {
        
client_print(0print_chat"Soy el mensaje numero %d"i);
    }

/*

*     La accion de este codigo mostrado, esta dividida en varios pasos, y son los siguientes:

*     1) Se crea una variable llamada "i" y se le asigna el valor 0
*     2) La condicion es: "si i es menor a 3"
*     3) Si la condicion se cumple, se ejecuta el codigo dentro del loop
*     5) Luego se incrementa la variable en +1
*     6) Y asi se repite sucesivamente, exceptuando el primer segmento
*     7) Hasta que no se cumpla la condicion (segundo segmento)
*     8) Que es cuando la variable "i" sea igual a 3. Ya que en ese caso "i" no va a ser menor a 3.

*     Por lo que con todo esto, podemos resumir en que el codigo dentro del for, se ejecuta
*     unas 3 veces seguidas. Y con esto ultimo, tambien podemos decir que el codigo anterior se
*     podria hacer de la siguiente manera:

*/

    
client_print(0print_chat"Soy el mensaje numero 0");
    
client_print(0print_chat"Soy el mensaje numero 1");
    
client_print(0print_chat"Soy el mensaje numero 2");

/*

*     Es lo mismo, solo que con el loop FOR se ocupa menos espacio y se repite automaticamente, quizas
*     no se note mucho con un numero bajo como es el 3, pero si hablamos de un numero mayor, es mucho
*     mas notable la diferencia.

*     Ahora, si a la condicion del FOR, le agregamos un nuevo operador como por ejemplo:

*/

    
for(new 0<= 3i++)
    {    
        
client_print(0print_chat"Soy el mensaje numero %d"i);
    }

/*
*
*     Antes la condicion era "Si i es menor a 3". Pero ahora la condicion es "Si i es menor o igual a 3".
*     Y ya con ese simple operador agregado a la condicion, el codigo dentro del loop se ejecutaria 4
*     veces, en vez de 3. Tambien podemos obtener el mismo resultado si hacemos "i < 4".

*     Muchas veces el loop FOR se usa para obtener el id de todos los players, para poder ejecutarles
*     alguna funcion o algo, a todos de una. Por ejemplo, para pasarlos a spec o darles armas, etc...
*     
*     Y aca va un ejemplo de plugin para pasar a todos a spec:

*/

    #include <amxmodx>
    #include <amxmisc>
    #include <cstrike>

    #define PLUGIN    "All Spec"
    #define AUTHOR    "Alucard"
    #define VERSION    "0.0.1"

    
new gMaxPlayers;

    public 
plugin_init()
    {
        
register_plugin(PLUGINVERSIONAUTHOR);
        
register_clcmd("say /allspec""HookCmdAllSpec");
        
        
gMaxPlayers get_maxplayers();
    }

    public 
HookCmdAllSpec(id)
    {
        if(!
is_user_admin(id) )
        {
            
client_print(idprint_chat"Debes ser ADMIN para poder ejecutar esta accion!");
            return 
PLUGIN_HANDLED;
        }
        
        for(new 
1<= gMaxPlayersi++)
        {
            if(
cs_get_user_team(i) != CS_TEAM_SPEC)
            {
                if(
is_user_alive(i) )
                    
user_kill(i1);
                
                
cs_set_user_team(iCS_TEAM_SPECTATOR);
            }
        }
        
        return 
PLUGIN_HANDLED;
    }
    
/*

*     El maximo de jugadores permitidos por el juego, es de 32 (se obtiene mediante get_maxplayers)
*     por lo que usando el loop previamente mostrado, el codigo que se encuentra dentro de dicho
*     loop se ejecuta 32 veces.

*     Es practicamente lo mismo a hacer lo siguiente:

*/

    
if(cs_get_user_team(1) != CS_TEAM_SPEC)
    {
        if(
is_user_alive(1) )
            
user_kill(11);
        
        
cs_Set_user_team(1CS_TEAM_SPECTATOR);
    }

/*

*     Y luego el mismo codigo unas 31 veces mas, cambiando el numero 1 por el 2 y asi sucesivamente
*     hasta llegar al numero 32. Haciendo esto se lograria un codigo enorme y totalmente absurdo,
*     cuando se puede hacer uso de los loops. Esa es la funcion y utilidad de los loops.

*     El loop FOR tambien es usado usualmente para obtener ciertos datos dentro de las arrays que
*     contienen las variables. Aca un simple ejemplo:

*/

    #include <amxmodx>

    #define PLUGIN    "Vertical Name"
    #define AUTHOR    "Alucard"
    #define VERSION    "0.0.1"

    
public plugin_init()
    {
        
register_plugin(PLUGINVERSIONAUTHOR);
        
register_clcmd("say /vname""HookCmdName");
    }

    public 
HookCmdName(id)
    {
        new 
szName[32];
        
get_user_name(idszName31);
        
        for(new 
0strlen(szName); i++)
        {
            
client_print(idprint_chat"%c"szName[i]);
        }
        
        return 
PLUGIN_HANDLED;
    }
    
/*

*     La funcion del plugin (que es mostrar tu nick verticalmente en el chat) probablemente no
*     funcione del todo bien, pero ese no es el punto. El punto es mostrar el uso del loop FOR,
*     que como ven, lo que hace es pasar por cada celda del array, de esta forma: szName[0],
*     szName[1], szName[2] y asi sucesivamente. Y como nosotros usamos strlen(szName), cuando
*     se complete el nombre, la condicion (segmento 2) del loop FOR no se cumplira, por lo tanto
*     se cerraria. Si nosotros hubieramos usado sizeof(szName) entonces el loop seguiria por
*     todas las celdas hasta llegar a szName[32] y esto haria que aparezcan varios espacios en
*     el chat (claro esta, a menos de que el nombre del player sea de 32 caracteres).


*     Como habia dicho antes, hay ciertas cosas del loop FOR que pueden variar, solo que los 
*     ejemplos mostrados anteriormente son generalmente los mas usados. Pero, yo creo que
*     cuantos mas ejemplos a mostrar, mejor posibilidad de entender el tema, por lo que aca
*     dejo un ejemplo, cambiando ciertos parametros:

*/

    #include <amxmodx>

    #define PLUGIN    "Conteo Inverso"
    #define AUTHOR    "Alucard"
    #define VERSION    "0.0.1"

    
public plugin_init()
    {
        
register_plugin(PLUGINVERSIONAUTHOR);
        
register_clcmd("say /conteo""HookCmdName");
    }

    public 
HookCmdName(id)
    {
        new 
iNums[5] = { 1234};
        
        for(new 
51i--)
        {
            
client_print(idprint_chat"%d"iNums[i-1]);
        }
        
        return 
PLUGIN_HANDLED;
    } 
__________________
Approved Plugins - Steam Profile

Public non-terminated projects:
All Admins Menu, HLTV parameters, Subnick,
Second Password (cool style), InfoZone,
Binary C4 plant/defuse, and more...

Private projects:
NoSpec (+menu), NV Surf Management,
PM Adanved System, KZ longjump2, and more...
Alucard^ is offline
Send a message via Skype™ to Alucard^
!Morte
Veteran Member
Join Date: May 2010
Old 06-24-2010 , 22:20   Re: [ES]Ayuda con for (No lo entiendo)
#5

Quote:
Originally Posted by Alucard^ View Post
Fijate si te sirve esto... todavia no lo termine (mas que nada me falta la parte del while).... y fijarme si hay algun error... pero como no se cuando lo voy a terminar, te posteo esto que hice hasta ahora. Lo hice en el momento que estaba sin internet :E

Te recomiendo que no copies y pegues en algun editor de texto como Notepad++ y asi lo puedas leer completo sin tener que correr las barras horizontales.

PHP Code:
/*

*     Este tutorial muestra como hacer uso de los loops (for y while en este caso).
*     Se que ya hay varias especificaciones sobre estos, pero de todas formas quiero
*     hacer un tutorial propio y quizas a mas de uno le pueda servir mi explicacion.

*     Cuando se empieza en el scripting, es normal que entender los loops sea un poco
*     complicado o molesto, pero de a poco... sin que uno se de cuenta lo va entendiendo.

*     Un loop es una accion repetitiva a la cual nosotros le damos ciertos parametros.
*     Por ejemplo, la cantidad de repeticiones que va a hacer dicho loop.

*     Un ejemplo sencillo de loop FOR es el siguiente:

*/

    
for(new 03i++)
    {
        
client_print(0print_chat"Soy el mensaje numero %d"i);
    }

/*

*     Para poder analizar este codigo, deben saber primero como es la estructura del
*     loop FOR. La cual esta dividida en 3 segmentos y son los siguientes:

*/

    
for("variable a usar""condicion""incremento de la variable")
    {
        
// codigo a ejecutar
    
}

/*

*     Esta estructura anteriormente mostrada es la estructura del codigo anterior. No
*     siempre es de la misma forma, dicha estructura. Es decir, que puede variar...
*     Por ejemplo, en el tercer segmento, en vez de ser una incrementacion, puede ser
*     una decrecion de la variable (pero el ejemplo mostrado al principio es mayormente
*     el mas usado).

*     Vuelvo a mostrar el codigo para que no quede arriba y se pueda explicar facilmente:

*/

    
for(new 03i++)
    {
        
client_print(0print_chat"Soy el mensaje numero %d"i);
    }

/*

*     La accion de este codigo mostrado, esta dividida en varios pasos, y son los siguientes:

*     1) Se crea una variable llamada "i" y se le asigna el valor 0
*     2) La condicion es: "si i es menor a 3"
*     3) Si la condicion se cumple, se ejecuta el codigo dentro del loop
*     5) Luego se incrementa la variable en +1
*     6) Y asi se repite sucesivamente, exceptuando el primer segmento
*     7) Hasta que no se cumpla la condicion (segundo segmento)
*     8) Que es cuando la variable "i" sea igual a 3. Ya que en ese caso "i" no va a ser menor a 3.

*     Por lo que con todo esto, podemos resumir en que el codigo dentro del for, se ejecuta
*     unas 3 veces seguidas. Y con esto ultimo, tambien podemos decir que el codigo anterior se
*     podria hacer de la siguiente manera:

*/

    
client_print(0print_chat"Soy el mensaje numero 0");
    
client_print(0print_chat"Soy el mensaje numero 1");
    
client_print(0print_chat"Soy el mensaje numero 2");

/*

*     Es lo mismo, solo que con el loop FOR se ocupa menos espacio y se repite automaticamente, quizas
*     no se note mucho con un numero bajo como es el 3, pero si hablamos de un numero mayor, es mucho
*     mas notable la diferencia.

*     Ahora, si a la condicion del FOR, le agregamos un nuevo operador como por ejemplo:

*/

    
for(new 0<= 3i++)
    {    
        
client_print(0print_chat"Soy el mensaje numero %d"i);
    }

/*
*
*     Antes la condicion era "Si i es menor a 3". Pero ahora la condicion es "Si i es menor o igual a 3".
*     Y ya con ese simple operador agregado a la condicion, el codigo dentro del loop se ejecutaria 4
*     veces, en vez de 3. Tambien podemos obtener el mismo resultado si hacemos "i < 4".

*     Muchas veces el loop FOR se usa para obtener el id de todos los players, para poder ejecutarles
*     alguna funcion o algo, a todos de una. Por ejemplo, para pasarlos a spec o darles armas, etc...
*     
*     Y aca va un ejemplo de plugin para pasar a todos a spec:

*/

    #include <amxmodx>
    #include <amxmisc>
    #include <cstrike>

    #define PLUGIN    "All Spec"
    #define AUTHOR    "Alucard"
    #define VERSION    "0.0.1"

    
new gMaxPlayers;

    public 
plugin_init()
    {
        
register_plugin(PLUGINVERSIONAUTHOR);
        
register_clcmd("say /allspec""HookCmdAllSpec");
        
        
gMaxPlayers get_maxplayers();
    }

    public 
HookCmdAllSpec(id)
    {
        if(!
is_user_admin(id) )
        {
            
client_print(idprint_chat"Debes ser ADMIN para poder ejecutar esta accion!");
            return 
PLUGIN_HANDLED;
        }
        
        for(new 
1<= gMaxPlayersi++)
        {
            if(
cs_get_user_team(i) != CS_TEAM_SPEC)
            {
                if(
is_user_alive(i) )
                    
user_kill(i1);
                
                
cs_set_user_team(iCS_TEAM_SPECTATOR);
            }
        }
        
        return 
PLUGIN_HANDLED;
    }
    
/*

*     El maximo de jugadores permitidos por el juego, es de 32 (se obtiene mediante get_maxplayers)
*     por lo que usando el loop previamente mostrado, el codigo que se encuentra dentro de dicho
*     loop se ejecuta 32 veces.

*     Es practicamente lo mismo a hacer lo siguiente:

*/

    
if(cs_get_user_team(1) != CS_TEAM_SPEC)
    {
        if(
is_user_alive(1) )
            
user_kill(11);
        
        
cs_Set_user_team(1CS_TEAM_SPECTATOR);
    }

/*

*     Y luego el mismo codigo unas 31 veces mas, cambiando el numero 1 por el 2 y asi sucesivamente
*     hasta llegar al numero 32. Haciendo esto se lograria un codigo enorme y totalmente absurdo,
*     cuando se puede hacer uso de los loops. Esa es la funcion y utilidad de los loops.

*     El loop FOR tambien es usado usualmente para obtener ciertos datos dentro de las arrays que
*     contienen las variables. Aca un simple ejemplo:

*/

    #include <amxmodx>

    #define PLUGIN    "Vertical Name"
    #define AUTHOR    "Alucard"
    #define VERSION    "0.0.1"

    
public plugin_init()
    {
        
register_plugin(PLUGINVERSIONAUTHOR);
        
register_clcmd("say /vname""HookCmdName");
    }

    public 
HookCmdName(id)
    {
        new 
szName[32];
        
get_user_name(idszName31);
        
        for(new 
0strlen(szName); i++)
        {
            
client_print(idprint_chat"%c"szName[i]);
        }
        
        return 
PLUGIN_HANDLED;
    }
    
/*

*     La funcion del plugin (que es mostrar tu nick verticalmente en el chat) probablemente no
*     funcione del todo bien, pero ese no es el punto. El punto es mostrar el uso del loop FOR,
*     que como ven, lo que hace es pasar por cada celda del array, de esta forma: szName[0],
*     szName[1], szName[2] y asi sucesivamente. Y como nosotros usamos strlen(szName), cuando
*     se complete el nombre, la condicion (segmento 2) del loop FOR no se cumplira, por lo tanto
*     se cerraria. Si nosotros hubieramos usado sizeof(szName) entonces el loop seguiria por
*     todas las celdas hasta llegar a szName[32] y esto haria que aparezcan varios espacios en
*     el chat (claro esta, a menos de que el nombre del player sea de 32 caracteres).


*     Como habia dicho antes, hay ciertas cosas del loop FOR que pueden variar, solo que los 
*     ejemplos mostrados anteriormente son generalmente los mas usados. Pero, yo creo que
*     cuantos mas ejemplos a mostrar, mejor posibilidad de entender el tema, por lo que aca
*     dejo un ejemplo, cambiando ciertos parametros:

*/

    #include <amxmodx>

    #define PLUGIN    "Conteo Inverso"
    #define AUTHOR    "Alucard"
    #define VERSION    "0.0.1"

    
public plugin_init()
    {
        
register_plugin(PLUGINVERSIONAUTHOR);
        
register_clcmd("say /conteo""HookCmdName");
    }

    public 
HookCmdName(id)
    {
        new 
iNums[5] = { 1234};
        
        for(new 
51i--)
        {
            
client_print(idprint_chat"%d"iNums[i-1]);
        }
        
        return 
PLUGIN_HANDLED;
    } 
Gracias Alu, nose si lo entendi 100%, pero bastante entendi
__________________
First Zombie Class
[ZP] Zombie Class: Houndeye Zombie
Quote:
Originally Posted by lucas_7_94 View Post
tenes que saber pawn antes de intentar hacer algo digno.
!Morte is offline
Send a message via MSN to !Morte Send a message via Skype™ to !Morte
Alucard^
AMXX Moderator: Others
Join Date: Sep 2007
Location: Street
Old 06-24-2010 , 22:45   Re: [ES]Ayuda con for (No lo entiendo)
#6

Deci que es lo que no entendes y se te explica =p
__________________
Approved Plugins - Steam Profile

Public non-terminated projects:
All Admins Menu, HLTV parameters, Subnick,
Second Password (cool style), InfoZone,
Binary C4 plant/defuse, and more...

Private projects:
NoSpec (+menu), NV Surf Management,
PM Adanved System, KZ longjump2, and more...
Alucard^ is offline
Send a message via Skype™ to Alucard^
LittleBody
BANNED
Join Date: Apr 2010
Old 06-24-2010 , 22:58   Re: [ES]Ayuda con for (No lo entiendo)
#7

Si haces

Code:
new Variable = 5 for( i = 0; i < Variable; i++) {      Variable = 0 }

Se cae el server?
LittleBody is offline
Alucard^
AMXX Moderator: Others
Join Date: Sep 2007
Location: Street
Old 06-24-2010 , 23:14   Re: [ES]Ayuda con for (No lo entiendo)
#8

Dudo que se caiga.... porque sino entonces se caeria cuando se usa un task con flag "b" o cuando se usa Ham_Think, PreThing y demas... pero consumiria al pedo.
__________________
Approved Plugins - Steam Profile

Public non-terminated projects:
All Admins Menu, HLTV parameters, Subnick,
Second Password (cool style), InfoZone,
Binary C4 plant/defuse, and more...

Private projects:
NoSpec (+menu), NV Surf Management,
PM Adanved System, KZ longjump2, and more...
Alucard^ is offline
Send a message via Skype™ to Alucard^
LittleBody
BANNED
Join Date: Apr 2010
Old 06-25-2010 , 00:56   Re: [ES]Ayuda con for (No lo entiendo)
#9

Quote:
Originally Posted by Alucard^ View Post
Dudo que se caiga.... porque sino entonces se caeria cuando se usa un task con flag "b" o cuando se usa Ham_Think, PreThing y demas... pero consumiria al pedo.
Probé ahora y se cae si haces esto.

Code:
new Variable = 5 for( new i = 0; i < Variable; i++ ) {     Variable = 0         if( Variable < 5 )         set_user_health(id, get_user_health(id) + 10 ) }
LittleBody is offline
fezh
Veteran Member
Join Date: Dec 2008
Location: BANNED
Old 06-25-2010 , 14:33   Re: [ES]Ayuda con for (No lo entiendo)
#10

Por que estas estableciendo de la var "Variable" en cero antes de hacer cualquier cosa, por lo que el loop en este caso resultaría infinito. Y sí, es obvio que se caiga el server en este tipo de situaciones.

PD: http://tinyurl.com/3xmd2hj
__________________
"There is no knowledge, that is not power"
fezh is offline
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 07:53.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode