Autologin Sistema Cuentas MarioAR.
#1
Bueno, estuve tratando de agregar un autologin via steamid al sistema de cuentas de Mario AR., pero hasta ahora no he logrado nada. Esto es lo que tengo hasta ahora:

Código PHP:
// Variables del plugin
new g_userid[33], g_AutoLogueo[33], g_SteamID[33][35];
new 
g_pjconnect[33 char];
new 
g_buffer[33][34];
new 
g_nombre[33][CANTIDAD_PERSONAJES+1][32];
new 
g_bLogueadog_bInvitado;
new 
g_data[CANTIDAD_PERSONAJES*35], g_msg[150];
static 
g_reg_menu;
new 
Trie:g_personajes_creadosTrie:g_cuentas_creadas;
new 
cvar_minaccharcvar_minpwcharcvar_allowguestscvar_enablemailcvar_saylog;
new 
g_msgSayText;
#if defined _regex_included
new Regex:g_regexid
#endif
new g_IsSteam[33];
new 
g_UserSteam[33][35];
new const 
SETINFO_PASSWORD[] = "_fgpw";

const 
OFFSET_VGUI_JOINTEAM 2;

//#define menu_registro(%0) menu_display(%0,g_reg_menu)
#define player_buffer(%0) g_nombre[0][0][%0-1]
#define player_logueado(%0) (g_bLogueado & (1<<%0-1))
#define player_invitado(%0) (g_bInvitado & (1<<%0-1))
#define personaje(%0) g_pjconnect{%0}
#define g_lastuserid g_userid[0]
#define id_personaje(%0) ((g_userid[%0]-1)*CANTIDAD_PERSONAJES)+g_pjconnect{%0}
#define MAXPLAYERS g_pjconnect{0}
#define Save(%0) {\
    
g_buffer[%0][0] = EOS;\
    
formatex(g_buffer[%0], charsmax(g_buffer[]), "%d"id_personaje(%0));\
    
fvault_set_data(g_db_datosg_buffer[%0], g_data);\
    
client_print(%0print_console"[FGaming] Datos Guardados Correctamente: LVL: %d | EXP: %d | RR: %d | AP %d"kNivel[id], kExp[id], kReset[id], g_ammopacks[id]);\
}

#define REGEX_PATTERN "^^[A-Z0-9._+-]+@[A-Z0-9.-]+\.(?:[A-Z]{2}|com|net|fox|biz)$"

// Esto es para mas orden...
#define MENU_ITEM_KEY(%0) (1<<%0)

CargarDatos(id)
{
    if (
personaje(id))
    {
        
formatex(g_buffer[id], charsmax(g_buffer[]), "%d"id_personaje(id))
    
        
// Cargar datos (Si existen)
        
if (fvault_get_data(g_db_datosg_buffer[id], g_datacharsmax(g_data)))
        {
            new 
LVL[9], EXP[12], RR[4], AP[16]
            
parse(g_dataLVLcharsmax(LVL), EXPcharsmax(EXP), RRcharsmax(RR), APcharsmax(AP))
            
kNivel[id] = str_to_num(LVL)
            
kExp[id] = str_to_num(EXP)
            
kReset[id] = str_to_num(RR)
            
g_ammopacks[id] = str_to_num(AP)
            
            return;
        }
    }
    
     
// No se cargaron datos, es un usuario nuevo o un invitado.
    
kNivel[id] = 1
    kReset
[id] = 0
    kExp
[id] = 0
    g_ammopacks
[id] = 75
}

GuardarDatos(id)
{
    
g_SteamID[id] = g_UserSteam[id]

    
formatex(g_datacharsmax(g_data), "%d %d %d %d %d %s"kNivel[id], kExp[id], kReset[id], g_ammopacks[id], g_AutoLogueo[id], g_SteamID[id])
    
    
Save(id)
}

// Client joins the game
public client_putinserver(id)
{
    
get_user_authid(idg_UserSteam[id], 34);
    
get_user_authid(idg_SteamID[id], 34)

    new 
strlen(g_UserSteam[id]);
    
    if (
equali(g_UserSteam[id], "STEAM_ID_PENDING") || equali(g_UserSteam[id], "STEAM_ID_LAN") || <= 16 || (g_UserSteam[id][0] == 'V' && g_UserSteam[id][1] == 'A' && g_UserSteam[id][2] == 'L')) {
        
g_IsSteam[id] = 0;
    } else {
        
g_IsSteam[id] = 1;
    }

    
CargarDatosid );

    
checkautolog(id)
}

