Conexión de IPBoard a CS 1.6
#1
Buenas, les traigo un ejemplo de como realizar una conexión de su foro, en este caso Invisión Community a su servidor de cs 1.6.

ACLARO: Es un ejemplo, por ende, ustedes esto lo realizan de la mejor forma posible para evitar todo bug o falla. Ya que esto se tiene que adaptar a un sistema de cuentas donde bueno, los datos esten cargados bien, usen manejos de array, étc. Pero como esto es un ejemplo, no nos vamos a poner tan técnicos. Así que ustedes lo adaptan a su sistema de cuentas a su manera y listo Sonrisa.

Debido a que IPBoard usa una encriptación para sus manejos de password, me decidi a crearlo por E-Mail, ya que nadie le va a pasar el email con el que creo su acc a alguna persona, o eso al menos supongo yo...

Bueno, bien, vamos paso por paso.

Paso número 1: Creación de la tabla

1. Crearemos nuestra tabla llamada "vinculacion_ipboard"(esta tabla, es una prueba, claramente ustedes tendran en su tabla de sistema de cuentas, una columna llamada E-Mail, donde allí pondran su email las personas que se registren).

CÓDIGO DE MI TABLA.
Código PHP:
CREATE TABLE vinculacion_ipboard (id INT NOT NULL PRIMARY KEY AUTO_INCREMENTemail VARCHAR(64), estado INT(3));
//Expliquemos esto..
//Id = "Vinculación numerica" O sea, que cada vez que uno vincule su acc, sera el número 1, el próximo número 2 y así. Eso explica el AUTO_INCREMENT..
//Email = "El email que se registro en su sistema de cuentas"
//Estado = "0 - 1" Sí el estado esta en 0, jamas se vinculo, si esta en 1, se vinculo exitosamente. 


Paso número 2: Explicación de la tabla de IPBoard

2. Bien, para los que no sepan, core_members, es la tabla donde se guardan todos los miembros registrados de nuestro foro. Aquí es donde enviaremos nuestra consulta, a esta tabla donde podremos obtener todo lo que quisieramos en torno a nuestros miembros del foro.
[Imagen: t76sh4]
Aquí unos de los datos de nuestra tabla.


Paso número 3: Programación en AMXX.

3. Explico un poco lo que hice acá. Cree un comando donde se llame /vincular aquí el usuario registrado, pondra el E-Mail  donde EL EN SU SISTEMA DE CUENTAS COLOCO. Perfecto, una vez ingresado ese E-Mail, el usuario escribira /hecho y si fue éxitoso, le saldra un menú con algunos de los datos de su cuenta del foro. Si es así, podra vincular su cuenta.
Perfecto, si todo esto es éxitoso, todo esto me refiero a si su Email fue encontrado en la base de datos de nuestro servidor y de nuestro foro se actualizara nuestros estado de vinculación de 0 a 1.
Además que también tendra un comando llamado /data donde podra ver algunos de sus datos del foro.

Código:
Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <sqlx>


#define TABLE_IPB    "core_members"

#define TABLE_NAME    "vinculacion_ipboard"

new const Datos_MySQLF[][] = {
    
"host",
    
"user",
    
"pw",
    
"db"
};

new const 
Datos_MySQL[][] = {
    
"host",
    
"user",
    
"pw",
    
"db"
}

new 
KEYSMENU MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9;

new 
Handle:g_connectionFOROHandle:g_connection;

enum 
{
    
FORO,
    
ACC,
    
UPDATE_ACC,
    
ESTADISTICAS_ACC
};

new 
gEmailIPB[33][64], gIPBName[33][32];

new 
g_EstadoIPB[33];

stock mysql_initalize()
{
    
g_connection SQL_MakeDbTuple(Datos_MySQL[0], Datos_MySQL[1], Datos_MySQL[2], Datos_MySQL[3]);
    
g_connectionFORO SQL_MakeDbTuple(Datos_MySQLF[0], Datos_MySQLF[1], Datos_MySQLF[2], Datos_MySQLF[3]);
    
    if(!
g_connection || !g_connectionFORO)
        return 
pause("a");
    
    return 
PLUGIN_CONTINUE;
}


