Parбmetro de tipo mixto -
hotspicytaco - 15.01.2015
Hola.
їAlguien tiene idea de como podrнa crear un parбmetro de "tipo mixto"? Estoy tratando de hacer una funciуn que le establezca un valor a una variable y el valor puede ser string, int, float, bool. Lo que quiero es saber de que tipo es el parбmetro "value".
e.j:
pawn Код:
SetPlayerStat(playerid, stat, value)
{
// Si el valor "pasado" es una cadena de texto...
if(value == string)
{
// Usar format (o algo mбs eficaz) para asignarle el valor en vez de asignarselo con "="
format(var, sizeof(var), "%s", value);
}
// El valor pasado es un entero/float/bool
else
{
// Asignar el valor directamente usando "="
var = value;
}
return true;
}
//Uso:
SetPlayerStat(playerid, DINERO, 20);
SetPlayerStat(playerid, PASS, "45712");
SetPlayerStat(playerid, VIDA_INFINITA, true);
SetPlayerStat(playerid, VIDA, 99.0);
Tambiйn me gustarнa saber alguna manera mejor de hacer esto en caso de que eso no fuera posible.
Gracias.
Respuesta: Parбmetro de tipo mixto -
Fluid016 - 15.01.2015
Podrнas usar la funciуn
IsNumeric e IsFloat
pawn Код:
stock IsFloat(buf[])
{
new l = strlen(buf);
new dcount = 0;
for(new i=0; i<l; i++)
{
if(buf[i] == '.')
{
if(i == 0 || i == l-1) return 0;
else
{
dcount++;
}
}
if((buf[i] > '9' || buf[i] < '0') && buf[i] != '+' && buf[i] != '-' && buf[i] != '.') return 0;
if(buf[i] == '+' || buf[i] == '-')
{
if(i != 0 || l == 1) return 0;
}
}
if(dcount == 0 || dcount > 1) return 0;
return 1;
}
Respuesta: Parбmetro de tipo mixto -
Jovazxc - 15.01.2015
Dado que en PAWN no puedes sobrecargar una funciуn, utiliza getarg
https://sampwiki.blast.hk/wiki/Getarg
Respuesta: Parбmetro de tipo mixto -
Zume - 17.01.2015
podrнas intentar con el plugin de Expresiones Regulares, o obtener su tipo de esta manera:
pawn Код:
#define FLOAT_TYPE 1
#define INT_TYPE 2
#define HEX_TYPE 3
#define BOOL_TYPE 4
#define UNKNOWN_TYPE 0
stock getVarType({_, Float, bool, hex}:value, type = tagof( value ))
{
static _t = 0;
if(type == tagof( bool: )){
_t = BOOL_TYPE;
}
else if(type == tagof( hex: )){
_t = HEX_TYPE;
}
else if(type == tagof( Float: )){
_t = FLOAT_TYPE;
}
else{
_t = ((value > (0x2F) && value < 0x3A) ? (INT_TYPE): (UNKNOWN_TYPE));
}
return (_t);
}
pero no logro pensar en como poder comprobar antes de la ejecuciуn si es un array o un entero para comprobar si es un string sin algъn loop (me refiero a crear su definiciуn en el mismo argumento 1).. falta el string, ya que creo que no tiene tag por defecto, en caso de ternerlo ya estarнa sуlo aсadirle el tag xD
pawn Код:
main()
{
new bool:str = true;
static v[][] = {
{"Unknown"},
{"FLOAT"},
{"INT"},
{"HEX"},
{"BOOL"}
};
printf("ES %s", v[getVarType(str)][0]);
}
Respuesta: Parбmetro de tipo mixto -
Swedky - 17.01.2015
Con macros
Respuesta: Parбmetro de tipo mixto -
Zume - 17.01.2015
Quote:
Originally Posted by EnzoMetlc
Con macros
|
lo dices por que los macros son sin formato? lo son verdad? xD, tienes razуn en verdad