[MYSQL] Quitar registro
#1
Hola, hace un tiempo atrás compre esto a roccoxx (no he podido contactarlo), resulta que llevo días sin saber como resolver algo, necesito que se guarde automáticamente sin necesidad de registro, solo necesito guardar una variable y lo que seria el nombre y ya, todo automático.

Tipo: putinserver = load_datos(id) y disconnected = guardar_datos(id)

Ayuda Triste
Código PHP:
#include <amxmodx>
#include <sqlx>

#pragma semicolon 1

/// ================================== MYSQL CONFIG ===================================================

#define MYSQL_HOST "127.0.0.1"
#define MYSQL_USER "root"
#define MYSQL_PASS ""

#define MYSQL_DATEBASE ""

new const szTableAccounts[] = "";

new const 
szServerPrefix[] = "[]";

/// ================================== END ===================================================

enum
{
    
REGISTRAR_CUENTA,
    
CARGAR_CUENTA,
    
GUARDAR_DATOS,
    
VERIFICAR_PASSWORD,
    
LOGUEAR_PASSWORD,
    
ACTUALIZAR_PASSWORD
};

enum{
    
TEAM_UNASSIGNED,
    
TEAM_TT,
    
TEAM_CT,
    
TEAM_SPECTATOR
}

new 
Handle:g_hTupleHandle:g_hConnection;

new 
g_estadog_haspw;
new 
g_iPoints[33], g_iId[33], g_szPlayerName[33][32], g_szPassword[33][32];

public 
plugin_init(){
    
register_plugin("Account System""1.0""Roccoxx");

    
register_event("HLTV""EventRoundStart""a""1=0""2=0");

    
register_clcmd("say /Registrarme""RegistrarCuenta");
    
register_clcmd("CREAR_PASSWORD""RegistrarPassword");
    
register_clcmd("CREAR_EMAIL""RegistrarEmail");
    
register_clcmd("LOGUEAR_PASSWORD""LoguearPassword");

    
register_clcmd("chooseteam""clcmd_changeteam");
    
register_clcmd("jointeam""clcmd_changeteam");

    
register_messageget_user_msgid"ShowMenu" ), "message_ShowMenu" );
    
register_messageget_user_msgid"VGUIMenu" ), "message_VGUIMenu" );

    
MySQLx_Init();
}

public 
plugin_cfg() set_task(0.5"EventRoundStart");

