Bug Adv_vault
#1
Buenos dias, estoy utilizando el sistema de cuentas adv vault de cs axel como plugin externo, y lo estoy utilizando con un zp 4.2 que tambien adapte a adv vault, el problema es que con el zp manejo 10 tablas y cuando utilizo solo 3 tablas no me tira ningun error pero cuando supero las 3 tablas se bugea con el sistema de cuentas...
me tira estos errores que desconozco por que podrian ser Whatdone


Código PHP:
08/27/2022 11:29:18ERROR Invalid VaultIndex0
08/27/2022 11:29:18: [AMXXRun time error 10 (plugin "sys_accounts.amxx") (native "adv_vault_get_prepare") - debug not enabled!
08/27/2022 11:29:18: [AMXXTo enable debug modeadd "debug" after the plugin name in plugins.ini (without quotes).
08/27/2022 11:29:18ERROR Invalid VaultIndex0
08/27/2022 11:29:18: [AMXXRun time error 10 (plugin "sys_accounts.amxx") (native "adv_vault_get_prepare") - debug not enabled!
08/27/2022 11:29:18: [AMXXTo enable debug modeadd "debug" after the plugin name in plugins.ini (without quotes).
08/27/2022 11:29:19ERROR Invalid VaultIndex0
08/27/2022 11:29:19: [AMXXRun time error 10 (plugin "sys_accounts.amxx") (native "adv_vault_get_prepare") - debug not enabled!
08/27/2022 11:29:19: [AMXXTo enable debug modeadd "debug" after the plugin name in plugins.ini (without quotes). 
Aporte(?
Discord: leo$#9073
Responder
#2
(27/08/2022, 11:30 AM)aramayo123 escribió: Buenos dias, estoy utilizando el sistema de cuentas adv vault de cs axel como plugin externo, y lo estoy utilizando con un zp 4.2 que tambien adapte a adv vault, el problema es que con el zp manejo 10 tablas y cuando utilizo solo 3 tablas no me tira ningun error pero cuando supero las 3 tablas se bugea con el sistema de cuentas...
me tira estos errores que desconozco por que podrian ser Whatdone


Código PHP:
08/27/2022 11:29:18ERROR Invalid VaultIndex0
08/27/2022 11:29:18: [AMXXRun time error 10 (plugin "sys_accounts.amxx") (native "adv_vault_get_prepare") - debug not enabled!
08/27/2022 11:29:18: [AMXXTo enable debug modeadd "debug" after the plugin name in plugins.ini (without quotes).
08/27/2022 11:29:18ERROR Invalid VaultIndex0
08/27/2022 11:29:18: [AMXXRun time error 10 (plugin "sys_accounts.amxx") (native "adv_vault_get_prepare") - debug not enabled!
08/27/2022 11:29:18: [AMXXTo enable debug modeadd "debug" after the plugin name in plugins.ini (without quotes).
08/27/2022 11:29:19ERROR Invalid VaultIndex0
08/27/2022 11:29:19: [AMXXRun time error 10 (plugin "sys_accounts.amxx") (native "adv_vault_get_prepare") - debug not enabled!
08/27/2022 11:29:19: [AMXXTo enable debug modeadd "debug" after the plugin name in plugins.ini (without quotes). 
Distribuye las tablas, en una solo guarda 4 columnas en la otra 4 mas y por ultimo las 2 restantes
Pawn Básico no critiquen xD  Approved

Responder
#3
(27/08/2022, 01:02 PM)Meliodas escribió: Distribuye las tablas, en una solo guarda 4 columnas en la otra 4 mas y por ultimo las 2 restantes

Sucede que son demaciados datos para guardar, me arme un sistema de armas con niveles, eso me da un total de 1500 datos que guardar en total, por eso necesito todas las tablas
Aporte(?
Discord: leo$#9073
Responder
#4
(27/08/2022, 02:16 PM)aramayo123 escribió: Sucede que son demaciados datos para guardar, me arme un sistema de armas con niveles, eso me da un total de 1500 datos que guardar en total, por eso necesito todas las tablas

Te recomiendo que uses Sqlite si son muchos datos los que guardas es tu mejor opcion

https://amxmodx-es.com/Thread-Tutorial-sobre-sqlite
https://amxmodx-es.com/Thread-Gu%C3%ADa-...tas-SQLite
Pawn Básico no critiquen xD  Approved

Responder
#5
(27/08/2022, 02:16 PM)aramayo123 escribió: Sucede que son demaciados datos para guardar, me arme un sistema de armas con niveles, eso me da un total de 1500 datos que guardar en total, por eso necesito todas las tablas

1500 DATOS? Roflmao
[Imagen: bvpq9q-6.png]

NO DOY AYUDA VIA MENSAJE PRIVADO

* Si requieres algún servicio de pago puedes contactarme vía MP o en mi facebook
Responder
#6
(27/08/2022, 03:28 PM)kikizon2 escribió: 1500 DATOS?  Roflmao

si jajaj pero como soy noob los hice como arrays separados, estoy haciendo un sistema de nuevo y lo estoy haciendo con enums
me ayudas acomo puedo guardar esto?

Código PHP:
enum _:structWeapon {
    
NAME[999],
    
NIVEL,
    
KILLS,
    
DAMAGE,
    
PUNTOS,
    
PUNTOSG,
    
HABILIDAD[7]
}

new 
g_weapons[32][42][structWeapon

intente poniendo esto

en plugin_init 
Código PHP:
// WEAPONS TABLE
    
g_vault4 adv_vault_open("[ZP] Weapons"false)
    
g_campos[CAMPO_WEAPON_0] = adv_vault_register_field(g_vault4"WEAPON 0"DATATYPE_ARRAY7),
    
adv_vault_init(g_vault4

en mi funcion guardar
Código PHP:
// WEAPONS
    
adv_vault_set_start(g_vault4);
    
adv_vault_set_field(g_vault4g_campos[CAMPO_WEAPON_0], g_weapons[id][0]);
    
adv_vault_set_end(g_vault40g_cuenta[id]) 

y en cargar
Código PHP:
// WEAPONS
    
if(!adv_vault_get_prepare(g_vault4_g_cuenta[id])) return;
    
g_weapons[id][0] = adv_vault_get_field(g_vault4g_campos[CAMPO_WEAPON_0], sizeof g_weapons[id][0][]); 
esto esta mal obvio, pero estooy probando, no se como podria guardar el enum pero por ahi va?
Aporte(?
Discord: leo$#9073
Responder
#7
Usa sqlite es mejor y no se te va a bugear
___________________________________
SI NECESITAS UN PLUGIN TE LO HAGO $$$
COMUNICATE A MI DISCORD: emanuelitop15
Responder
#8
(27/08/2022, 08:14 PM)[E]manuelitop15 escribió: Usa sqlite es mejor y no se te va a bugear
Apenas se adv_vault me va a costar aprender sqlite pero gracias, si no logro hacer funcionar esto me paso a sqlite
Aporte(?
Discord: leo$#9073
Responder
#9
mira, uses lo que uses si no sabes usarlo se va a bugear Whatever
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder
#10
(27/08/2022, 09:13 PM)Hinami escribió: mira, uses lo que uses si no sabes usarlo se va a bugear Whatever

bueno estoy intentando aprender Oh god why
Aporte(?
Discord: leo$#9073
Responder
#11
(27/08/2022, 10:36 PM)aramayo123 escribió: bueno estoy intentando aprender Oh god why

Te dejo un sistema de cuentas que hice con soporte externo al zp 4.3 (guarda la clase zombie y los ammopacks).
También un tutorial de sqlite para que aprendas a usarlo: https://amxmodx-es.com/Thread-Tutorial-sobre-sqlite

PD: si siempre tenes que tener activado el modulo sql o mysql dependiendo cual vayas a ocupar...

Código PHP:
/* Sistema de Cuentas - MySql */
/* Soporte para ZP 4.3 */
/* Creado por: Emanuelitop15 */

#include <amxmodx>
#include <amxmisc>
#include <sqlx>
#include <fakemeta>

#define PREFIJO "^4[^3sis. de cuentas^4]^1"

#define SOPORTE_ZP43 // Descomentar esto para usar como sistema de cuentas normal

#if defined SOPORTE_ZP43
#include <zombieplague>

#define g_ammopacks(%1) zp_get_user_ammo_packs(%1)
#define g_clase_zm(%1) zp_get_user_zombie_class(%1)

#else

#include <cstrike>
#endif

// Messages modes
new const szmsg_ingresar_cuenta[] = "INGRESAR_CONTRASENA";
new const 
szmsg_crear_cuenta[] = "CREAR_CONTRASENA";

// Base de Datos
//#define MYSQL // Descomentar para usar Sqlite (local)

// Nombre de la base de datos local
#if !defined MYSQL
#define SQL_HOST_LOCAL "DB_sis_de_cuentas"
#endif

enum __data_db
{
    
SQL_HOST[32],
    
SQL_USUARIO[32],
    
SQL_CONTRASENA[32],
    
SQL_DATABASE[32],
    
SQL_TIMEOUT
};

new const 
db_data[_data_db] =
{
    
"host",
    
"usuario",
    
"contrasena",
    
"db",
    
0
};

// Tablas
new const tabla_principal[] = "sdcUSUARIOS";

// Data del Usuario
enum __data_usuario
{
    
USUARIO_NOMBRE[32],
    
USUARIO_AUTHID[32],
    
USUARIO_PW[32],
    
USUARIO_AUTOLOGUEO
};

// Variables
new boolg_logueado[MAX_PLAYERS+1];
new 
g_usuario_data[MAX_PLAYERS+1][_data_usuario];
new 
cvar_oncvar_autologueo;
new 
g_msg_vguig_msg_showmenu;
new 
Handleg_sqltupleHandleg_sqlconexion;

/*-*/
new const SIMBOLOS_NO_PERMITIDOS[][] = { "+""-""_""/""\", ".", ",", "<", ">", "*", "´", "`", "=", "(", ")", "%" };
/**/

// ---------------------------------------------------------------------------
public plugin_init()
{
    register_plugin("Sis. Cuentas MYSQL + ZP4.3", "1.0", "Emanuelitop15");

    register_event("HLTV", "ev_inicio_de_ronda", "a", "1=0", "2=0");
    register_forward(FM_ClientUserInfoChanged, "fw_informacion_del_cliente");

    g_msg_vgui = get_user_msgid("VGUIMenu");
    g_msg_showmenu = get_user_msgid("ShowMenu");
    register_message(g_msg_vgui, "message_VGUImenu");
    register_message(g_msg_showmenu, "message_SHOWmenu");

    register_clcmd("chooseteam", "clcmd_blockequipos");
    register_clcmd("jointeam", "clcmd_blockequipos");

    register_clcmd(szmsg_crear_cuenta, "clcmd_crear_cuenta");
    register_clcmd(szmsg_ingresar_cuenta, "clcmd_ingresar_cuenta");

    register_clcmd("say /autologueo", "clcmd_autologueo");

    cvar_on = register_cvar("sdc_activado", "1");
    cvar_autologueo = register_cvar("sdc_autologueo", "1");

    if (get_pcvar_num(cvar_on)) SQL_INICIAR();
    else log_amx("Sistema de Cuentas MYSQL: DESACTIVADO");
}

public ev_inicio_de_ronda()
{
    if (!get_pcvar_num(cvar_on)) return;
    
    for (new ids = 1; ids <= MAX_PLAYERS; ids++)
    guardar_datos(ids);
}

public fw_informacion_del_cliente(id, buffer)
{    
    if (!is_user_connected(id))
        return FMRES_IGNORED;

    static sz_nombre_actual[32], sz_nombre_nuevo[32];
    get_user_name(id, sz_nombre_actual, charsmax(sz_nombre_actual));
    engfunc(EngFunc_InfoKeyValue, buffer, "name", sz_nombre_nuevo, charsmax(sz_nombre_nuevo));

    if (equal(sz_nombre_nuevo, sz_nombre_actual))
        return FMRES_IGNORED;

    if (get_pcvar_num(cvar_on))
    {
        engfunc(EngFunc_SetClientKeyValue, id, buffer, "name", sz_nombre_actual);
        client_cmd(id, "name ^"%s^"", g_usuario_data[id][USUARIO_NOMBRE]);

        client_print(id, print_console, "No te podes cambiar el nombre")
        return FMRES_IGNORED;
    }
    
    return FMRES_SUPERCEDE;
}

public message_VGUImenu(msg_id, msg_dest, id)
{
    if (get_msg_arg_int(1) != 2)
        return PLUGIN_CONTINUE;

    if (get_pcvar_num(cvar_on) && !g_logueado[id])
    {
        return PLUGIN_HANDLED;
    }        

    return PLUGIN_CONTINUE;
}

public message_SHOWmenu(msg_id, msg_dest, id)
{
    if (!get_pcvar_num(cvar_on) || g_logueado[id])
        return PLUGIN_CONTINUE;    

    static text[18];
    get_msg_arg_string(4, text, charsmax(text));

    if (containi(text, "Team_Select") != -1)
        return PLUGIN_HANDLED;    

    return PLUGIN_HANDLED;        
}

public clcmd_autologueo(id)
{
    if (!is_user_connected(id) || !g_logueado[id] || !get_pcvar_num(cvar_on) || !get_pcvar_num(cvar_autologueo))
        return PLUGIN_HANDLED;

    g_usuario_data[id][USUARIO_AUTOLOGUEO] = !g_usuario_data[id][USUARIO_AUTOLOGUEO];
    client_print_color(id, 0, "%s El autologueo de tu cuenta ha sido:^4 %s^1.", PREFIJO, g_usuario_data[id][USUARIO_AUTOLOGUEO] ? "ACTIVADO" : "DESACTIVADO");
    return PLUGIN_HANDLED;
}

public clcmd_blockequipos(id)
{
    if (!is_user_connected(id) || !get_pcvar_num(cvar_on))
        return PLUGIN_CONTINUE;    

    if (!g_logueado[id])
    {
        menu_cuentas(id);        
        return PLUGIN_HANDLED;
    }

    return PLUGIN_CONTINUE;
}

public clcmd_crear_cuenta(id)
{
    if (g_logueado[id]) return PLUGIN_HANDLED;

    read_args(g_usuario_data[id][USUARIO_PW], charsmax(g_usuario_data[][USUARIO_PW]));
    remove_quotes(g_usuario_data[id][USUARIO_PW]);
    trim(g_usuario_data[id][USUARIO_PW]);

    if (equal(g_usuario_data[id][USUARIO_PW], "") || containi(g_usuario_data[id][USUARIO_PW], " ") != -1)
    {
        client_print_color(id, 0, "%s Tu^3 contraseña^1 esta en blanco o contiene errores, recuerda no usar simbolos ni acentos!", PREFIJO);
        menu_cuentas(id);
        return PLUGIN_HANDLED;
    }

    for (new i = 0; i < sizeof (SIMBOLOS_NO_PERMITIDOS); i++)
    {
        if (containi(g_usuario_data[id][USUARIO_PW], SIMBOLOS_NO_PERMITIDOS[i]) != -1)
        {
            client_print_color(id, 0, "%s Tu^3 contraseña^1 contiene simbolos que no estan permitidos!", PREFIJO);
            menu_cuentas(id);
            return PLUGIN_HANDLED;
        }
    }

    if (equal(g_usuario_data[id][USUARIO_PW], g_usuario_data[id][USUARIO_NOMBRE]))
    {
        client_print_color(id, 0, "%s Tu^3 contraseña^1 es igual que tu^3 nombre^1, create una diferente.", PREFIJO);
        menu_cuentas(id);
        return PLUGIN_HANDLED;
    }

    if (strlen(g_usuario_data[id][USUARIO_PW]) < 3)
    {
        client_print_color(id, 0, "%s Tu^3 contraseña^1 es muy corta, tiene que contener 3 o mas caracteres.", PREFIJO);
        menu_cuentas(id);
        return PLUGIN_HANDLED;
    }
    
    if (strlen(g_usuario_data[id][USUARIO_PW]) >= 10)
    {
        client_print_color(id, 0, "%s Tu^3 contraseña^1 es demasiado larga, acortala e intenta otra vez.", PREFIJO);
        menu_cuentas(id);
        return PLUGIN_HANDLED;
    }

    if (!check_registrado(id)) registrar_cuenta(id);
    else client_print_color(id, 0, "%s Al parecer ya estas registrado, no te puedes crear una cuenta con el mismo nombre.", PREFIJO);
    
    return PLUGIN_HANDLED;
}

public clcmd_ingresar_cuenta(id)
{
    if (g_logueado[id]) return PLUGIN_HANDLED;

    read_args(g_usuario_data[id][USUARIO_PW], charsmax(g_usuario_data[][USUARIO_PW]));
    remove_quotes(g_usuario_data[id][USUARIO_PW]);
    trim(g_usuario_data[id][USUARIO_PW]);

    new Handle: query;
    query = SQL_PrepareQuery(g_sqlconexion, "SELECT Contrasena FROM ^"%s^" WHERE Usuario = ^"%s^"", tabla_principal, g_usuario_data[id][USUARIO_NOMBRE]);

    if (!SQL_Execute(query))
    {
        SQL_ERROR(query, tabla_principal, "clcmd_ingresar_cuenta(id)", g_usuario_data[id][USUARIO_NOMBRE]);
        client_print_color(id, 0, "%s Hubo un error en la base de datos, tu cuenta no se ha podido cargar...", PREFIJO);
        return false;
    }

    if (SQL_NumResults(query))
    {
        new szcontrasena[32];
        SQL_ReadResult(query, 0, szcontrasena, charsmax(szcontrasena));
        
        if (equali(g_usuario_data[id][USUARIO_PW], szcontrasena))
            cargar_datos(id, .omitir_autologueo = true);
        else
            client_print_color(id, 0, "%s La contraseña ingresada es incorrecta.", PREFIJO);

        SQL_FreeHandle(query);    
    }
    else
    {
        SQL_FreeHandle(query);    
        client_print_color(id, 0, "%s Hubo un error en la base de datos, tu cuenta no se ha podido cargar...", PREFIJO);
    }

    return PLUGIN_HANDLED;
}

public client_putinserver(id)
{
    if (!get_pcvar_num(cvar_on)) return;

    g_logueado[id] = false;

    for (new i = 0; i < _data_usuario; i++)
    {
        g_usuario_data[id][i] = EOS;
    }

    get_user_name(id, g_usuario_data[id][USUARIO_NOMBRE], charsmax(g_usuario_data[][USUARIO_NOMBRE]));
    get_user_authid(id, g_usuario_data[id][USUARIO_AUTHID], charsmax(g_usuario_data[][USUARIO_AUTHID]));

    if (contain(g_usuario_data[id][USUARIO_AUTHID], "ID") != -1 || contain(g_usuario_data[id][USUARIO_AUTHID], "VALVE") != -1)
        get_user_ip(id, g_usuario_data[id][USUARIO_AUTHID], charsmax(g_usuario_data[][USUARIO_AUTHID]));

    set_task(0.2, "cargar_datos_pre", id);
}

public client_disconnected(id)
{
    if (!get_pcvar_num(cvar_on)) return;

    guardar_datos(id);
}

public cargar_datos_pre(id)
{
    if (!is_user_connected(id)) return;
    cargar_datos(id, .omitir_autologueo = false);
}

cargar_datos(id, bool: omitir_autologueo = false)
{
    new Handle: query;
    query = SQL_PrepareQuery(g_sqlconexion, "SELECT * FROM ^"%s^" WHERE Usuario = ^"%s^"", tabla_principal, g_usuario_data[id][USUARIO_NOMBRE]);

    if (!SQL_Execute(query))
    {
        SQL_ERROR(query, tabla_principal, "cargar_datos(id)", g_usuario_data[id][USUARIO_NOMBRE]);
        return;
    }

    // Si encontramos resultados de la consulta le cargamos sus datos
    if (SQL_NumResults(query))
    {
        g_usuario_data[id][USUARIO_AUTOLOGUEO] = SQL_ReadResult(query, 2); /* Columna de 'Autologeo' */

        if (get_pcvar_num(cvar_autologueo) && check_autologueo(id) && g_usuario_data[id][USUARIO_AUTOLOGUEO] || omitir_autologueo)
            cargar_datos_post(id, query);
        else
        {
            client_cmd(id, "chooseteam");
            SQL_FreeHandle(query);
        }
    }
    else
        SQL_FreeHandle(query);
}

cargar_datos_post(id, Handle: query)
{
    // 0 - Nombre de la Cuenta
    SQL_ReadResult(query, 0, g_usuario_data[id][USUARIO_NOMBRE], charsmax(g_usuario_data[][USUARIO_NOMBRE]));
    set_user_info(id, "name", g_usuario_data[id][USUARIO_NOMBRE]);

    // 1 - Contrasena
    // SQL_ReadResult(query, 2, g_usuario_data[id][USUARIO_PW], charsmax(g_usuario_data[][USUARIO_PW]));

    // 2 - SteamID / IP
    // SQL_ReadResult(query, 1, g_usuario_data[id][USUARIO_AUTHID], charsmax(g_usuario_data[][USUARIO_AUTHID]));

    // 3 - Autologueo
    // g_usuario_data[id][USUARIO_AUTOLOGUEO] = SQL_ReadResult(query, 3);

    #if defined SOPORTE_ZP43
    // 4 - Ammopacks
    zp_set_user_ammo_packs(id, SQL_ReadResult(query, 4));

    // 5 - Clase Zombi
    zp_set_user_zombie_class(id, SQL_ReadResult(query, 5));

    #else
    // 4 - Dinero CS
    cs_set_user_money(id, SQL_ReadResult(query, 4));

    #endif

    SQL_FreeHandle(query);

    g_logueado[id] = true;
    client_cmd(id, "chooseteam");

    client_print_color(id, 0, "%s Felicitaciones jugador^3 %s^1 te has logueado exitosamente.", PREFIJO, g_usuario_data[id][USUARIO_NOMBRE]);
}

guardar_datos(id)
{
    if (!g_logueado[id]) return;

    new szdatos[451];
    static len; len = 0;

    len += formatex(szdatos[len], charsmax(szdatos) - len, "UPDATE ^"%s^" SET ", tabla_principal);

    #if defined SOPORTE_ZP43
    len += formatex(szdatos[len], charsmax(szdatos) - len, "Ammopacks = '%d', ", g_ammopacks(id));
    len += formatex(szdatos[len], charsmax(szdatos) - len, "ClaseZombie = '%d', ", g_clase_zm(id));
    #else
    len += formatex(szdatos[len], charsmax(szdatos) - len, "Dinero = '%d', ", cs_get_user_money(id));
    #endif

    len += formatex(szdatos[len], charsmax(szdatos) - len, "Autologueo = '%d' WHERE Usuario = ^"%s^"", g_usuario_data[id][USUARIO_AUTOLOGUEO], g_usuario_data[id][USUARIO_NOMBRE]);

    new Handle: query;
    query = SQL_PrepareQuery(g_sqlconexion, szdatos);

    if (!SQL_Execute(query))
    {
        SQL_ERROR(query, tabla_principal, "guardar_datos(id)", g_usuario_data[id][USUARIO_NOMBRE]);
        return;
    }

    SQL_FreeHandle(query);
}

registrar_cuenta(id)
{
    new Handle: query;
    query = SQL_PrepareQuery(g_sqlconexion, "INSERT INTO ^"%s^" (Usuario, SteamIDIP, Contrasena) VALUES (^"%s^", ^"%s^", ^"%s^")", tabla_principal, g_usuario_data[id][USUARIO_NOMBRE], g_usuario_data[id][USUARIO_AUTHID], g_usuario_data[id][USUARIO_PW]);

    if (!SQL_Execute(query))
    {
        SQL_ERROR(query, tabla_principal, "registrar_cuenta(id)", g_usuario_data[id][USUARIO_NOMBRE]);
        return;
    }

    SQL_FreeHandle(query);

    g_logueado[id] = true;
    client_cmd(id, "chooseteam");

    client_print_color(id, 0, "%s Felicitaciones jugador^3 %s^1 te has registrado exitosamente.", PREFIJO, g_usuario_data[id][USUARIO_NOMBRE]);
}

// -----------------
menu_cuentas(id)
{
    new menu;
    menu = menu_create("\rSistema de Cuentas MYSQL\y +\r Soporte ZP 4.3", "hdr_cuentas");

    menu_additem(menu, "Registrarse");
    menu_additem(menu, "Loguearse");

    menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER);
    menu_display(id, menu);
}
public hdr_cuentas(id, menuid, item)
{
    menu_destroy(menuid);

    if (!is_user_connected(id) || g_logueado[id])
        return PLUGIN_HANDLED;

    if (!item)
    {
        if (check_registrado(id))
        {
            menu_cuentas(id);
            client_print_color(id, 0, "%s Ya tienes una cuenta creada, elige la opción de^4 Loguearse^1.", PREFIJO);
            return PLUGIN_HANDLED;
        }

        client_cmd(id, "messagemode ^"%s^"", szmsg_crear_cuenta);
    }
    else if (item == 1)
    {
        if (!check_registrado(id))
        {
            menu_cuentas(id);
            client_print_color(id, 0, "%s No tienes una cuenta creada aún, elige la opción de^4 Registrarse^1.", PREFIJO);
            return PLUGIN_HANDLED;
        }

        client_cmd(id, "messagemode ^"%s^"", szmsg_ingresar_cuenta);
    }

    return PLUGIN_HANDLED;
}
// -----------------

SQL_INICIAR()
{
    new error, szerror[121];

    #if defined MYSQL
    g_sqltuple = SQL_MakeDbTuple(db_data[SQL_HOST], db_data[SQL_USUARIO], db_data[SQL_CONTRASENA], db_data[SQL_DATABASE], db_data[SQL_TIMEOUT]);

    if (!g_sqltuple) 
    {
        log_to_file("ERROR_SQL_CONEXION.txt", "No se pudo conectar a la base de datos...");
        return;
    }

    #else

    new get_tipo[12];
    SQL_SetAffinity("sqlite"); SQL_GetAffinity(get_tipo, sizeof (get_tipo));
    g_sqltuple = SQL_MakeDbTuple("", "", "", SQL_HOST_LOCAL);

    if (!equali(get_tipo, "sqlite"))
    {
        log_to_file("ERROR_SQL_CONEXION.txt", "No se pudo conectar a la base de datos...");
        return;
    }
    #endif

    g_sqlconexion = SQL_Connect(g_sqltuple, error, szerror, charsmax(szerror));

    if (g_sqlconexion == Empty_Handle)
        log_to_file("ERROR_SQL_CREAR_CONEXION.txt", "No se pudo crear la conexión a la base de datos...");
    else
        SQL_CREAR_TABLAS();
}

SQL_CREAR_TABLAS()
{
    new sztablas[1000];
    static len; len = 0;

    len += formatex(sztablas[len], charsmax(sztablas) - len, "CREATE TABLE IF NOT EXISTS 
`%s` (", tabla_principal);
    len += formatex(sztablas[len], charsmax(sztablas) - len, "Usuario varchar NOT NULL UNIQUE, ");
    len += formatex(sztablas[len], charsmax(sztablas) - len, "Contrasena varchar NOT NULL, ");
    len += formatex(sztablas[len], charsmax(sztablas) - len, "Autologueo int NOT NULL DEFAULT '1', ");

    #if defined SOPORTE_ZP43
    len += formatex(sztablas[len], charsmax(sztablas) - len, "SteamIDIP varchar NOT NULL, ");
    len += formatex(sztablas[len], charsmax(sztablas) - len, "Ammopacks int NOT NULL DEFAULT '0', ");
    len += formatex(sztablas[len], charsmax(sztablas) - len, "ClaseZombie int NOT NULL DEFAULT '0')");
    #else
    len += formatex(sztablas[len], charsmax(sztablas) - len, "SteamIDIP varchar NOT NULL, ");
    len += formatex(sztablas[len], charsmax(sztablas) - len, "Dinero int NOT NULL DEFAULT '0' )");
    #endif

    new Handle: query;
    query = SQL_PrepareQuery(g_sqlconexion, sztablas);

    if (!SQL_Execute(query))
        SQL_ERROR(query, tabla_principal, "SQL_CREAR_TABLAS()");
    else
        SQL_FreeHandle(query);
}

SQL_ERROR(Handle:query, const tabla[], const funcion[], const j[] = "")
{
    static error[56];
    SQL_QueryError(query, error, charsmax(error));

    if (strlen(j))
    {
        client_print_color(0, 0, "^4[SQL-ERROR]^1 - TABLA:^3 %s^1 - JUGADOR:^4 %s^1 | Error:^4 %s^1 | en la funcion:^4 %s^1", tabla, j, error, funcion);
        log_to_file("SQL_ERROR.txt", "[TABLA: %s] [JUGADOR: %s] ERROR %s | EN LA FUNCION: '%s'", tabla, j, error, funcion);
    }
    else
    {
        client_print_color(0, 0, "^4[SQL-ERROR]^1 - TABLA:^3 %s^1 | Error:^4 %s^1 | en la funcion:^4 %s^1", tabla, error, funcion);
        log_to_file("SQL_ERROR.txt", "[TABLA: %s] ERROR %s | EN LA FUNCION: '%s'", tabla, error, funcion);
    }

    SQL_FreeHandle(query);
}

stock check_autologueo(id)
{
    new Handle: query;
    query = SQL_PrepareQuery(g_sqlconexion, "SELECT * FROM ^"%s^" WHERE Usuario = ^"%s^" and SteamIDIP = ^"%s^"", tabla_principal, g_usuario_data[id][USUARIO_NOMBRE], g_usuario_data[id][USUARIO_AUTHID]);

    if (!SQL_Execute(query))
    {
        SQL_ERROR(query, tabla_principal, "check_autologueo(id)", g_usuario_data[id][USUARIO_NOMBRE]);
        return false;
    }

    if (SQL_NumResults(query))
    {
        SQL_FreeHandle(query);
        return true;
    }

    SQL_FreeHandle(query);
    return false;
}

stock check_registrado(id)
{
    new Handle: query;
    query = SQL_PrepareQuery(g_sqlconexion, "SELECT Usuario FROM ^"%s^" WHERE Usuario = ^"%s^"", tabla_principal, g_usuario_data[id][USUARIO_NOMBRE]);

    if (!SQL_Execute(query))
    {
        SQL_ERROR(query, tabla_principal, "check_registrado(id)", g_usuario_data[id][USUARIO_NOMBRE]);
        return false;
    }

    if (SQL_NumResults(query))
    {
        SQL_FreeHandle(query);
        return true;
    }

    SQL_FreeHandle(query);
    return false;
}

public plugin_end()
{
    SQL_FreeHandle(g_sqltuple);
    SQL_FreeHandle(g_sqlconexion);

___________________________________
SI NECESITAS UN PLUGIN TE LO HAGO $$$
COMUNICATE A MI DISCORD: emanuelitop15
Responder
#12
(28/08/2022, 02:31 AM)[E]manuelitop15 escribió: Te dejo un sistema de cuentas que hice con soporte externo al zp 4.3 (guarda la clase zombie y los ammopacks).
También un tutorial de sqlite para que aprendas a usarlo: https://amxmodx-es.com/Thread-Tutorial-sobre-sqlite

PD: si siempre tenes que tener activado el modulo sql o mysql dependiendo cual vayas a ocupar...

Código PHP:
/* Sistema de Cuentas - MySql */
/* Soporte para ZP 4.3 */
/* Creado por: Emanuelitop15 */

#include <amxmodx>
#include <amxmisc>
#include <sqlx>
#include <fakemeta>

#define PREFIJO "^4[^3sis. de cuentas^4]^1"

#define SOPORTE_ZP43 // Descomentar esto para usar como sistema de cuentas normal

#if defined SOPORTE_ZP43
#include <zombieplague>

#define g_ammopacks(%1) zp_get_user_ammo_packs(%1)
#define g_clase_zm(%1) zp_get_user_zombie_class(%1)

#else

#include <cstrike>
#endif

// Messages modes
new const szmsg_ingresar_cuenta[] = "INGRESAR_CONTRASENA";
new const 
szmsg_crear_cuenta[] = "CREAR_CONTRASENA";

// Base de Datos
//#define MYSQL // Descomentar para usar Sqlite (local)

// Nombre de la base de datos local
#if !defined MYSQL
#define SQL_HOST_LOCAL "DB_sis_de_cuentas"
#endif

enum __data_db
{
    
SQL_HOST[32],
    
SQL_USUARIO[32],
    
SQL_CONTRASENA[32],
    
SQL_DATABASE[32],
    
SQL_TIMEOUT
};

new const 
db_data[_data_db] =
{
    
"host",
    
"usuario",
    
"contrasena",
    
"db",
    
0
};

// Tablas
new const tabla_principal[] = "sdcUSUARIOS";

// Data del Usuario
enum __data_usuario
{
    
USUARIO_NOMBRE[32],
    
USUARIO_AUTHID[32],
    
USUARIO_PW[32],
    
USUARIO_AUTOLOGUEO
};

// Variables
new boolg_logueado[MAX_PLAYERS+1];
new 
g_usuario_data[MAX_PLAYERS+1][_data_usuario];
new 
cvar_oncvar_autologueo;
new 
g_msg_vguig_msg_showmenu;
new 
Handleg_sqltupleHandleg_sqlconexion;

/*-*/
new const SIMBOLOS_NO_PERMITIDOS[][] = { "+""-""_""/""\", ".", ",", "<", ">", "*", "´", "`", "=", "(", ")", "%" };
/**/

// ---------------------------------------------------------------------------
public plugin_init()
{
    register_plugin("Sis. Cuentas MYSQL + ZP4.3", "1.0", "Emanuelitop15");

    register_event("HLTV", "ev_inicio_de_ronda", "a", "1=0", "2=0");
    register_forward(FM_ClientUserInfoChanged, "fw_informacion_del_cliente");

    g_msg_vgui = get_user_msgid("VGUIMenu");
    g_msg_showmenu = get_user_msgid("ShowMenu");
    register_message(g_msg_vgui, "message_VGUImenu");
    register_message(g_msg_showmenu, "message_SHOWmenu");

    register_clcmd("chooseteam", "clcmd_blockequipos");
    register_clcmd("jointeam", "clcmd_blockequipos");

    register_clcmd(szmsg_crear_cuenta, "clcmd_crear_cuenta");
    register_clcmd(szmsg_ingresar_cuenta, "clcmd_ingresar_cuenta");

    register_clcmd("say /autologueo", "clcmd_autologueo");

    cvar_on = register_cvar("sdc_activado", "1");
    cvar_autologueo = register_cvar("sdc_autologueo", "1");

    if (get_pcvar_num(cvar_on)) SQL_INICIAR();
    else log_amx("Sistema de Cuentas MYSQL: DESACTIVADO");
}

public ev_inicio_de_ronda()
{
    if (!get_pcvar_num(cvar_on)) return;
    
    for (new ids = 1; ids <= MAX_PLAYERS; ids++)
    guardar_datos(ids);
}

public fw_informacion_del_cliente(id, buffer)
{    
    if (!is_user_connected(id))
        return FMRES_IGNORED;

    static sz_nombre_actual[32], sz_nombre_nuevo[32];
    get_user_name(id, sz_nombre_actual, charsmax(sz_nombre_actual));
    engfunc(EngFunc_InfoKeyValue, buffer, "name", sz_nombre_nuevo, charsmax(sz_nombre_nuevo));

    if (equal(sz_nombre_nuevo, sz_nombre_actual))
        return FMRES_IGNORED;

    if (get_pcvar_num(cvar_on))
    {
        engfunc(EngFunc_SetClientKeyValue, id, buffer, "name", sz_nombre_actual);
        client_cmd(id, "name ^"%s^"", g_usuario_data[id][USUARIO_NOMBRE]);

        client_print(id, print_console, "No te podes cambiar el nombre")
        return FMRES_IGNORED;
    }
    
    return FMRES_SUPERCEDE;
}

public message_VGUImenu(msg_id, msg_dest, id)
{
    if (get_msg_arg_int(1) != 2)
        return PLUGIN_CONTINUE;

    if (get_pcvar_num(cvar_on) && !g_logueado[id])
    {
        return PLUGIN_HANDLED;
    }        

    return PLUGIN_CONTINUE;
}

public message_SHOWmenu(msg_id, msg_dest, id)
{
    if (!get_pcvar_num(cvar_on) || g_logueado[id])
        return PLUGIN_CONTINUE;    

    static text[18];
    get_msg_arg_string(4, text, charsmax(text));

    if (containi(text, "Team_Select") != -1)
        return PLUGIN_HANDLED;    

    return PLUGIN_HANDLED;        
}

public clcmd_autologueo(id)
{
    if (!is_user_connected(id) || !g_logueado[id] || !get_pcvar_num(cvar_on) || !get_pcvar_num(cvar_autologueo))
        return PLUGIN_HANDLED;

    g_usuario_data[id][USUARIO_AUTOLOGUEO] = !g_usuario_data[id][USUARIO_AUTOLOGUEO];
    client_print_color(id, 0, "%s El autologueo de tu cuenta ha sido:^4 %s^1.", PREFIJO, g_usuario_data[id][USUARIO_AUTOLOGUEO] ? "ACTIVADO" : "DESACTIVADO");
    return PLUGIN_HANDLED;
}

public clcmd_blockequipos(id)
{
    if (!is_user_connected(id) || !get_pcvar_num(cvar_on))
        return PLUGIN_CONTINUE;    

    if (!g_logueado[id])
    {
        menu_cuentas(id);        
        return PLUGIN_HANDLED;
    }

    return PLUGIN_CONTINUE;
}

public clcmd_crear_cuenta(id)
{
    if (g_logueado[id]) return PLUGIN_HANDLED;

    read_args(g_usuario_data[id][USUARIO_PW], charsmax(g_usuario_data[][USUARIO_PW]));
    remove_quotes(g_usuario_data[id][USUARIO_PW]);
    trim(g_usuario_data[id][USUARIO_PW]);

    if (equal(g_usuario_data[id][USUARIO_PW], "") || containi(g_usuario_data[id][USUARIO_PW], " ") != -1)
    {
        client_print_color(id, 0, "%s Tu^3 contraseña^1 esta en blanco o contiene errores, recuerda no usar simbolos ni acentos!", PREFIJO);
        menu_cuentas(id);
        return PLUGIN_HANDLED;
    }

    for (new i = 0; i < sizeof (SIMBOLOS_NO_PERMITIDOS); i++)
    {
        if (containi(g_usuario_data[id][USUARIO_PW], SIMBOLOS_NO_PERMITIDOS[i]) != -1)
        {
            client_print_color(id, 0, "%s Tu^3 contraseña^1 contiene simbolos que no estan permitidos!", PREFIJO);
            menu_cuentas(id);
            return PLUGIN_HANDLED;
        }
    }

    if (equal(g_usuario_data[id][USUARIO_PW], g_usuario_data[id][USUARIO_NOMBRE]))
    {
        client_print_color(id, 0, "%s Tu^3 contraseña^1 es igual que tu^3 nombre^1, create una diferente.", PREFIJO);
        menu_cuentas(id);
        return PLUGIN_HANDLED;
    }

    if (strlen(g_usuario_data[id][USUARIO_PW]) < 3)
    {
        client_print_color(id, 0, "%s Tu^3 contraseña^1 es muy corta, tiene que contener 3 o mas caracteres.", PREFIJO);
        menu_cuentas(id);
        return PLUGIN_HANDLED;
    }
    
    if (strlen(g_usuario_data[id][USUARIO_PW]) >= 10)
    {
        client_print_color(id, 0, "%s Tu^3 contraseña^1 es demasiado larga, acortala e intenta otra vez.", PREFIJO);
        menu_cuentas(id);
        return PLUGIN_HANDLED;
    }

    if (!check_registrado(id)) registrar_cuenta(id);
    else client_print_color(id, 0, "%s Al parecer ya estas registrado, no te puedes crear una cuenta con el mismo nombre.", PREFIJO);
    
    return PLUGIN_HANDLED;
}

public clcmd_ingresar_cuenta(id)
{
    if (g_logueado[id]) return PLUGIN_HANDLED;

    read_args(g_usuario_data[id][USUARIO_PW], charsmax(g_usuario_data[][USUARIO_PW]));
    remove_quotes(g_usuario_data[id][USUARIO_PW]);
    trim(g_usuario_data[id][USUARIO_PW]);

    new Handle: query;
    query = SQL_PrepareQuery(g_sqlconexion, "SELECT Contrasena FROM ^"%s^" WHERE Usuario = ^"%s^"", tabla_principal, g_usuario_data[id][USUARIO_NOMBRE]);

    if (!SQL_Execute(query))
    {
        SQL_ERROR(query, tabla_principal, "clcmd_ingresar_cuenta(id)", g_usuario_data[id][USUARIO_NOMBRE]);
        client_print_color(id, 0, "%s Hubo un error en la base de datos, tu cuenta no se ha podido cargar...", PREFIJO);
        return false;
    }

    if (SQL_NumResults(query))
    {
        new szcontrasena[32];
        SQL_ReadResult(query, 0, szcontrasena, charsmax(szcontrasena));
        
        if (equali(g_usuario_data[id][USUARIO_PW], szcontrasena))
            cargar_datos(id, .omitir_autologueo = true);
        else
            client_print_color(id, 0, "%s La contraseña ingresada es incorrecta.", PREFIJO);

        SQL_FreeHandle(query);    
    }
    else
    {
        SQL_FreeHandle(query);    
        client_print_color(id, 0, "%s Hubo un error en la base de datos, tu cuenta no se ha podido cargar...", PREFIJO);
    }

    return PLUGIN_HANDLED;
}

public client_putinserver(id)
{
    if (!get_pcvar_num(cvar_on)) return;

    g_logueado[id] = false;

    for (new i = 0; i < _data_usuario; i++)
    {
        g_usuario_data[id][i] = EOS;
    }

    get_user_name(id, g_usuario_data[id][USUARIO_NOMBRE], charsmax(g_usuario_data[][USUARIO_NOMBRE]));
    get_user_authid(id, g_usuario_data[id][USUARIO_AUTHID], charsmax(g_usuario_data[][USUARIO_AUTHID]));

    if (contain(g_usuario_data[id][USUARIO_AUTHID], "ID") != -1 || contain(g_usuario_data[id][USUARIO_AUTHID], "VALVE") != -1)
        get_user_ip(id, g_usuario_data[id][USUARIO_AUTHID], charsmax(g_usuario_data[][USUARIO_AUTHID]));

    set_task(0.2, "cargar_datos_pre", id);
}

public client_disconnected(id)
{
    if (!get_pcvar_num(cvar_on)) return;

    guardar_datos(id);
}

public cargar_datos_pre(id)
{
    if (!is_user_connected(id)) return;
    cargar_datos(id, .omitir_autologueo = false);
}

cargar_datos(id, bool: omitir_autologueo = false)
{
    new Handle: query;
    query = SQL_PrepareQuery(g_sqlconexion, "SELECT * FROM ^"%s^" WHERE Usuario = ^"%s^"", tabla_principal, g_usuario_data[id][USUARIO_NOMBRE]);

    if (!SQL_Execute(query))
    {
        SQL_ERROR(query, tabla_principal, "cargar_datos(id)", g_usuario_data[id][USUARIO_NOMBRE]);
        return;
    }

    // Si encontramos resultados de la consulta le cargamos sus datos
    if (SQL_NumResults(query))
    {
        g_usuario_data[id][USUARIO_AUTOLOGUEO] = SQL_ReadResult(query, 2); /* Columna de 'Autologeo' */

        if (get_pcvar_num(cvar_autologueo) && check_autologueo(id) && g_usuario_data[id][USUARIO_AUTOLOGUEO] || omitir_autologueo)
            cargar_datos_post(id, query);
        else
        {
            client_cmd(id, "chooseteam");
            SQL_FreeHandle(query);
        }
    }
    else
        SQL_FreeHandle(query);
}

cargar_datos_post(id, Handle: query)
{
    // 0 - Nombre de la Cuenta
    SQL_ReadResult(query, 0, g_usuario_data[id][USUARIO_NOMBRE], charsmax(g_usuario_data[][USUARIO_NOMBRE]));
    set_user_info(id, "name", g_usuario_data[id][USUARIO_NOMBRE]);

    // 1 - Contrasena
    // SQL_ReadResult(query, 2, g_usuario_data[id][USUARIO_PW], charsmax(g_usuario_data[][USUARIO_PW]));

    // 2 - SteamID / IP
    // SQL_ReadResult(query, 1, g_usuario_data[id][USUARIO_AUTHID], charsmax(g_usuario_data[][USUARIO_AUTHID]));

    // 3 - Autologueo
    // g_usuario_data[id][USUARIO_AUTOLOGUEO] = SQL_ReadResult(query, 3);

    #if defined SOPORTE_ZP43
    // 4 - Ammopacks
    zp_set_user_ammo_packs(id, SQL_ReadResult(query, 4));

    // 5 - Clase Zombi
    zp_set_user_zombie_class(id, SQL_ReadResult(query, 5));

    #else
    // 4 - Dinero CS
    cs_set_user_money(id, SQL_ReadResult(query, 4));

    #endif

    SQL_FreeHandle(query);

    g_logueado[id] = true;
    client_cmd(id, "chooseteam");

    client_print_color(id, 0, "%s Felicitaciones jugador^3 %s^1 te has logueado exitosamente.", PREFIJO, g_usuario_data[id][USUARIO_NOMBRE]);
}

guardar_datos(id)
{
    if (!g_logueado[id]) return;

    new szdatos[451];
    static len; len = 0;

    len += formatex(szdatos[len], charsmax(szdatos) - len, "UPDATE ^"%s^" SET ", tabla_principal);

    #if defined SOPORTE_ZP43
    len += formatex(szdatos[len], charsmax(szdatos) - len, "Ammopacks = '%d', ", g_ammopacks(id));
    len += formatex(szdatos[len], charsmax(szdatos) - len, "ClaseZombie = '%d', ", g_clase_zm(id));
    #else
    len += formatex(szdatos[len], charsmax(szdatos) - len, "Dinero = '%d', ", cs_get_user_money(id));
    #endif

    len += formatex(szdatos[len], charsmax(szdatos) - len, "Autologueo = '%d' WHERE Usuario = ^"%s^"", g_usuario_data[id][USUARIO_AUTOLOGUEO], g_usuario_data[id][USUARIO_NOMBRE]);

    new Handle: query;
    query = SQL_PrepareQuery(g_sqlconexion, szdatos);

    if (!SQL_Execute(query))
    {
        SQL_ERROR(query, tabla_principal, "guardar_datos(id)", g_usuario_data[id][USUARIO_NOMBRE]);
        return;
    }

    SQL_FreeHandle(query);
}

registrar_cuenta(id)
{
    new Handle: query;
    query = SQL_PrepareQuery(g_sqlconexion, "INSERT INTO ^"%s^" (Usuario, SteamIDIP, Contrasena) VALUES (^"%s^", ^"%s^", ^"%s^")", tabla_principal, g_usuario_data[id][USUARIO_NOMBRE], g_usuario_data[id][USUARIO_AUTHID], g_usuario_data[id][USUARIO_PW]);

    if (!SQL_Execute(query))
    {
        SQL_ERROR(query, tabla_principal, "registrar_cuenta(id)", g_usuario_data[id][USUARIO_NOMBRE]);
        return;
    }

    SQL_FreeHandle(query);

    g_logueado[id] = true;
    client_cmd(id, "chooseteam");

    client_print_color(id, 0, "%s Felicitaciones jugador^3 %s^1 te has registrado exitosamente.", PREFIJO, g_usuario_data[id][USUARIO_NOMBRE]);
}

// -----------------
menu_cuentas(id)
{
    new menu;
    menu = menu_create("\rSistema de Cuentas MYSQL\y +\r Soporte ZP 4.3", "hdr_cuentas");

    menu_additem(menu, "Registrarse");
    menu_additem(menu, "Loguearse");

    menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER);
    menu_display(id, menu);
}
public hdr_cuentas(id, menuid, item)
{
    menu_destroy(menuid);

    if (!is_user_connected(id) || g_logueado[id])
        return PLUGIN_HANDLED;

    if (!item)
    {
        if (check_registrado(id))
        {
            menu_cuentas(id);
            client_print_color(id, 0, "%s Ya tienes una cuenta creada, elige la opción de^4 Loguearse^1.", PREFIJO);
            return PLUGIN_HANDLED;
        }

        client_cmd(id, "messagemode ^"%s^"", szmsg_crear_cuenta);
    }
    else if (item == 1)
    {
        if (!check_registrado(id))
        {
            menu_cuentas(id);
            client_print_color(id, 0, "%s No tienes una cuenta creada aún, elige la opción de^4 Registrarse^1.", PREFIJO);
            return PLUGIN_HANDLED;
        }

        client_cmd(id, "messagemode ^"%s^"", szmsg_ingresar_cuenta);
    }

    return PLUGIN_HANDLED;
}
// -----------------

SQL_INICIAR()
{
    new error, szerror[121];

    #if defined MYSQL
    g_sqltuple = SQL_MakeDbTuple(db_data[SQL_HOST], db_data[SQL_USUARIO], db_data[SQL_CONTRASENA], db_data[SQL_DATABASE], db_data[SQL_TIMEOUT]);

    if (!g_sqltuple) 
    {
        log_to_file("ERROR_SQL_CONEXION.txt", "No se pudo conectar a la base de datos...");
        return;
    }

    #else

    new get_tipo[12];
    SQL_SetAffinity("sqlite"); SQL_GetAffinity(get_tipo, sizeof (get_tipo));
    g_sqltuple = SQL_MakeDbTuple("", "", "", SQL_HOST_LOCAL);

    if (!equali(get_tipo, "sqlite"))
    {
        log_to_file("ERROR_SQL_CONEXION.txt", "No se pudo conectar a la base de datos...");
        return;
    }
    #endif

    g_sqlconexion = SQL_Connect(g_sqltuple, error, szerror, charsmax(szerror));

    if (g_sqlconexion == Empty_Handle)
        log_to_file("ERROR_SQL_CREAR_CONEXION.txt", "No se pudo crear la conexión a la base de datos...");
    else
        SQL_CREAR_TABLAS();
}

SQL_CREAR_TABLAS()
{
    new sztablas[1000];
    static len; len = 0;

    len += formatex(sztablas[len], charsmax(sztablas) - len, "CREATE TABLE IF NOT EXISTS 
`%s` (", tabla_principal);
    len += formatex(sztablas[len], charsmax(sztablas) - len, "Usuario varchar NOT NULL UNIQUE, ");
    len += formatex(sztablas[len], charsmax(sztablas) - len, "Contrasena varchar NOT NULL, ");
    len += formatex(sztablas[len], charsmax(sztablas) - len, "Autologueo int NOT NULL DEFAULT '1', ");

    #if defined SOPORTE_ZP43
    len += formatex(sztablas[len], charsmax(sztablas) - len, "SteamIDIP varchar NOT NULL, ");
    len += formatex(sztablas[len], charsmax(sztablas) - len, "Ammopacks int NOT NULL DEFAULT '0', ");
    len += formatex(sztablas[len], charsmax(sztablas) - len, "ClaseZombie int NOT NULL DEFAULT '0')");
    #else
    len += formatex(sztablas[len], charsmax(sztablas) - len, "SteamIDIP varchar NOT NULL, ");
    len += formatex(sztablas[len], charsmax(sztablas) - len, "Dinero int NOT NULL DEFAULT '0' )");
    #endif

    new Handle: query;
    query = SQL_PrepareQuery(g_sqlconexion, sztablas);

    if (!SQL_Execute(query))
        SQL_ERROR(query, tabla_principal, "SQL_CREAR_TABLAS()");
    else
        SQL_FreeHandle(query);
}

SQL_ERROR(Handle:query, const tabla[], const funcion[], const j[] = "")
{
    static error[56];
    SQL_QueryError(query, error, charsmax(error));

    if (strlen(j))
    {
        client_print_color(0, 0, "^4[SQL-ERROR]^1 - TABLA:^3 %s^1 - JUGADOR:^4 %s^1 | Error:^4 %s^1 | en la funcion:^4 %s^1", tabla, j, error, funcion);
        log_to_file("SQL_ERROR.txt", "[TABLA: %s] [JUGADOR: %s] ERROR %s | EN LA FUNCION: '%s'", tabla, j, error, funcion);
    }
    else
    {
        client_print_color(0, 0, "^4[SQL-ERROR]^1 - TABLA:^3 %s^1 | Error:^4 %s^1 | en la funcion:^4 %s^1", tabla, error, funcion);
        log_to_file("SQL_ERROR.txt", "[TABLA: %s] ERROR %s | EN LA FUNCION: '%s'", tabla, error, funcion);
    }

    SQL_FreeHandle(query);
}

stock check_autologueo(id)
{
    new Handle: query;
    query = SQL_PrepareQuery(g_sqlconexion, "SELECT * FROM ^"%s^" WHERE Usuario = ^"%s^" and SteamIDIP = ^"%s^"", tabla_principal, g_usuario_data[id][USUARIO_NOMBRE], g_usuario_data[id][USUARIO_AUTHID]);

    if (!SQL_Execute(query))
    {
        SQL_ERROR(query, tabla_principal, "check_autologueo(id)", g_usuario_data[id][USUARIO_NOMBRE]);
        return false;
    }

    if (SQL_NumResults(query))
    {
        SQL_FreeHandle(query);
        return true;
    }

    SQL_FreeHandle(query);
    return false;
}

stock check_registrado(id)
{
    new Handle: query;
    query = SQL_PrepareQuery(g_sqlconexion, "SELECT Usuario FROM ^"%s^" WHERE Usuario = ^"%s^"", tabla_principal, g_usuario_data[id][USUARIO_NOMBRE]);

    if (!SQL_Execute(query))
    {
        SQL_ERROR(query, tabla_principal, "check_registrado(id)", g_usuario_data[id][USUARIO_NOMBRE]);
        return false;
    }

    if (SQL_NumResults(query))
    {
        SQL_FreeHandle(query);
        return true;
    }

    SQL_FreeHandle(query);
    return false;
}

public plugin_end()
{
    SQL_FreeHandle(g_sqltuple);
    SQL_FreeHandle(g_sqlconexion);

Gracias, lo acabo de leer y voy a intentar pasarme ahi  Proud
Aporte(?
Discord: leo$#9073
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)