public 
plugin_init() {
    
register_plugin("IPBoard xd""v1.0""heNK'");
    
    
register_clcmd("say /vincular""VincularMyAcc");
    
register_clcmd("say /hecho""BienHecho");
    
register_clcmd("say /data""DataMiAcc");
    
    
register_clcmd("VINCULAR_EMAIL""VINCULAR_EMAIL");
    
    
mysql_initalize();
    
    
register_menu("Vincular Menu"KEYSMENU"HandlerVincularMenu"0);
}

public 
client_putinserver(id) {
    
g_EstadoIPB[id] = 0;
}

public 
VincularMyAcc(id)
{
    if(
g_EstadoIPB[id]) { client_print_color(idprint_team_default"Ya tu cuenta fue vinculada"); return PLUGIN_HANDLED; }
    static 
lenszMenu[1500]; len 0;
    
    
len += formatex(szMenu[len], charsmax(szMenu) - len"\yBREAKING GAMING - \wVincular Cuentas^n^n");
    
len += formatex(szMenu[len], charsmax(szMenu) - len"\y1. \wVincular mi cuenta^n^n^n");
    
len += formatex(szMenu[len], charsmax(szMenu) - len"\y9. \wSalir");
    
    
show_menu(idKEYSMENUszMenu, -1"Vincular Menu");
    return 
PLUGIN_CONTINUE;
}

public 
HandlerVincularMenu(idkeys) {
    switch(
keys) {
        case 
0client_cmd(id"messagemode VINCULAR_EMAIL");
    }
    return 
PLUGIN_HANDLED;
}

public 
VINCULAR_EMAIL(id)
{
    if(
g_EstadoIPB[id]) { client_print_color(idprint_team_default"Ya tu cuenta fue vinculada"); return PLUGIN_HANDLED; }
    new 
szEmail[64], Query[512];
    
read_args(szEmailcharsmax(szEmail));
    
remove_quotes(szEmail);
    
trim(szEmail);
    
    static 
data[2];
    
data[0] = id;
    
data[1] = FORO;
    
    
formatex(Querycharsmax(Query), "SELECT * FROM %s WHERE email=^"%s^""TABLE_IPBszEmail);
    
SQL_ThreadQuery(g_connectionFORO"QueryHandler"Querydata2);
    return 
PLUGIN_CONTINUE;
}


public 
BienHecho(id)
{
    if(
g_EstadoIPB[id]) { client_print_color(idprint_team_default"Ya tu cuenta fue vinculada"); return PLUGIN_HANDLED; }
    new 
menu menu_create(fmt("Bueno perrin este es tu email: %s^nY tu nombre? %s"gEmailIPB[id], gIPBName[id]), "HandlerMenu");
    
    
menu_additem(menu"Si gato");
    
    
menu_display(idmenu0);
    return 
PLUGIN_CONTINUE;
}

public 
HandlerMenu(idmenuitem) {
    
    if(
item ==0){
        static 
data[2], Query[512];
        
data[0] = id;
        
data[1] = ACC;
    
        
formatex(Querycharsmax(Query), "SELECT * FROM %s WHERE email=^"%s^""TABLE_NAMEgEmailIPB[id]);
        
SQL_ThreadQuery(g_connection"QueryHandler"Querydata2);
        
    }
    
menu_destroy(menu);
    return 
PLUGIN_HANDLED;
}

public 
AccVinculada(id) {
    static 
data[2];
    
data[0] = id;
    
data[1] = UPDATE_ACC;
    
g_EstadoIPB[id] = 1;
    
SQL_ThreadQuery(g_connection"QueryHandler"fmt("UPDATE %s SET estado='%d' WHERE email=^"%s^""TABLE_NAMEg_EstadoIPB[id], gEmailIPB[id]), data2);
}


