Utilización de macros
#1
Bueno más que nada buenas tardes a todos

Voy a enseñarles totalmente el uso de macros para que le demos uso y sepamos para que lo estamos usando

Aquí vamoooooos Gran sonrisa

Definición:
Un macro es un trozo de codigo que es leido en el preprocesado, el primer proceso de compilacion, y lo que hace simplemente es reemplazar un trozo de codigo con otro, no genera errores, dependiendo si eres negro codeando y no te imaginas el reemplazo, no interfiere directamente con la memoria, por el hecho que no son variables que guardan datos, son eliminados despues de ese proceso.

Cabe destacar que definir strings en un macro es una pesima idea si quieres que tu plugin pese menos, por que tal dicho, es un reemplazo por sobre todo el codigo, poniendo un string, pondras strings en todo el codigo, haciendo repetitivas veces un arbolito de memoria que quedaran en el archivo haciendolo mas pesado (cosa que no influye en el rendimiento, para los obsesionados).

Los macros son útiles para guardar valores, y trozos de codigos (pseudofunciones)

Fuente: meTaLiCroSS señores
Para que sirve:
Una macro sirve para guardar algún tipo de valor en una simple definición, o guardar un calculo matemático y que devuelva cierto valor, utilizar una variable para devolver "x" valor, etc.

Por ejemplo:
Código PHP:
#define MAX_NIVEL     500 
Acá definimos un valor a MAX_NIVEL que es 500. Y podemos utilizarlo para darle ese mismo valor a una variable, chequear el mismo, utilizarlo como máximo a una constante, así con los siguientes:
Código PHP:
g_variable[id] = MAX_NIVEL;
/** o **/
if (g_variable[id] >= MAX_NIVEL)
/** o **/
new const szConstante[MAX_NIVEL] = { 123... 500 }; 
Utilización:
Supongamos que tenemos un sistema de niveles. Y queremos hacer la experiencia que pida por nivel. Entonces usaremos la siguiente macro
Código PHP:
#define Costo(%1)    (%1 * 5) 
Esta macro es la que usaremos para chequear la experiencia por nivel.
Sería "Tu nivel actual * 5". Si tenemos nivel 2 entonces
Código:
(2 * 5) = 10

El %1 es para que usemos algún tipo de valor, como una variable, la id del cliente, una función, etc. Y es de la siguiente forma
Código PHP:
Costo(g_nivel[id]); 
Recordemos que nuestra macro contiene esto (%1 * 5), si nuestro nivel es 50. Entonces el cálculo es el siguiente
Código:
(50 * 5) = 250

El %1 de la macro lo reemplazamos por el valor de nuestro nivel (De la variable g_nivel)

Una macro un poco más compleja sería esta.
Código PHP:
#define Costo(%0, %1)    (%1 + 1) * 5 * (g_iRango[%0]+1) 
Los primeros 2 parámetros lo explicaré brevemente...
%0: En este parámetro guardaremos el ID del jugador
%1: En este parámetro guardaremos el valor de las variables

Supongamos que nuestro nivel es 76 y nuestro rango de forma entera es 4. Cuando lo utilizamos el plugin sería algo así:
Código PHP:
while (g_iXP[id] >= Costo(idg_iNivel[id])) 
El cálculo sería el siguiente:
Código:
(%1 + 1) * 5 * (g_rango[id]+1)
(76 + 1) * 5 * (4+1)
77 * 5 * 5
385 * 5
1925
Entonces el requerimiento para el nivel 76 del rango 4 es 1925
Ejemplo de plugin con una macro:
Código PHP:
#include <amxmodx>

new g_nivel[33];
new 
g_rango[33];

#define CostoNivel(%0,%1)        ((%1 + 1) * 150 * (g_rango[%0] + 5) * random_num(50 75))

public plugin_init()
    
register_clcmd("say /probar""Clcmd_Test");

public 
client_putinsever(id)
{
    
g_nivel[id] = random_num(1,250); // Le damos un valor a la variable entre 1 hasta 250
    
g_rango[id] = random_num(0,25); // Le damos un valor a la variable entre 0 a 25
}