public 
plugin_end() if(g_hConnection != Empty_HandleSQL_FreeHandle(g_hConnection);

public 
EventRoundStart()
    for(new 
1<= MAX_PLAYERSi++) if(g_estado & (1<<i) && is_user_connected(i)) SaveData(i);

public 
client_putinserver(id){
    
get_user_name(idg_szPlayerName[id], charsmax(g_szPlayerName[])); // VOS YA LO TENES
    
CheckPassword(id);
}

public 
client_disconnected(id){
    if(
g_estado & (1<<id)){
        
SaveData(id);
        
g_estado &= ~(1<<id);
    }

    
g_szPassword[id][0] = EOS;
}

public 
clcmd_changeteam(iId)
{    
    if(
is_user_bot(iId)) return PLUGIN_CONTINUE;

    if(~
g_estado & (1<<iId)){
        if(
g_haspw & (1<<iId)) ShowLoginMenu(iId);
        return 
PLUGIN_HANDLED;
    }
    
    static 
teamteam get_user_team(iId);
    
    if (
team == TEAM_UNASSIGNED || team == TEAM_SPECTATOR) return PLUGIN_CONTINUE;
    
    
client_print(iIdprint_chat"ACA MOSTRAS EL MENU");
    return 
PLUGIN_HANDLED;
}

public 
message_VGUIMenu(iMsgidiDestiId){
    if(
g_estado & (1<<iId) || get_msg_arg_int(1) != 2) return PLUGIN_CONTINUE;
    
    
ShowLoginMenu(iId);
    return 
PLUGIN_HANDLED;
}

public 
message_ShowMenu(iMsgidiDestiId){
    if(
g_estado & (1<<iId)) return PLUGIN_CONTINUE;
    
    static 
sMenuCode[33]; get_msg_arg_string(4sMenuCodecharsmax(sMenuCode));
    
    if(
containi(sMenuCode"Team_Select") != -1){
        
ShowLoginMenu(iId);
        return 
PLUGIN_HANDLED;
    }
    
    return 
PLUGIN_CONTINUE;
}

/*///////////////////////////////////////////////////////////////////////////////////////////////////
                                            MESSAGEMODES
///////////////////////////////////////////////////////////////////////////////////////////////////
*/

public RegistrarCuenta(const iId){
    if(~
g_estado & (1<<iId)) return PLUGIN_HANDLED;

    if(
g_haspw & (1<<iId)){
        
client_print_color(iIdprint_team_default"^4%s^1 Ya estas registrado!"szServerPrefix);
        return 
PLUGIN_HANDLED;
    }

    
client_cmd(iId"messagemode CREAR_PASSWORD");
    return 
PLUGIN_HANDLED;
}

// AGREGAR SINO ESCRIBIO NADA NO LO DEJE
public RegistrarPassword(const iId){
    
read_args(g_szPassword[iId], charsmax(g_szPassword[])); remove_quotes(g_szPassword[iId]); trim(g_szPassword[iId]);

    if(
strlen(g_szPassword[iId]) > 30){
        
client_print_color(iIdprint_team_default"^4%s^1 Maximo 30 caracteres!"szServerPrefix);
        return 
PLUGIN_HANDLED;
    }

    if(!
g_szPassword[iId][0] || contain(g_szPassword[iId], " ") != -1)
    {
        
client_print_color(iIdprint_team_default"^4%s^1 No escribiste nada o hiciste un espacio!"szServerPrefix);
        return 
PLUGIN_HANDLED;
    }
    
    
//hash_string(g_szPassword[iId], Hash_Md5, g_szPassword[iId], charsmax(g_szPassword[]));
    
    
client_cmd(iId"messagemode CREAR_EMAIL");
    return 
PLUGIN_HANDLED;
}

public 
RegistrarEmail(const iId){
    new 
szEmail[50]; read_args(szEmailcharsmax(szEmail)); remove_quotes(szEmail); trim(szEmail);

    if(
strlen(szEmail) > 48){
        
client_print_color(iIdprint_team_default"^4%s^1 Maximo 48 caracteres!"szServerPrefix);
        return 
PLUGIN_HANDLED;
    }

    if(!
szEmail[0] || contain(szEmail" ") != -1)
    {
        
client_print_color(iIdprint_team_default"^4%s^1 No escribiste nada o hiciste un espacio!"szServerPrefix);
        return 
PLUGIN_HANDLED;
    }
    
    new 
szQuery[256], iData[2]; iData[0] = iIdiData[1] = ACTUALIZAR_PASSWORD;

    new 
szSafePassword[64]; SQL_QuoteString(g_hConnectionszSafePasswordcharsmax(szSafePassword), g_szPassword[iId]);
    new 
szSafeEmail[100]; SQL_QuoteString(g_hConnectionszSafeEmailcharsmax(szSafeEmail), szEmail);
    
    
formatex(szQuerycharsmax(szQuery), "UPDATE %s SET Password=^"%s^", Email=^"%s^" WHERE id='%d'"szTableAccountsszSafePasswordszSafeEmailg_iId[iId]);
    
SQL_ThreadQuery(g_hTuple"DataHandler"szQueryiData2);
    return 
PLUGIN_HANDLED;
}

public 
LoguearPassword(const iId){
    
read_args(g_szPassword[iId], charsmax(g_szPassword[])); remove_quotes(g_szPassword[iId]); trim(g_szPassword[iId]);
    
//hash_string(g_szPassword[iId], Hash_Md5, g_szPassword[iId], charsmax(g_szPassword[]));
    
    
new szQuery[128], iData[2]; iData[0] = iIdiData[1] = LOGUEAR_PASSWORD;
    
    
formatex(szQuerycharsmax(szQuery), "SELECT * FROM %s WHERE id='%d' AND Password=^"%s^""szTableAccountsg_iId[iId], g_szPassword[iId]);
    
SQL_ThreadQuery(g_hTuple"DataHandler"szQueryiData2);
    
    return 
PLUGIN_HANDLED;
}

/*///////////////////////////////////////////////////////////////////////////////////////////////////
                                            MENU DE LOGUEO
///////////////////////////////////////////////////////////////////////////////////////////////////
*/

ShowLoginMenu(const iId){
    if(~
g_haspw & (1<<iId)) return PLUGIN_HANDLED;

    new 
iMenu menu_create("Sistema de cuentas""LoginMenu");

    
menu_additem(iMenu"Ingresar Password""1");

    
menu_setprop(iMenuMPROP_EXITMEXIT_NEVER);

    
menu_display(iIdiMenu);

    return 
PLUGIN_HANDLED;
}

public 
LoginMenu(iIdiMenuiItem){
    if(
iItem == MENU_EXIT || !is_user_connected(iId)){
        
menu_destroy(iMenu);
        return 
PLUGIN_HANDLED;
    }

    
client_cmd(iId"messagemode LOGUEAR_PASSWORD");
    
menu_destroy(iMenu);
    return 
PLUGIN_HANDLED;
}

/*///////////////////////////////////////////////////////////////////////////////////////////////////
                                            MYSQL
///////////////////////////////////////////////////////////////////////////////////////////////////
*/

CheckPassword(const iId){    
    new 
szQuery[128], iData[2]; iData[0] = iIdiData[1] = VERIFICAR_PASSWORD;
    
    new 
szSafeName[64]; SQL_QuoteString(g_hConnectionszSafeNamecharsmax(szSafeName), g_szPlayerName[iId]);
    
formatex(szQuerycharsmax(szQuery), "SELECT * FROM %s WHERE Jugador=^"%s^""szTableAccountsszSafeName);
    
SQL_ThreadQuery(g_hTuple"DataHandler"szQueryiData2);
}

LoadData(const iId){
    new 
szQuery[128], iData[2]; iData[0] = iIdiData[1] = CARGAR_CUENTA;
    
    
formatex(szQuerycharsmax(szQuery), "SELECT * FROM %s WHERE id='%d'"szTableAccountsg_iId[iId]);
    
SQL_ThreadQuery(g_hTuple"DataHandler"szQueryiData2);
}

SaveData(const iId){
    new 
szQuery[512], iData[2]; iData[0] = iIdiData[1] = GUARDAR_DATOS;
    
    
formatex(szQuerycharsmax(szQuery), "UPDATE %s SET Puntos='%d' WHERE id='%d'"szTableAccountsg_iPoints[iId], g_iId[iId]);
    
SQL_ThreadQuery(g_hTuple"DataHandler"szQueryiData2);
}

public 
DataHandler(failstateHandle:Queryerror[], error2data[], datasizeFloat:time){
    static 
iIdiId data[0];
    
    if(!
is_user_connected(iId)) return;

    switch(
failstate){
        case 
TQUERY_CONNECT_FAILED:{
            
log_to_file("SQL_LOG_TQ.txt""Error en la conexion al MySQL [%i]: %s"error2error);
            return;
        }
        case 
TQUERY_QUERY_FAILED:
            
log_to_file("SQL_LOG_TQ.txt""Error en la consulta al MySQL [%i]: %s"error2error);
    }
    
    switch(
data[1]){
        case 
REGISTRAR_CUENTA:{
            if(
failstate TQUERY_SUCCESS){
                
client_print_color(iIdprint_team_default"^4%s^1 Tenemos un problema con la creacion de tu cuenta, intenta luego!"szServerPrefix);
                
client_cmd(iId"spk buttons/button10.wav");
            }
            else{
                
client_print_color(iIdprint_team_default"^4%s^1 Cuenta Creada!"szServerPrefix);
                
                new 
szQuery[128], iData[2]; iData[0] = iIdiData[1] = CARGAR_CUENTA;

                new 
szSafeName[64]; SQL_QuoteString(g_hConnectionszSafeNamecharsmax(szSafeName), g_szPlayerName[iId]);

                
formatex(szQuerycharsmax(szQuery), "SELECT * FROM %s WHERE Jugador=^"%s^""szTableAccountsszSafeName);
                
SQL_ThreadQuery(g_hTuple"DataHandler"szQueryiData2);
            }
        }
        case 
CARGAR_CUENTA:{
            if(
SQL_NumResults(Query)){
                
g_iId[iId] = SQL_ReadResult(Query0);
                
g_iPoints[iId] = SQL_ReadResult(Query4);

                
client_print_color(iIdprint_team_default"^4%s^1 Cuenta cargada"szServerPrefix);

                
g_estado |= (1<<iId);

                static 
msg_blockmsg_block get_msg_block(iId);
                
set_msg_block(iIdBLOCK_SET);
                
engclient_cmd(iId"jointeam""5");
                
engclient_cmd(iId"joinclass""5");
                
set_msg_block(iIdmsg_block);
            }
            else 
client_print_color(iIdprint_team_default"^4%s^1 Error en la carga de datos!"szServerPrefix);
        }
        case 
GUARDAR_DATOS:{
            if(
failstate TQUERY_SUCCESSclient_print_color(iIdprint_team_default"^4%s^1 Error en el guardado de datos!"szServerPrefix);
            else 
client_print_color(iIdprint_team_default"^4%s^1 Datos guardados!"szServerPrefix);
        }
        case 
VERIFICAR_PASSWORD:{
            if(
SQL_NumResults(Query)){
                
g_iId[iId] = SQL_ReadResult(Query0);

                new 
szPassword[32]; SQL_ReadResult(Query2szPasswordcharsmax(szPassword));

                if(!
szPassword[0]){
                    
g_haspw &= ~(1<<iId);
                    
LoadData(iId);
                }
                else{
                    
g_haspw |= (1<<iId);
                    
ShowLoginMenu(iId);
                }
            }
            else{
                new 
szQuery[256], iData[2]; iData[0] = iIdiData[1] = REGISTRAR_CUENTA;

                new 
szSafeName[64]; SQL_QuoteString(g_hConnectionszSafeNamecharsmax(szSafeName), g_szPlayerName[iId]);

                
formatex(szQuerycharsmax(szQuery), "INSERT INTO %s (Jugador) VALUES (^"%s^")"szTableAccountsszSafeName);
                
SQL_ThreadQuery(g_hTuple"DataHandler"szQueryiData2);
            }
        }
        case 
LOGUEAR_PASSWORD:{
            if(
SQL_NumResults(Query)) LoadData(iId); // HAGO OTRA CONSULTA DE NUEVO PARA FACILITARTE LA EDICION DE LA CARGA DE DATOS, SE PUEDE HACER ACA TAMBIEN PERO POR COMODIDAD ES INDISTINTO
            
else{
                
client_print_color(iIdprint_team_default"^4%s^1 Usuario o Contraseñ incorrecta."szServerPrefix);
                
client_cmd(iId"spk buttons/button10.wav");
                
ShowLoginMenu(iId);
            }
        }
        case 
ACTUALIZAR_PASSWORD:{
            if(
failstate TQUERY_SUCCESSclient_print_color(iIdprint_team_default"^4%s^1 Error al crear la contraseñ!"szServerPrefix);
            else 
client_print_color(iIdprint_team_default"^4%s^1 Contraseñ creada correctamente!"szServerPrefix);
        }
    }
}

public 
MySQLx_Init()
{
    
g_hTuple SQL_MakeDbTuple(MYSQL_HOSTMYSQL_USERMYSQL_PASSMYSQL_DATEBASE);
    
    if(!
g_hTuple
    {
        
log_to_file("SQL_ERROR.txt""No se pudo conectar con la base de datos.");
        return 
pause("a");
    }

    new 
err[512], err_code;
    
g_hConnection SQL_Connect(g_hTupleerr_codeerrcharsmax(err));
    if(
g_hConnection == Empty_Handlelog_amx("SQL Error: %s (%d)"errerr_code);
    
    return 
PLUGIN_CONTINUE;

Responder
#2
#pedidodeplugins
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder
#3
Hola no recuerdo haber creado ese plugin para ponerme de autor ni tampoco ubico tu tag "CsWhiteAngels"

Si querés hacer lo que pedís simplemente elimina toda la parte de registro y login de password, en putinserver hace un llamado a una función que contenga la consulta para verificar si el usuario existe o no, en caso de no existir haces un insert en la base de datos, de lo contrario si existe cargas los datos. No es complicado, así como no lo es encontrar mi usuario con el buscador y escribirme un mensaje privado.
Ingeniero agrónomo y desarrollador de Software.

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"

Merci Alliedmodders pour m'introduire dans la programmation.
Responder
#4
Es que fue hace muchooo, la vdd no se usar mucho el foro xD

Y agregando pues esto lo subí sin probar, luego me di cuenta que te guarda los datos automáticamente sin necesidad de registrarte, se me había olvidado.

Igual gracias por la idea del putinserver, lo haré.
Responder
#5
(16/06/2022, 06:59 PM)CsWhiteAngels escribió: Es que fue hace muchooo, la vdd no se usar mucho el foro xD

Y agregando pues esto lo subí sin probar, luego me di cuenta que te guarda los datos automáticamente sin necesidad de registrarte, se me había olvidado.

Igual gracias por la idea del putinserver, lo haré.

La idea del putin es referida a cómo haría yo el sistema ese partiendo del plugin de sistema de cuentas de r0ma ya que no ví el código a detalle porque estaba ocupado pero cómo era muy parecido asumí que se trataba del mismo plugin Roflmao

En todo caso guiate por la variable de los puntos.

En tu caso el plugin cumple con lo que pides, con la feature de que el usuario puede asociar un password (say /Registrarme) y en caso de tenerlo le muestra el menu de logueo, de lo contrario procede a cargar los datos Insecure
Ingeniero agrónomo y desarrollador de Software.

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"

Merci Alliedmodders pour m'introduire dans la programmation.
Responder
#6
Código PHP:
#include <amxmodx>
#include <ndrs_vault>

#define PLUGIN  "New Plug-In"
#define VERSION "1.0.0-1"
#define AUTHOR  "Author"

#define TABLE "test"
#define FIELD_POINTS "points"

new g_iPoints[33]

public 
plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
ndrs_start(TABLENDRS_NAME)
    
ndrs_register_fields(FIELD_POINTS)
}

save(id)
{
    
ndrs_set(idFIELD_POINTSNDRS_INTg_iPoints[id])
}

load(id)
{
    
g_iPoints[id] = ndrs_get(idFIELD_POINTS)

Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)