aumento de pamametros en una macro -
nacho_gb1 - 13.01.2012
Buenas, les cuento mi duda es que si hay alguna manera de aumentar los parбmetros de una macro, pues yo tengo entendido que el numero maximo de parametros para una macro son entotal
"10", "%0...%9" por ejemplo:
voy hacer una operaciуn matemбtico que sera este:
(34,2 / 5) / 12,6) / 4) + 25 + 30 - 56 - (12 * 48 * 61) = -35 136,8643
pawn Код:
#define MI_MACRO(%0,%1,%2,%3,%4,%5,%6,%7,%8,%9) %0 / %1 / %2 / %3 + %4 + %5 - %6 - %7 * %8 * %9
printf("%f", MI_MACRO(34.2,5,12.6,4,25,30,56,12,48,61));
pues mi pregunta si quisiera agregar otra operaciуn matemбtico como lo tendrнa que hacer, pues me gustarнa saber si hay alguna manera para aumentar el parбmetro de la macro, aunque no creo que se puede ya que como tengo en tendido el mбximo de parбmetros para una macro son
10
Saludos
Respuesta: aumento de pamametros en una macro -
TheChaoz - 13.01.2012
es mejor preguntarte lo siguiente, realmente necesitas mas de 10 parametros en una macro? que intentas hacer?
Y en respuesta a tu pregunta por lo que recuerdo el maximo es 10. Y por las dudas te aviso que cada parametro de una macro no significa que solo pueda ir un valor allн.
Respuesta: aumento de pamametros en una macro -
nacho_gb1 - 13.01.2012
aahh ya entendн, solo preguntaba por curiosidad aparte querнa saber si existia algъn mйtodo para aumentar los paramentos pero veo que no se puede :P, gracias por contestar mi tema y por aclararme lo del parбmetro.
Saludos y perdуn por hacer preguntas muy estъpidas.
Respuesta: aumento de pamametros en una macro -
TheChaoz - 13.01.2012
Ninguna pregunta es estupida.
PD: si te interesa se pueden crear funciones sin limites de parametros (cada uno utilizable)
Respuesta: aumento de pamametros en una macro -
nacho_gb1 - 13.01.2012
si, si me explicaras como consiste te agradecerнa mucho.
Saludos
Respuesta: aumento de pamametros en una macro -
TheChaoz - 14.01.2012
si bien x ahi te resulte raro, no es tan complejo.
inicialmente debes declarar el parametro como array de los mismos, para lo que usaras los caracteres '...' quedando el header de la funcion de la siguiente manera:
ahora bien, para trabajar con los parametros puedes usar las siguientes funciones:
pawn Код:
native numargs();
native getarg(arg, index=0);
native setarg(arg, index=0, value);
un ejemplo:
pawn Код:
//Declaracion:
SetPlayerRandomColor(playerid, ...)
{
new rnd, count;
count = numargs()-1;//numeramos los argumentos.
rnd = random(count);
if(!count)return SetPlayerColor(playerid, GetPlayerColor(playerid));//
return SetPlayerColor(playerid, getarg((rnd==0) ? ( 1) : (rnd)));
}
//Uso:
SetPlayerColor(playerid, 0xFF0000FF, 0xFFFF00FF, 0x0000FF66, 0x66FFA8FF);
Respuesta: aumento de pamametros en una macro -
nacho_gb1 - 14.01.2012
mm Gracias por la explicaciуn,pues bien leyendo y traduciendo con el traductor de ****** (muy malo) un tutorial explicando las 3 funciones que me diste, salia ejemplos usando Float,Menu,Text.
pero en verdad no entendн casi nada si podrнas explicarme un poco mas te agradecerнa mucho y el el funcionamiento de
getarg setarg
lo que entendi es que setarg establece un argumento y getarg obtiene un argumento y no estoy seguro si estoy en lo sierto
Saludos
Respuesta: aumento de pamametros en una macro -
TheChaoz - 14.01.2012
si, estas en lo correcto.
La funcion 'numargs' cuenta todos los argumentos de la funcion en la que se utilize (no solo los indefinidos).
La funcion 'getarg' obtiene un argumento (utilizas el parametro index de la misma para indicar cual).
La funcion 'setarg' setea el valor de un argumento (al igual que con getarg utilizas el parametro index para indicar cual, solo que esta vez tienes otros 2 parametros (el segundo dejalo en 0 y no te compliques) y el 3є indica el valor).
Aun asi depende lo que quieras hacer puede que debas leer mucho o que con esto te alcanze.
Respuesta: aumento de pamametros en una macro -
nacho_gb1 - 14.01.2012
Si voy a tener que leer mucho y repasar todo de nuevo.
lo que estaba intentando hacer es hacer una funcion que establesca el angulo (float) del jugador (playerid) y enviarle un mensaje
en el tutorial salia la estructura de la funcion:
pawn Код:
stock FunctionName(playerid, {Float,_}:...)
{
}
pero no da un ejemplo del funcionamiento con float y lo unico que se me ocurre es esto (no lo e probado ya que estoy en mi pc que esta malo)
pawn Код:
Angulo(playerid, {Float}:...)
{
new numero = numargs();
for(new i=0; i<numero; i++)
{
new Float:angulo = Float:getarg(i, 0);
new string[128];
SetPlayerFacingAngle(playerid,angulo);
for(new o; getarg(i,o); ++o)
{
string[o] = getarg(i, o);
}
SendClientMessage(playerid, -1, string);
}
}
Angulo(playerid,Float:180,"Hola");
si me pudieras dar un ejemplo usando float te lo agradecerнa o explicar lo que hago mal.
Saludos
Respuesta: aumento de pamametros en una macro -
TheChaoz - 14.01.2012
si quieres enviarle un mensaje al jugador y cambiar su angulo no necesitas parametros variables (aun que es una opcion)
pawn Код:
SetPlayerFacingAngleEx(playerid, Float:angle, messge[], color=-1)//color es opcional, por defecto sera blanco.
{
SetPlayerFacingAngle(playerid, angle);
return SendClientMessage(playerid, color, message);
}
Respuesta: aumento de pamametros en una macro -
nacho_gb1 - 14.01.2012
aaahh ok, de esa forma si se, pero me podrнas dar un ejemplo cuando utilizar parametros sin limites?
ya que en verdad no se en que pueda utilizarlo.
Saludos y muchas gracias por aclararme varias cosas
Respuesta: aumento de pamametros en una macro -
TheChaoz - 14.01.2012
aca te dejo algunos ejemplos faciles:
pawn Code:
Sumar(...)
{
new res;
for(new i, j=numargs(); i<j; i++)
res += getarg(i);
return res;
}
//By RyDeR`
RemovePlayerWeapon(playerid, ...) {
new
iArgs = numargs()
;
while(--iArgs) {
SetPlayerAmmo(playerid, getarg(iArgs), 0);
}
}
//ahora algo q no sean solo numeros:
SetPlayerRandomFacingAngle(playerid, {Float, _}:...)
{
new rnd , count;
count = numargs() -1;//el -1 es ya que no contamos el parametro playerid
if(!count)return 0;
rnd = random(count);
return SetPlayerFacingAngle(playerid, Float:getarg((rnd==0) ? (1) : (rnd)));
}
espero que te hayan sido de utilidad, si no decime.
Re: aumento de pamametros en una macro -
nacho_gb1 - 14.01.2012
Te pasaste gracias por los ejemplos
si deseas puedes cerrar tema.
y muchas gracias por aclararme varias cosas y responder mis dudas
Saludos
Respuesta: aumento de pamametros en una macro -
TheChaoz - 14.01.2012
no hay problema, para eso estoy. y el tema queda abierto por si otros tienen dudas o cualquier cosa q se necesite.
Respuesta: aumento de pamametros en una macro -
Treyfus - 22.05.2012
Quote:
Originally Posted by the_chaoz
no hay problema, para eso estoy. y el tema queda abierto por si otros tienen dudas o cualquier cosa q se necesite.
|
Siii
Yo tengo una DUDA!!!
pawn Code:
((rnd==0) ? (1) : (rnd)))
Para que es el '?' y el ':'
Esa es mi duda!!
Respuesta: aumento de pamametros en una macro -
TheChaoz - 22.05.2012
Quote:
Originally Posted by Treyfus
Siii
Yo tengo una DUDA!!!
pawn Code:
((rnd==0) ? (1) : (rnd)))
Para que es el '?' y el ':'
Esa es mi duda!!
|
Se lo denomina operador ternario. Y se utiliza para comparar y devolver un valor u otro.
El equivalente a ese codigo (completo) seria:
pawn Code:
if(rnd == 0)
{
return SetPlayerFacingAngle(playerid, Float:getarg(1));
}
else
{
return SetPlayerFacingAngle(playerid, Float:getarg(rnd));
}