public 
checkautolog(id)
{
    new 
sPassword[34];
            
    
get_user_info(idSETINFO_PASSWORDsPassword33);

    
formatex(g_buffer[id], charsmax(g_buffer[]), "%d"id_personaje(id))
    
// Cargar datos (Si existen)
    
if (fvault_get_data(g_db_datosg_buffer[id], g_datacharsmax(g_data)))
    {
        new 
STEAMID[32], AUTOLOG[3]
        
parse(g_dataAUTOLOGcharsmax(AUTOLOG), STEAMIDcharsmax(STEAMID))
        
g_AutoLogueo[id] = str_to_num(AUTOLOG)
        
g_SteamID[id] = STEAMID
            
        
return;
    }

    if(
g_AutoLogueo[id])
    {
        if(
equal(g_SteamID[id], g_UserSteam[id]))
        {
            
CargarCuenta(id);
            
menu_personajes(id)
        }
    }
    else
        
set_task(0.2"menu_registro"id)

}

public 
saysteamid(id)
{
    
client_print(idprint_chat"Tu SteamID Guardada es: %s"g_SteamID[id])
    
client_print(idprint_chat"Tu SteamID Actual es: %s"g_UserSteam[id])
    return 
PLUGIN_HANDLED;


PD: esa ultima funcion la hice para verificar los datos, obviamente, el segundo print devuleve la steamid actual, pero el primer print solo devuelve un 0.
[Imagen: EvoLogo.png.fbcccbc49fb32e6a4bf8f5e72d80c317.png]
nalgas

(03/08/2018, 03:13 PM)Skylar escribió: Está bien que pidas ayudas, pero no para que crees 20 post todos los días mogolico de mierda, me tenes re podrido ya, contraté 10000 sicarios para que te busquen y te maten toda la familia, y a vos que te revienten con una bazooka.
Responder
#2
bumpp
[Imagen: EvoLogo.png.fbcccbc49fb32e6a4bf8f5e72d80c317.png]
nalgas

(03/08/2018, 03:13 PM)Skylar escribió: Está bien que pidas ayudas, pero no para que crees 20 post todos los días mogolico de mierda, me tenes re podrido ya, contraté 10000 sicarios para que te busquen y te maten toda la familia, y a vos que te revienten con una bazooka.
Responder
#3
Insecure Pide ayuda en Pedido de Plugins, aca suben son scripting u otras cosas

PDT: ¿Que carajo es [FGAMING]? Trolleyes

yo estoy hay no se porque me burlo :'v * o estube * Trolleyes
Responder
#4
(08/07/2018, 09:35 AM)Nazy.- escribió: Insecure Pide ayuda en Pedido de Plugins, aca suben son scripting u otras cosas

PDT: ¿Que carajo es [FGAMING]? Trolleyes

yo estoy hay no se porque me burlo :'v * o estube * Trolleyes

Demonios este tipo ya es pesadisimo CARAJO CUANDO LE DARÁN BAN JODER Insecure

ESTA SECCIÓN ES PARA HACER PREGUNTAS SOBRE TUS PLUGINS, PEDIDOS ES PARA """"""""PEDIRRRRR PLUGINSSS"""""""" DEJA DE COMENTAR COSAS INSERVIBLES JODER

Por eso se llama scripting, aqui haces preguntas sobre tus plugins, por eso te dije que vinieras aqui, en vez de llenar la seccion de plugins nuevos, aportes y tutoriales, de tus basura joder.
Si no te gusta algo, cámbialo. Si no lo puedes cambiar, cambia la forma en que piensas sobre ello <3
Responder
#5
bump x2

mas de 2 semanas xd, no ban pls
[Imagen: EvoLogo.png.fbcccbc49fb32e6a4bf8f5e72d80c317.png]
nalgas

(03/08/2018, 03:13 PM)Skylar escribió: Está bien que pidas ayudas, pero no para que crees 20 post todos los días mogolico de mierda, me tenes re podrido ya, contraté 10000 sicarios para que te busquen y te maten toda la familia, y a vos que te revienten con una bazooka.
Responder
#6
Código PHP:
if (fvault_get_data(g_db_datosg_buffer[id], g_datacharsmax(g_data)))
    {
        new 
STEAMID[32], AUTOLOG[3]
        
parse(g_dataAUTOLOGcharsmax(AUTOLOG), STEAMIDcharsmax(STEAMID))
        
g_AutoLogueo[id] = str_to_num(AUTOLOG)
        
g_SteamID[id] = STEAMID
            
        
return;
    } 
Antes de hacer el parse imprimí g_data y luego de haberlo hecho imprimí Steamid y autolog. Y pone los resultados
Responder
#7
(20/07/2018, 01:02 AM)Exertency escribió:
Código PHP:
if (fvault_get_data(g_db_datosg_buffer[id], g_datacharsmax(g_data)))
    {
        new 
STEAMID[32], AUTOLOG[3]
        
parse(g_dataAUTOLOGcharsmax(AUTOLOG), STEAMIDcharsmax(STEAMID))
        
g_AutoLogueo[id] = str_to_num(AUTOLOG)
        
g_SteamID[id] = STEAMID
            
        
return;
    } 
Antes de hacer el parse imprimí g_data y luego de haberlo hecho imprimí Steamid y autolog. Y pone los resultados

Hice esto:
Código PHP:
public checkautolog(id)
{
    
formatex(g_buffer[id], charsmax(g_buffer[]), "%d"id_personaje(id))
    
// Cargar datos (Si existen)
    
if (fvault_get_data(g_db_datosg_buffer[id], g_datacharsmax(g_data)))
    {
        new 
STEAMID[32], AUTOLOG[3]
        
parse(g_dataAUTOLOGcharsmax(AUTOLOG), STEAMIDcharsmax(STEAMID))
        
g_AutoLogueo[id] = str_to_num(AUTOLOG)
        
g_SteamID[id] = STEAMID
        client_print
(idprint_console"%s"g_data)            
        return;
    }

    if(
g_AutoLogueo[id])
    {
        if(
equal(g_SteamID[id], g_UserSteam[id]))
        {
            
CargarCuenta(id);
            
menu_personajes(id)
        }
    }
    else
        
set_task(0.2"menu_registro"id)



Pero no muestra nada

EDIT: ya lei bien tu mensaje, ya pruebo
EDIT2:
Código PHP:
public checkautolog(id)
{
    
formatex(g_buffer[id], charsmax(g_buffer[]), "%d"id_personaje(id))
    
// Cargar datos (Si existen)
    
if (fvault_get_data(g_db_datosg_buffer[id], g_datacharsmax(g_data)))
    {
        
client_print(idprint_console"%s"g_data)            
        
client_print(idprint_console"%s"g_buffer[id])            
        
client_print(idprint_chat"Tu SteamID Guardada es: %s"g_SteamID[id])
        
client_print(idprint_chat"Tu SteamID Actual es: %s"g_UserSteam[id])                   
        new 
STEAMID[32], AUTOLOG[3]
        
parse(g_dataAUTOLOGcharsmax(AUTOLOG), STEAMIDcharsmax(STEAMID))
        
g_AutoLogueo[id] = str_to_num(AUTOLOG)
        
g_SteamID[id] = STEAMID
        
return;
    }

    if(
g_AutoLogueo[id])
    {
        if(
equal(g_SteamID[id], g_UserSteam[id]))
        {
            
CargarCuenta(id);
            
menu_personajes(id)
        }
    }
    else
        
set_task(0.2"menu_registro"id)


Aun no aparece nada.
[Imagen: EvoLogo.png.fbcccbc49fb32e6a4bf8f5e72d80c317.png]
nalgas

(03/08/2018, 03:13 PM)Skylar escribió: Está bien que pidas ayudas, pero no para que crees 20 post todos los días mogolico de mierda, me tenes re podrido ya, contraté 10000 sicarios para que te busquen y te maten toda la familia, y a vos que te revienten con una bazooka.
Responder
#8
Hace lo mismo en CargarDatos(id) entonces.
Pero sólo imprimí g_data.
Por lo que entendi cuando haces el parse en CargarDatos, que haces para todas las variables de exp, aps, etc, también tenés que hacerlo para el Steamid ahí. Osea..
Código PHP:
parse(g_dataLVLEXPRRAPAutoLogSteamId
Agregándole el charsmax de cada variable obviamente.

PD: El tamaño de steam id tiene que ser 35, como en la variable global
Responder
#9
(20/07/2018, 11:46 AM)Exertency escribió: Hace lo mismo en CargarDatos(id) entonces.
Pero sólo imprimí g_data.
Por lo que entendi cuando haces el parse en CargarDatos, que haces para todas las variables de exp, aps, etc, también tenés que hacerlo para el Steamid ahí. Osea..
Código PHP:
parse(g_dataLVLEXPRRAPAutoLogSteamId
Agregándole el charsmax de cada variable obviamente.

PD: El tamaño de steam id tiene que ser 35, como en la variable global

Código PHP:
25 25096 0 61776 1 STEAM_0:0:176004727 

Ya se ve que lo guarda, ahora como seria para hacer funcionar el autolog?
[Imagen: EvoLogo.png.fbcccbc49fb32e6a4bf8f5e72d80c317.png]
nalgas

(03/08/2018, 03:13 PM)Skylar escribió: Está bien que pidas ayudas, pero no para que crees 20 post todos los días mogolico de mierda, me tenes re podrido ya, contraté 10000 sicarios para que te busquen y te maten toda la familia, y a vos que te revienten con una bazooka.
Responder
#10
Toma usa esta función y en check_autolog solamente deja la parte de if(g_AutoLogueo....
Código PHP:
CargarDatos(id)
{
    if (
personaje(id))
    {
        
formatex(g_buffer[id], charsmax(g_buffer[]), "%d"id_personaje(id))
    
        
// Cargar datos (Si existen)
        
if (fvault_get_data(g_db_datosg_buffer[id], g_datacharsmax(g_data)))
        {
            new 
LVL[9], EXP[12], RR[4], AP[16], AutoLog[3], SteamID[35];
            
parse(g_dataLVLcharsmax(LVL), EXPcharsmax(EXP), RRcharsmax(RR), APcharsmax(AP), AutoLogcharsmax(AutoLog), SteamIDcharsmax(SteamID));
            
kNivel[id] = str_to_num(LVL)
            
kExp[id] = str_to_num(EXP)
            
kReset[id] = str_to_num(RR)
            
g_ammopacks[id] = str_to_num(AP)
            
g_AutoLogueo[id] = str_to_num(AutoLog);
            
g_SteamID[id] = SteamID;
            return;
        }
    }
    
     
// No se cargaron datos, es un usuario nuevo o un invitado.
    
kNivel[id] = 1
    kReset
[id] = 0
    kExp
[id] = 0
    g_ammopacks
[id] = 75

Responder
#11
(20/07/2018, 12:45 PM)Exertency escribió: Toma usa esta función y en check_autolog solamente deja la parte de if(g_AutoLogueo....
Código PHP:
CargarDatos(id)
{
    if (
personaje(id))
    {
        
formatex(g_buffer[id], charsmax(g_buffer[]), "%d"id_personaje(id))
    
        
// Cargar datos (Si existen)
        
if (fvault_get_data(g_db_datosg_buffer[id], g_datacharsmax(g_data)))
        {
            new 
LVL[9], EXP[12], RR[4], AP[16], AutoLog[3], SteamID[35];
            
parse(g_dataLVLcharsmax(LVL), EXPcharsmax(EXP), RRcharsmax(RR), APcharsmax(AP), AutoLogcharsmax(AutoLog), SteamIDcharsmax(SteamID));
            
kNivel[id] = str_to_num(LVL)
            
kExp[id] = str_to_num(EXP)
            
kReset[id] = str_to_num(RR)
            
g_ammopacks[id] = str_to_num(AP)
            
g_AutoLogueo[id] = str_to_num(AutoLog);
            
g_SteamID[id] = SteamID;
            return;
        }
    }
    
     
// No se cargaron datos, es un usuario nuevo o un invitado.
    
kNivel[id] = 1
    kReset
[id] = 0
    kExp
[id] = 0
    g_ammopacks
[id] = 75


ok, deje la funcion de autologueo asi
Código PHP:
public checkautolog(id)
{
    
/*new xxxx[32];
    get_user_authid(id, xxxx, charsmax(xxxx));*/

    
if(g_AutoLogueo[id])
    {
        if(
equal(g_SteamID[id], g_UserSteam[id]))
        {
            
CargarCuenta(id);
            
menu_personajes(id)
        }
    }
    else
        
set_task(0.2"menu_registro"id)


parece que si funciona, pero no carga la cuenta, osea, cuando se entra al server, no muestra el menu ni nada
[Imagen: EvoLogo.png.fbcccbc49fb32e6a4bf8f5e72d80c317.png]
nalgas

(03/08/2018, 03:13 PM)Skylar escribió: Está bien que pidas ayudas, pero no para que crees 20 post todos los días mogolico de mierda, me tenes re podrido ya, contraté 10000 sicarios para que te busquen y te maten toda la familia, y a vos que te revienten con una bazooka.
Responder
#12
Y cual es la función cargar_cuenta y menu_personajes? Whatever
Responder
#13
(20/07/2018, 01:08 PM)Exertency escribió: Y cual es la función cargar_cuenta y menu_personajes? Whatever

Código PHP:
CargarCuenta(id)
{
    new 
i;
    
    
g_bLogueado |= (<< id-1);
    
g_bInvitado &= ~(<< id-1);
    
g_data[0] = g_buffer[id][0] = EOS;
    
personaje(id) = 0;
    
formatex(g_buffer[id], charsmax(g_buffer[]), "%d"g_userid[id]);
    
    if (
fvault_get_data(g_db_pjg_buffer[id], g_datacharsmax(g_data)))
    {
        
// No puedo usar parse() porque la cantidad de personajes es dinamica
        // Este bucle es un reemplazo de parse
        
new bool:temp falsestart 00strlen(g_data);
        
        for (
0ci++)
        {
            if (
g_data[i] != '"')
                continue;
            
            if (!
temp)
            {
                
start i+1;
                
temp true;
                continue;
            }
            
            
temp falseb++;
            
            if (
g_data[i-1] != '"')
            {
                
g_data[i] = EOS;
                
copy(g_nombre[id][b], charsmax(g_nombre[][]), g_data[start]);
            }
            else
                
g_nombre[id][b][0] = EOS;
        }
        
        return;
    }
    
    for (
1<= CANTIDAD_PERSONAJESi++)
        
g_nombre[id][i][0] = EOS;


Código PHP:
menu_personajes(idpag 0)
{
    
formatex(g_msgcharsmax(g_msg), "%s^nCuentas creadas:\r %d^n^n\yCuenta: \r%s"PLUGINXg_lastuseridg_nombre[id][0]);
    
    
#if CANTIDAD_PERSONAJES > 7
    
add(g_msgcharsmax(g_msg), "^n\yPagina:\r"12);
    
#endif
    
    
new menu menu_create(g_msg"handler_personaje");
    
    for (new 
1<= CANTIDAD_PERSONAJESi++)
    {
        if (
g_nombre[id][i][0])
            
formatex(g_msgcharsmax(g_msg), "%s%s"personaje(id) == "\yRegresar al Juego \r[En Uso]\d " ""g_nombre[id][i]);
        else
            
formatex(g_msgcharsmax(g_msg), "Crear Personaje \y[Slot %d Disponible]"i);
        
        
menu_additem(menug_msg);
    }
    
    
#if CANTIDAD_PERSONAJES > 7
    
menu_setprop(menuMPROP_BACKNAME"Anterior");
    
menu_setprop(menuMPROP_NEXTNAME"Siguiente^n");
    
#else
    
menu_setprop(menuMPROP_PERPAGECANTIDAD_PERSONAJES);
    
#endif

    
formatex(g_msgcharsmax(g_msg),"%sAutologueo \d[\r%s\d]"player_logueado(id) ?"\w":"\d"g_AutoLogueo[id]?"SI":"NO")
    
menu_additem(menug_msg);
    
    
menu_setprop(menuMPROP_EXITNAME"Desloguear \yCuenta");
    
menu_display(idmenupag);
}

public 
handler_personaje(idmenuitem)
{
    if (
item == MENU_EXIT)
    {
        if (
is_user_connected(id))
        {
            if (
personaje(id))
            {
                if (
is_user_alive(id))
                    
dllfunc(DLLFunc_ClientKillid);
                
                
GuardarDatos(id);
                
cs_set_user_team(idCS_TEAM_UNASSIGNED);
            }
            
            
formatex(g_msgcharsmax(g_msg), "Te has deslogueado.");
            
send_message(id);
            
            
menu_registro(id);
        }
        
        
ResetearVariables(id);
        
        
menu_destroy(menu);
        return 
PLUGIN_HANDLED;
    }
    
    if (++
item == personaje(id))
    {
        
menu_destroy(menu);
        return 
PLUGIN_HANDLED;
    }
    if(
item == 6)
    {
        if(
player_logueado(id)) {
            if(
g_AutoLogueo[id]) {
                
g_AutoLogueo[id] = 0
                menu_personajes
(id)
            } else {
                
g_AutoLogueo[id] = 1
                menu_personajes
(id)
            }
        } else {
            
client_print(idprint_center"No puedes elegir esta opcion");
            return 
PLUGIN_HANDLED;
        }
    }    
    if (
<= item <= CANTIDAD_PERSONAJES)
    {
        if (
g_nombre[id][item][0])
        {
            
set_user_info(id"name"g_nombre[id][item]);
            
g_data[0] = EOS;
            
personaje(id) = item;
            
CargarDatos(id);
            
            
set_pdata_int(id125, (get_pdata_int(id125) & ~(<< 8)));
            
//client_cmd(id, "jointeam%s", get_pcvar_num(cvar_jointeam) ? "" : " 5");
            
ForceJoinTeam(id)

            
formatex(g_msgcharsmax(g_msg), "Bienvenido, %s.^nDisfruta tu estadia."g_nombre[id][item]);
            
send_message(id);
            
            if (
get_pcvar_num(cvar_saylog))
            {
                
formatex(g_msgcharsmax(g_msg), "^x04[ZP]^x01 Ha entrado^x04 %s"g_nombre[id][item]);
                
connect_message(id);
            }
        }
        else
        {
            if (
personaje(id))
            {
                if (
is_user_alive(id))
                    
dllfunc(DLLFunc_ClientKillid);
                
                
GuardarDatos(id);
                
cs_set_user_team(idCS_TEAM_UNASSIGNED);
                
                
personaje(id) = 0;
            }
            
            
player_buffer(id) = item;
            
get_user_info(id"name"g_buffer[id], charsmax(g_buffer[]));
            
formatex(g_msgcharsmax(g_msg), "\y%s^n\yCrear Personaje en Slot %d ?^nNombre: \r%s"PLUGINXitemg_buffer[id]);
            new 
pmenu menu_create(g_msg"creando_personaje");
            
            
menu_additem(pmenu"\ySi,\w crear personaje");
            
menu_additem(pmenu"\rNo,\w usare otro nombre");
            
menu_setprop(pmenuMPROP_EXITMEXIT_NEVER);
            
menu_display(idpmenu);
        }
    }
    
    
menu_destroy(menu);
    return 
PLUGIN_HANDLED;


de todas maneras uso este: https://amxmodx-es.com/Thread-Sistema-de...Personajes
[Imagen: EvoLogo.png.fbcccbc49fb32e6a4bf8f5e72d80c317.png]
nalgas

(03/08/2018, 03:13 PM)Skylar escribió: Está bien que pidas ayudas, pero no para que crees 20 post todos los días mogolico de mierda, me tenes re podrido ya, contraté 10000 sicarios para que te busquen y te maten toda la familia, y a vos que te revienten con una bazooka.
Responder
#14
Código PHP:
if(equal(g_SteamID[id], g_UserSteam[id]) 
Fíjate esa condición, imprimí ambas variables y revisa que sean exactamente iguales.
Responder
#15
(20/07/2018, 03:39 PM)Exertency escribió:
Código PHP:
if(equal(g_SteamID[id], g_UserSteam[id]) 
Fíjate esa condición, imprimí ambas variables y revisa que sean exactamente iguales.

Si lo son.
[Imagen: EvoLogo.png.fbcccbc49fb32e6a4bf8f5e72d80c317.png]
nalgas

(03/08/2018, 03:13 PM)Skylar escribió: Está bien que pidas ayudas, pero no para que crees 20 post todos los días mogolico de mierda, me tenes re podrido ya, contraté 10000 sicarios para que te busquen y te maten toda la familia, y a vos que te revienten con una bazooka.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)