26/06/2020, 06:36 PM
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 .
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.
Paso número 2: Explicación de la tabla de IPBoard
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:
Bien esto es todo, los animo a adaptarlo a su sistema de cuentas y si quieren, compartirlo con todos nosotros.
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 .
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_INCREMENT, email 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.
Aquí unos de los datos de nuestra tabla.
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_connectionFORO, Handle: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(id, print_team_default, "Ya tu cuenta fue vinculada"); return PLUGIN_HANDLED; }
static len, szMenu[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(id, KEYSMENU, szMenu, -1, "Vincular Menu");
return PLUGIN_CONTINUE;
}
public HandlerVincularMenu(id, keys) {
switch(keys) {
case 0: client_cmd(id, "messagemode VINCULAR_EMAIL");
}
return PLUGIN_HANDLED;
}
public VINCULAR_EMAIL(id)
{
if(g_EstadoIPB[id]) { client_print_color(id, print_team_default, "Ya tu cuenta fue vinculada"); return PLUGIN_HANDLED; }
new szEmail[64], Query[512];
read_args(szEmail, charsmax(szEmail));
remove_quotes(szEmail);
trim(szEmail);
static data[2];
data[0] = id;
data[1] = FORO;
formatex(Query, charsmax(Query), "SELECT * FROM %s WHERE email=^"%s^"", TABLE_IPB, szEmail);
SQL_ThreadQuery(g_connectionFORO, "QueryHandler", Query, data, 2);
return PLUGIN_CONTINUE;
}
public BienHecho(id)
{
if(g_EstadoIPB[id]) { client_print_color(id, print_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(id, menu, 0);
return PLUGIN_CONTINUE;
}
public HandlerMenu(id, menu, item) {
if(item ==0){
static data[2], Query[512];
data[0] = id;
data[1] = ACC;
formatex(Query, charsmax(Query), "SELECT * FROM %s WHERE email=^"%s^"", TABLE_NAME, gEmailIPB[id]);
SQL_ThreadQuery(g_connection, "QueryHandler", Query, data, 2);
}
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_NAME, g_EstadoIPB[id], gEmailIPB[id]), data, 2);
}
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_IPB, gEmailIPB[id]), data, 2);
}
public QueryHandler(failstate, Handle:Query, error[], errnum, data[], datasize)
{
if(failstate != TQUERY_SUCCESS) {
log_to_file("SQLx_Error.log", "ERROR: [%d] - [%s]" ,errnum, error);
return PLUGIN_HANDLED;
}
static id; id = 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(Query, fieldEmail, gEmailIPB[id], charsmax(gEmailIPB[]));
SQL_ReadResult(Query, fieldName, gIPBName[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(Query, myEmail, Email, charsmax(Email));
if(strlen(Email))
{
if(equal(Email, gEmailIPB[id])) {
client_print_color(id, print_team_default, "Vinculada tu acc");
AccVinculada(id);
}else client_print_color(id, print_team_default, "Nono");
}
else client_print_color(id, print_team_default, "Tu email no esta en nuestra sistema de cuentas");
SQL_NextRow(Query);
}
}
}
case UPDATE_ACC: {
if(failstate < TQUERY_SUCCESS)
client_print_color(id, print_team_default, "Tu cuenta no pudo pasar a vinculada :(");
}
case ESTADISTICAS_ACC:
{
if(SQL_NumResults(Query))
{
static sEmail[64], sName[33], IdAcc, iJoined, sJoined[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(Query, fieldEmail, sEmail, 63);
SQL_ReadResult(Query, fieldName, sName, 32);
IdAcc = SQL_ReadResult(Query, fieldId);
iJoined = SQL_ReadResult(Query, fieldJoin);
format_time(sJoined, charsmax(sJoined), "%H:%M", iJoined);
new menu = menu_create("Tus estadisticas del foro", "HandlerEstadisticasForo");
menu_additem(menu, fmt("Su nombre: %s", sName));
menu_additem(menu, fmt("Su email: %s", sEmail));
menu_additem(menu, fmt("Cuenta registrada #%d", IdAcc));
menu_additem(menu, fmt("Ultimo ingreso: %s", sJoined));
menu_display(id, menu, 0, -1);
}
}
}
return PLUGIN_CONTINUE;
}
public HandlerEstadisticasForo(id, menu, item) menu_destroy(menu);
Bien esto es todo, los animo a adaptarlo a su sistema de cuentas y si quieren, compartirlo con todos nosotros.