10/06/2022, 10:58 PM
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
Tipo: putinserver = load_datos(id) y disconnected = guardar_datos(id)
Ayuda
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_hTuple, Handle:g_hConnection;
new g_estado, g_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_message( get_user_msgid( "ShowMenu" ), "message_ShowMenu" );
register_message( get_user_msgid( "VGUIMenu" ), "message_VGUIMenu" );
MySQLx_Init();
}
public plugin_cfg() set_task(0.5, "EventRoundStart");
public plugin_end() if(g_hConnection != Empty_Handle) SQL_FreeHandle(g_hConnection);
public EventRoundStart()
for(new i = 1; i <= MAX_PLAYERS; i++) if(g_estado & (1<<i) && is_user_connected(i)) SaveData(i);
public client_putinserver(id){
get_user_name(id, g_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 team; team = get_user_team(iId);
if (team == TEAM_UNASSIGNED || team == TEAM_SPECTATOR) return PLUGIN_CONTINUE;
client_print(iId, print_chat, "ACA MOSTRAS EL MENU");
return PLUGIN_HANDLED;
}
public message_VGUIMenu(iMsgid, iDest, iId){
if(g_estado & (1<<iId) || get_msg_arg_int(1) != 2) return PLUGIN_CONTINUE;
ShowLoginMenu(iId);
return PLUGIN_HANDLED;
}
public message_ShowMenu(iMsgid, iDest, iId){
if(g_estado & (1<<iId)) return PLUGIN_CONTINUE;
static sMenuCode[33]; get_msg_arg_string(4, sMenuCode, charsmax(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(iId, print_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(iId, print_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(iId, print_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(szEmail, charsmax(szEmail)); remove_quotes(szEmail); trim(szEmail);
if(strlen(szEmail) > 48){
client_print_color(iId, print_team_default, "^4%s^1 Maximo 48 caracteres!", szServerPrefix);
return PLUGIN_HANDLED;
}
if(!szEmail[0] || contain(szEmail, " ") != -1)
{
client_print_color(iId, print_team_default, "^4%s^1 No escribiste nada o hiciste un espacio!", szServerPrefix);
return PLUGIN_HANDLED;
}
new szQuery[256], iData[2]; iData[0] = iId; iData[1] = ACTUALIZAR_PASSWORD;
new szSafePassword[64]; SQL_QuoteString(g_hConnection, szSafePassword, charsmax(szSafePassword), g_szPassword[iId]);
new szSafeEmail[100]; SQL_QuoteString(g_hConnection, szSafeEmail, charsmax(szSafeEmail), szEmail);
formatex(szQuery, charsmax(szQuery), "UPDATE %s SET Password=^"%s^", Email=^"%s^" WHERE id='%d'", szTableAccounts, szSafePassword, szSafeEmail, g_iId[iId]);
SQL_ThreadQuery(g_hTuple, "DataHandler", szQuery, iData, 2);
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] = iId; iData[1] = LOGUEAR_PASSWORD;
formatex(szQuery, charsmax(szQuery), "SELECT * FROM %s WHERE id='%d' AND Password=^"%s^"", szTableAccounts, g_iId[iId], g_szPassword[iId]);
SQL_ThreadQuery(g_hTuple, "DataHandler", szQuery, iData, 2);
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(iMenu, MPROP_EXIT, MEXIT_NEVER);
menu_display(iId, iMenu);
return PLUGIN_HANDLED;
}
public LoginMenu(iId, iMenu, iItem){
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] = iId; iData[1] = VERIFICAR_PASSWORD;
new szSafeName[64]; SQL_QuoteString(g_hConnection, szSafeName, charsmax(szSafeName), g_szPlayerName[iId]);
formatex(szQuery, charsmax(szQuery), "SELECT * FROM %s WHERE Jugador=^"%s^"", szTableAccounts, szSafeName);
SQL_ThreadQuery(g_hTuple, "DataHandler", szQuery, iData, 2);
}
LoadData(const iId){
new szQuery[128], iData[2]; iData[0] = iId; iData[1] = CARGAR_CUENTA;
formatex(szQuery, charsmax(szQuery), "SELECT * FROM %s WHERE id='%d'", szTableAccounts, g_iId[iId]);
SQL_ThreadQuery(g_hTuple, "DataHandler", szQuery, iData, 2);
}
SaveData(const iId){
new szQuery[512], iData[2]; iData[0] = iId; iData[1] = GUARDAR_DATOS;
formatex(szQuery, charsmax(szQuery), "UPDATE %s SET Puntos='%d' WHERE id='%d'", szTableAccounts, g_iPoints[iId], g_iId[iId]);
SQL_ThreadQuery(g_hTuple, "DataHandler", szQuery, iData, 2);
}
public DataHandler(failstate, Handle:Query, error[], error2, data[], datasize, Float:time){
static iId; iId = 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", error2, error);
return;
}
case TQUERY_QUERY_FAILED:
log_to_file("SQL_LOG_TQ.txt", "Error en la consulta al MySQL [%i]: %s", error2, error);
}
switch(data[1]){
case REGISTRAR_CUENTA:{
if(failstate < TQUERY_SUCCESS){
client_print_color(iId, print_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(iId, print_team_default, "^4%s^1 Cuenta Creada!", szServerPrefix);
new szQuery[128], iData[2]; iData[0] = iId; iData[1] = CARGAR_CUENTA;
new szSafeName[64]; SQL_QuoteString(g_hConnection, szSafeName, charsmax(szSafeName), g_szPlayerName[iId]);
formatex(szQuery, charsmax(szQuery), "SELECT * FROM %s WHERE Jugador=^"%s^"", szTableAccounts, szSafeName);
SQL_ThreadQuery(g_hTuple, "DataHandler", szQuery, iData, 2);
}
}
case CARGAR_CUENTA:{
if(SQL_NumResults(Query)){
g_iId[iId] = SQL_ReadResult(Query, 0);
g_iPoints[iId] = SQL_ReadResult(Query, 4);
client_print_color(iId, print_team_default, "^4%s^1 Cuenta cargada", szServerPrefix);
g_estado |= (1<<iId);
static msg_block; msg_block = get_msg_block(iId);
set_msg_block(iId, BLOCK_SET);
engclient_cmd(iId, "jointeam", "5");
engclient_cmd(iId, "joinclass", "5");
set_msg_block(iId, msg_block);
}
else client_print_color(iId, print_team_default, "^4%s^1 Error en la carga de datos!", szServerPrefix);
}
case GUARDAR_DATOS:{
if(failstate < TQUERY_SUCCESS) client_print_color(iId, print_team_default, "^4%s^1 Error en el guardado de datos!", szServerPrefix);
else client_print_color(iId, print_team_default, "^4%s^1 Datos guardados!", szServerPrefix);
}
case VERIFICAR_PASSWORD:{
if(SQL_NumResults(Query)){
g_iId[iId] = SQL_ReadResult(Query, 0);
new szPassword[32]; SQL_ReadResult(Query, 2, szPassword, charsmax(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] = iId; iData[1] = REGISTRAR_CUENTA;
new szSafeName[64]; SQL_QuoteString(g_hConnection, szSafeName, charsmax(szSafeName), g_szPlayerName[iId]);
formatex(szQuery, charsmax(szQuery), "INSERT INTO %s (Jugador) VALUES (^"%s^")", szTableAccounts, szSafeName);
SQL_ThreadQuery(g_hTuple, "DataHandler", szQuery, iData, 2);
}
}
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(iId, print_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_SUCCESS) client_print_color(iId, print_team_default, "^4%s^1 Error al crear la contraseñ!", szServerPrefix);
else client_print_color(iId, print_team_default, "^4%s^1 Contraseñ creada correctamente!", szServerPrefix);
}
}
}
public MySQLx_Init()
{
g_hTuple = SQL_MakeDbTuple(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_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_hTuple, err_code, err, charsmax(err));
if(g_hConnection == Empty_Handle) log_amx("SQL Error: %s (%d)", err, err_code);
return PLUGIN_CONTINUE;
}