public 
DataMiAcc(id)
{
    static 
data[2];
    
data[0] = id;
    
data[1] = ESTADISTICAS_ACC;
    
SQL_ThreadQuery(g_connectionFORO"QueryHandler"fmt("SELECT * FROM %s WHERE email=^"%s^""TABLE_IPBgEmailIPB[id]), data2);
}

public 
QueryHandler(failstateHandle:Queryerror[], errnumdata[], datasize)
{
    if(
failstate != TQUERY_SUCCESS) {
        
log_to_file("SQLx_Error.log""ERROR: [%d] - [%s]" ,errnumerror);
        return 
PLUGIN_HANDLED;
    }
    
    static 
idid data[0];
    
    switch(
data[1]) {
        case 
FORO: {
            if(
SQL_NumResults(Query)) {
                new 
fieldEmail SQL_FieldNameToNum(Query"email");
                new 
fieldName SQL_FieldNameToNum(Query"name");
                
                while(
SQL_MoreResults(Query)) {
                    
SQL_ReadResult(QueryfieldEmailgEmailIPB[id], charsmax(gEmailIPB[]));
                    
SQL_ReadResult(QueryfieldNamegIPBName[id], charsmax(gIPBName[]));
                    
SQL_NextRow(Query);
                }
            }
        }
        case 
ACC: {
            if(
SQL_NumResults(Query)) {
                new 
Email[64];
                new 
myEmail SQL_FieldNameToNum(Query"email");
                
                while(
SQL_MoreResults(Query)) {
                    
SQL_ReadResult(QuerymyEmailEmailcharsmax(Email));
                    
                    if(
strlen(Email))
                    {
                        if(
equal(EmailgEmailIPB[id])) {
                            
client_print_color(idprint_team_default"Vinculada tu acc");
                            
AccVinculada(id);
                        }else     
client_print_color(idprint_team_default"Nono");
                    }
                    else 
client_print_color(idprint_team_default"Tu email no esta en nuestra sistema de cuentas");
                    
SQL_NextRow(Query);
                }
            }
        }
        case 
UPDATE_ACC: {
            if(
failstate TQUERY_SUCCESS)
                
client_print_color(idprint_team_default"Tu cuenta no pudo pasar a vinculada :(");
        }
        case 
ESTADISTICAS_ACC
        {
            if(
SQL_NumResults(Query)) 
            {
                static 
sEmail[64], sName[33], IdAcciJoinedsJoined[20]; 
                new 
fieldEmail SQL_FieldNameToNum(Query"email");
                new 
fieldName SQL_FieldNameToNum(Query"name");
                new 
fieldId SQL_FieldNameToNum(Query"member_id");
                new 
fieldJoin SQL_FieldNameToNum(Query"joined");
                
                
SQL_ReadResult(QueryfieldEmailsEmail63);
                
SQL_ReadResult(QueryfieldNamesName32);
                
IdAcc SQL_ReadResult(QueryfieldId);
                
iJoined SQL_ReadResult(QueryfieldJoin);
                
                
format_time(sJoinedcharsmax(sJoined), "%H:%M"iJoined);
                
                new 
menu menu_create("Tus estadisticas del foro""HandlerEstadisticasForo");
                
                
menu_additem(menufmt("Su nombre: %s"sName));
                
menu_additem(menufmt("Su email: %s"sEmail));
                
menu_additem(menufmt("Cuenta registrada #%d"IdAcc));
                
menu_additem(menufmt("Ultimo ingreso: %s"sJoined));
                
                
menu_display(idmenu0, -1);
                
            }
        }
    }
    
    return 
PLUGIN_CONTINUE;
}

public 
HandlerEstadisticasForo(idmenuitemmenu_destroy(menu); 


Bien esto es todo, los animo a adaptarlo a su sistema de cuentas y si quieren, compartirlo con todos nosotros. Gran sonrisa
Responder
#2
buen aporte.  Dancing

@metita toca tu versión gRIP  Trolleyes
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)