public 
Clcmd_Test(id)
{
    
client_print(idprint_chat"[TEST] El valor de XP para el rango %d del nivel %d es: %d"g_rango[id], g_nivel[id], CostoNivel(idg_nivel[id]));
    return 
PLUGIN_HANDLED;

Calculamos:
- Supongamos que al conectarnos, nos sale el nivel 149 rango de forma entera 33 y el valor de la madro entre 50 y 75, sale 66
Código:
(%1 + 1) * 150 * (g_rangp[id] + 5) * 66

(149 + 1) * 150 * (33 + 5) * 66
150 * 150 * 38 * 66
22500 * 2508 = 56.430.000 (56 millones 430mil)

Y nuestro print diría esto:
Código:
[TEST] El valor de XP para el rango 33 del nivel 149 es: 56430000
Ejemplos con más complejidad:
- 1er ejemplo:
Un ejemplo complejo sería el siguiente:
Código PHP:
#define ObtenerNumero(%1, %2)        (%1 * %2) / (%1 * (random_num(%1, %2)) 
Como verán tiene 2 parámetros la macro, %1 y %2. Ya habíamos explicado del porque del %1 ahora agregamos otra asignación para agregar otro valor. En caso de querer agregar más parámetros a su macro, solo deben agregar el signo de porcentaje (%) y el número dependiendo de cuantas uses.

El cálculo matemático sería así:
- Supongamos que el valor para %1 es 21 y para %2 es 83, entonces:
Código:
(%1 * %2) / (%1 * (random_num(%1, %2))
(21 * 83) / (21 * (random_num(21, 83))
/** Donde dice random_num(21, 83) sería un número al azar entre 21 y 83. Supongamos que sale el número 62, entonces **/
(21 * 83) / (21 * 62)
1743 / 1302
1,338
Nos devolvería un número decimal. Obviamente que el valor va a variar porque hay un comando que hace que varíe (random_num()Guiño así que puede ser cualquier número que pueda devolver esa macro
- 2do ejemplo:
Otro ejemplo más complejo sería este (Cortesía de Kane):
Código PHP:
#define ObtenerNumero(%1, %2, %3, %4)     (%1 * power(%2, %4)) / %3 - %1 * random_num(%4, %1) 
El cálculo sería así:
- Supongamos que el valor para el primer parámetro es 50, para el segundo es 25, el tercero 100 y el cuarto 5, entonces
Código:
(%1 * power(%2, %4)) / %3 - %1 * random_num(%4, %1)
(50 * power(25, 5)) / 100 - 50 * random_num(5, 25)
/** el comando power sería la exponensiación de un número. Es decir, si el primer parámetro es 25, entonces el exponente de 25 sería el segundo parámetro, que es 5. Más preciso... 25 elevado a 5

Y supongamos que dentro del comando random_num sale 20 **/
(50 * 9765625) / 50 * 20
488281250 / 1000
488281,25
Otro número con decimales, como habíamos explicado en el primer ejemplo

Si quieren pueden hacer cualquier tipo de pregunta acerca del tema o cualquier duda y lo voy agregando al post para que se saquen las dudas y explicárselos de la mejor forma.

Eso es todo por el momento, lo que falta digan y agrego
Saludos.
Responder
#2
Como siempre grande ^^ esto le servira a mucha gente. Pero por ejemplo en
Código PHP:
#define Costo(%1)    (%1 * 5)// tu nivel por 5 
podrias explicar eso ya que hay gente que no lo entiende ^^
Buen tuto.
[Imagen: 76561198066347799.png]
Responder
#3
Lo expliqué a eso. Sino lo detallo un poco más.
Responder
#4
(31/08/2014, 08:43 PM)CSAxel escribió: Lo expliqué a eso. Sino lo detallo un poco más.

Lo explicaste mediante la variable xD pero hay gente que no lo entiende... y tu bien lo sabes
[Imagen: 76561198066347799.png]
Responder
#5
Sisi ahí lo expliqué un poco. Es fácil igual como está redactado.
Responder
#6
Dice definicion pero no lo definis, solo decís para que sirve.
Pordrias también agregar ejemplos mas complejos como:
Código PHP:
#define get_num(%0, %1, %2, %3)     (%0*power(%1,%3))/%2 - %0*random_num(%0, %3) 
Lo exajere para que me entiendas porque aveces no soy muy claro. A lo que voy es que no pongas solo las cosas mas simples, que también pongas algo un poco mas avanzado así el que la lee puede aprender primero lo básico y después algo un poco mas complejo.
Me gustaron algunas explicaciibes , bien ahí.
(19/06/2014, 11:08 PM)01011001 escribió: No tiene niveles infinitos, llega hasta 2147483648 (Y despues hace un integer overflow)

(19/06/2014, 11:08 PM)[R]ak escribió: Mis conocimientos aumentaron un 500% con este post
Responder
#7
Sisi después voy actualizando el tema. Así agregar la definición de Macros.
Y pones ejemplos más complejos. Voy a usar el tuyo ya que tengo un poco quemadas las ideas :_

EDIT: Actualicé eso. Y agregué ejemplos
Responder
#8
Gracias por el tutorial !
Responder
#9
Muy bueno axel :3 solo uno que otro error de, dedo :3

ej:

Para que sivre:
-->
Para que sirve:


en el spoiler Utilización

#define Costo(%1) (%1 + 1) * 5 + (g_rango[id](
-->
#define Costo(%1) (%1 + 1) * 5 + (g_rango[id])


en Ejemplo de Plugin con macro


#define CostoNivel(%1) (%1 + 1) * 150 * (g_rangp[id]+1) * 50
-->
#define CostoNivel(%1) (%1 + 1) * 150 * (g_rango[id]+1) * 50



Pero aparte de esos mínimos errorsirijillos esta perfecto Excitedeyes

Otro buen aporte

Gracias :3

NO DOY AYUDA VIA MENSAJE PRIVADO

* Si requieres algún servicio de pago puedes contactarme vía MP o en mi facebook

[Imagen: w8565u-4.png]
Responder
#10
Muy buen tutorial CSAxel
[Imagen: b_350_20_323957_202743_f19a15_111111.png]

Estudia siempre; el tiempo es oro, lo material se puede recuperar pero el tiempo no se puede recuperar.
(02/10/2016, 05:05 PM)meTaLiCroSS escribió: Siempre me gusta ayudar cuando alguien esta interesado realmente en ver que esta programando.
(08/08/2019, 05:32 PM)meTaLiCroSS escribió: grax x el dato cr4ck


Mis aportes

PLUGINS
MAPAS
Menú LANG [SF] Sistema de Frags
Say System (Admin Prefix)
Responder
#11
Gracias ahí edité los mínimos errores e.e
Responder
#12
Una cosa saca esta parte
#define MAX_NIVEL....
Por q es mejor una constante q una macro para guardar un numero
Buen putorial Crab
[TUT] Carnage

Fight

"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"

Anónimo
Responder
#13
(01/09/2014, 07:37 PM)mongito100 escribió: Buen putorial Crab

idem
futuro ingeniero agrónomo.

tutoriales-allied
buscas un zp?

"La imitación es la forma más sincera de admiración con la que puede pagar la mediocridad a la grandeza"

volví a vender plugins, contactame
Responder
#14
Yo lo dejaría, pero lo aclaro. Es para que la gente que se inicia. Por ahí se pregunte al ver esto
Código PHP:
#define ADMIN_ACCESS    ADMIN_RCON 
Como ejemplo obvio. Y dejo aclaraciones de que es mejor una constante para que tenga en cuentan eso. Aunque nada que ver con el Tuto pero es algo para que bueno, lo piensen xD
Responder
#15
Muy bueno el tutorial..
Responder
#16
Yeah Axel , hay gente que reniega mucho para usar macros... ya con esto estarán felices.
Me gusto mucho tu tutorial , como siempre.
Saludos
NUEVO ZOMBIE PLAGUE + LVLS!! UNETE A LA COMUNIDAD
[Imagen: b_350_20_ffad41_e98100_000000_591f11.png]


Responder
#17
Código PHP:
#define Costo(%1)    (%1 + 1) * 5 + (g_rango[id]) 

Cuando explicaste eso lo consideraste como multiplicación, y antes los habías definido como una suma, bueno es como algo obvio pero igual en esos casos hipotéticos.
-->
Código PHP:
#define Costo(%1)    (%1 + 1) * 5 * (g_rango[id]) 
Party Time! Lengua Dancing, Saludos. Gran sonrisa
(ZP Assassin) 100% | 72% (Optimizando)
Responder
#18
CSAxel talvez te podrias hacer un tutorial de arrays dinamicos con ejemplos..
Responder
#19
en los define a veces veo cosas demasiadas extrañas como funciones, simbolos raros, llamadas a natives :S WhatdoneWhatdoneWhatdoneWhatdone
Whatdone https://amxmodx-es.com/Thread-Desvirtue-...n=lastpost
MCBloques [v1.5]
  • reemplazar models con sprites
  • guardado y carga automatico
  • utilizar mysql
  • mejorar el crafting
  • +info
Responder
#20
La definicion creo que ni tu la entendiste.

Un macro es un trozo de codigo que es leido en el preprocesado, el primer proceso de compilacion, y lo que hace simplemente es reemplazar un trozo de codigo con otro, no genera errores, dependiendo si eres negro codeando y no te imaginas el reemplazo, no interfiere directamente con la memoria, por el hecho que no son variables que guardan datos, son eliminados despues de ese proceso.

Cabe destacar que definir strings en un macro es una pesima idea si quieres que tu plugin pese menos, por que tal dicho, es un reemplazo por sobre todo el codigo, poniendo un string, pondras strings en todo el codigo, haciendo repetitivas veces un arbolito de memoria que quedaran en el archivo haciendolo mas pesado (cosa que no influye en el rendimiento, para los obsesionados).

Los macros son útiles para guardar valores, y trozos de codigos (pseudofunciones)
Responder
#21
Estaría bueno que agregues la utilización de macros multilínea, son útiles para editar funciones sin tener que buscarlas en un código extenso.
(16/05/2020, 06:31 PM)Ipolito escribió: Ahre que solo estafe a 1

(12/05/2020, 06:37 PM)Neeeeeeeeeel.- escribió: El puto compilador de AM está más bugueado que la concha de la lora

(09/05/2020, 02:29 PM)Nube. escribió: que concha le hicieron al foro?

(13/05/2019, 08:27 PM)Niper.-. escribió: Yo siempre quise ser un hacker hackero profesional del 1.6 conter strike 1.6 no steam y counter strike 1.6 steam version 1.2.65. El problema es que no sabía como hackear entonces aprendi a hackear mediante hackeos como hackee mi primera vez hackeando un sistema de hackers para yo despues hackear a ese hacker que me queria hackear pero yo lo hackee primero por ende el hacker quedo re hackeado por mi que seria un hacker. Entonces así fui como me hice hacker. Gracias por leer.

(27/04/2020, 02:13 PM)Neeeeeeeeeel.- escribió: El foro será actualizado tan pronto encuentren la cura para el coronavirus

(07/04/2020, 11:22 PM)Hypnotize escribió: aparte kikizon es marica

(26/03/2020, 04:23 AM)Chema escribió: +REP de que pendejo? ni tienes 100 posts.

(20/11/2018, 09:32 AM)Neeeeeeeeeel.- escribió: yo porque soy muy enfermo del styling

(13/02/2017, 07:41 PM)Heber[$]ource escribió: es nuvpawn, nos esta ddoseando con su sega genesis

(10/05/2019, 08:23 PM)Niper.-. escribió: Trap no son tus putas trap es mi equipo tumbando el foro de amxmodx hey tumbando el foro hey tumbando el foroooo ya saben todos nos llevamos todos los pluginsss..

(18/02/2019, 03:08 PM)Neeeeeeeeeel.- escribió: Shit

(28/02/2015, 03:27 AM)sasske escribió: Vete al diablo detallista de mierda :ohgodwhy;

(26/12/2018, 02:45 PM)[R]ak escribió: yo solo te veo en whatsapp agarrando culos.. nose..

(09/06/2017, 12:59 AM)kikizon2 escribió: Quiero que leas las reglas, y si fuese posible que saltaras de un 10mo piso, pls.

(21/04/2017, 01:27 AM)Chamo. escribió: Cuanto hay que pagar para estar en tu firma TrolleyesThats what she said?

(20/04/2017, 11:56 PM)matrix123 escribió: Patrocinas rehlds? Es de lo único que hablas, mañana seguro te llegan remeras de rehlds, mandame una Whatever

(26/04/2017, 08:47 PM)Dieguito escribió: al que me salga con latinservers le meto un sugisaki por el c***

(26/02/2017, 08:02 PM)meTaLiCroSS escribió: La misma aritmetica se aplica con los Strings falsos que inventé ("trivago" y "pajarussel").

(06/01/2015, 10:47 PM)meTaLiCroSS escribió:
(06/01/2015, 10:40 PM)wiD escribió: este chileno culiau :whatever;
¿Que?

(29/04/2016, 11:44 PM)wiD escribió: Te juro que si te tengo enfrente primero te piso con el auto y despues te meo en la boca.

(16/07/2014, 06:38 PM)wiD escribió: Mongito dame su name que quiero un chip para pegar todo cocow

(18/03/2015, 02:04 PM)ErikMav94 escribió:
(18/03/2015, 02:03 PM)mongito100 escribió: Son todos putos
escribís como el orto :trolleyes;

[Anti] escribió:Olle tranquilo cerebrito

(03/04/2015, 12:16 AM)Treki escribió:
(03/04/2015, 12:11 AM)Sugisaki escribió: cual plug?, el arkshine o el de arkshine?

Fixed*

(09/03/2015, 09:49 PM)Moroha escribió: Suspendieron al abaricioso platero de kikizon :trolleyes;

(26/05/2014, 08:31 PM)ivan escribió: hola quiero hacer combo para el party uso el de rank

(22/08/2014, 11:41 PM)Store.gh escribió: Join team de jeropito? A vos t hace falta un pito..

(26/02/2015, 01:01 AM)meTaLiCroSS escribió:
(26/02/2015, 12:54 AM)sasske escribió: Salida del horno nueva versión, que obsesionado estoy :3
PD: Me olvide de darle los créditos a metal xD, pobre metal xd
Da igual, dejalo como una enseñanza jejej no te llorare por unos creditos ehhmm hud...

(18/01/2015, 12:31 AM)[R]ak escribió: no me critican.. solo dicen boludeces

(05/01/2015, 12:43 AM)roccoxx escribió: Sentado en dust pensando como fui tan gil ♪
[Imagen: attachment.php?thumbnail=1750]
Responder
#22
(07/09/2014, 09:47 PM)Mario AR. escribió: Estaría bueno que agregues la utilización de macros multilínea, son útiles para editar funciones sin tener que buscarlas en un código extenso.

Volviste mario ?

Ahora q lei un poco mas me fije en esto

#define Costo(%1) (%1 + 1) * 5 + (g_rango[id])

eso es un mal habito q pasa si no tengo "id" en mi funcion
[TUT] Carnage

Fight

"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"

Anónimo
Responder
#23
(07/09/2014, 09:47 PM)Mario AR. escribió: Estaría bueno que agregues la utilización de macros multilínea, son útiles para editar funciones sin tener que buscarlas en un código extenso.

Agregales un \ al final y saltas la linea, sencillo, el editor te lo tomara dentro del macro.
Responder
#24
(07/09/2014, 09:53 PM)meTaLiCroSS escribió:
(07/09/2014, 09:47 PM)Mario AR. escribió: Estaría bueno que agregues la utilización de macros multilínea, son útiles para editar funciones sin tener que buscarlas en un código extenso.

Agregales un \ al final y saltas la linea, sencillo, el editor te lo tomara dentro del macro.

Las llaves y el semicolon.. a veces es medio trucado eso de los macro multilínea.
(16/05/2020, 06:31 PM)Ipolito escribió: Ahre que solo estafe a 1

(12/05/2020, 06:37 PM)Neeeeeeeeeel.- escribió: El puto compilador de AM está más bugueado que la concha de la lora

(09/05/2020, 02:29 PM)Nube. escribió: que concha le hicieron al foro?

(13/05/2019, 08:27 PM)Niper.-. escribió: Yo siempre quise ser un hacker hackero profesional del 1.6 conter strike 1.6 no steam y counter strike 1.6 steam version 1.2.65. El problema es que no sabía como hackear entonces aprendi a hackear mediante hackeos como hackee mi primera vez hackeando un sistema de hackers para yo despues hackear a ese hacker que me queria hackear pero yo lo hackee primero por ende el hacker quedo re hackeado por mi que seria un hacker. Entonces así fui como me hice hacker. Gracias por leer.

(27/04/2020, 02:13 PM)Neeeeeeeeeel.- escribió: El foro será actualizado tan pronto encuentren la cura para el coronavirus

(07/04/2020, 11:22 PM)Hypnotize escribió: aparte kikizon es marica

(26/03/2020, 04:23 AM)Chema escribió: +REP de que pendejo? ni tienes 100 posts.

(20/11/2018, 09:32 AM)Neeeeeeeeeel.- escribió: yo porque soy muy enfermo del styling

(13/02/2017, 07:41 PM)Heber[$]ource escribió: es nuvpawn, nos esta ddoseando con su sega genesis

(10/05/2019, 08:23 PM)Niper.-. escribió: Trap no son tus putas trap es mi equipo tumbando el foro de amxmodx hey tumbando el foro hey tumbando el foroooo ya saben todos nos llevamos todos los pluginsss..

(18/02/2019, 03:08 PM)Neeeeeeeeeel.- escribió: Shit

(28/02/2015, 03:27 AM)sasske escribió: Vete al diablo detallista de mierda :ohgodwhy;

(26/12/2018, 02:45 PM)[R]ak escribió: yo solo te veo en whatsapp agarrando culos.. nose..

(09/06/2017, 12:59 AM)kikizon2 escribió: Quiero que leas las reglas, y si fuese posible que saltaras de un 10mo piso, pls.

(21/04/2017, 01:27 AM)Chamo. escribió: Cuanto hay que pagar para estar en tu firma TrolleyesThats what she said?

(20/04/2017, 11:56 PM)matrix123 escribió: Patrocinas rehlds? Es de lo único que hablas, mañana seguro te llegan remeras de rehlds, mandame una Whatever

(26/04/2017, 08:47 PM)Dieguito escribió: al que me salga con latinservers le meto un sugisaki por el c***

(26/02/2017, 08:02 PM)meTaLiCroSS escribió: La misma aritmetica se aplica con los Strings falsos que inventé ("trivago" y "pajarussel").

(06/01/2015, 10:47 PM)meTaLiCroSS escribió:
(06/01/2015, 10:40 PM)wiD escribió: este chileno culiau :whatever;
¿Que?

(29/04/2016, 11:44 PM)wiD escribió: Te juro que si te tengo enfrente primero te piso con el auto y despues te meo en la boca.

(16/07/2014, 06:38 PM)wiD escribió: Mongito dame su name que quiero un chip para pegar todo cocow

(18/03/2015, 02:04 PM)ErikMav94 escribió:
(18/03/2015, 02:03 PM)mongito100 escribió: Son todos putos
escribís como el orto :trolleyes;

[Anti] escribió:Olle tranquilo cerebrito

(03/04/2015, 12:16 AM)Treki escribió:
(03/04/2015, 12:11 AM)Sugisaki escribió: cual plug?, el arkshine o el de arkshine?

Fixed*

(09/03/2015, 09:49 PM)Moroha escribió: Suspendieron al abaricioso platero de kikizon :trolleyes;

(26/05/2014, 08:31 PM)ivan escribió: hola quiero hacer combo para el party uso el de rank

(22/08/2014, 11:41 PM)Store.gh escribió: Join team de jeropito? A vos t hace falta un pito..

(26/02/2015, 01:01 AM)meTaLiCroSS escribió:
(26/02/2015, 12:54 AM)sasske escribió: Salida del horno nueva versión, que obsesionado estoy :3
PD: Me olvide de darle los créditos a metal xD, pobre metal xd
Da igual, dejalo como una enseñanza jejej no te llorare por unos creditos ehhmm hud...

(18/01/2015, 12:31 AM)[R]ak escribió: no me critican.. solo dicen boludeces

(05/01/2015, 12:43 AM)roccoxx escribió: Sentado en dust pensando como fui tan gil ♪
[Imagen: attachment.php?thumbnail=1750]
Responder
#25
Mucho mejor que lo hagas función en vez de macro, cito la parte donde se explica que es un reemplazo de codigo. Solo terminas haciendo un codigo mas grande y menos reducido.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)