Mensajes: 1,072
Temas: 57
Registro en: Feb 2016
Reputación:
8
23/06/2019, 03:04 PM
(Última modificación: 23/06/2019, 03:10 PM por Niper.-.. Edited 3 times in total.)
tendrías que agregarle en el say /vencimiento para y meterle un print. Después podrías hacer otro tipo de sistema en base a ese agregandole suspensiones y más cosas que son necesarias. También, ya que lo haces vía MySQL, vía plugin o foro para poder cambiar la setinfo de admins, también es bueno para el sistema. Acá te dejo algunas cosas que tenía.
También, es vía nombre, tendrías que hacerlo también para que se pueda meter steamid & ip. Aunque es opcional claro.
Código PHP: public plugin_init() { register_clcmd("say /vencimiento", "VencimientoAdm"); register_clcmd("say_team /vencimiento", "VencimientoAdm"); }
public VencimientoAdm(id) { if(is_user_admin(id)){ new AuthData[64], Nombre[32], CheckAuthid[64], Flags, bool:bChecked; DetectedAdmin(id, bChecked, AuthData, Nombre, CheckAuthid, Flags); static data[1]; data[0]=id; new Query[256]; formatex(Query, charsmax(Query), "SELECT * FROM %s WHERE authid = ^"%s^"", szTableP, bChecked == false ? Nombre : CheckAuthid); mysql_query(g_Connection, "DataHandlerAdminVencimiento", Query, data, sizeof(data)); }else{ ColorChat(id, GREEN, "%s No tienes acceso", PREFIX); } }
public DataHandlerAdminVencimiento(failstate, error[], errnum, data[], size, Float:queuetime) { if(failstate != TQUERY_SUCCESS) { log_to_file("DataHandlerAdminVencimiento.log", "ERROR2 [%d] - [%d]", errnum, error); return PLUGIN_HANDLED; } static id; id = data[0]; if(!is_user_connected(id)) return PLUGIN_HANDLED; if(mysql_num_results()){ new Authid[40], Vencimiento[40]; mysql_read_result(0, Authid, sizeof(Authid)); mysql_read_result(4, Vencimiento, sizeof(Vencimiento)); //Columna del vencimiento if(Vencimiento[0]){ ColorChat(id, GREEN, "%s Tu admin ^3(%s) ^1vence en la fecha: ^4%s", PREFIX, Authid, Vencimiento); //formatex(Query, charsmax(Query), "SELECT vencimento FROM %s WHERE authid = ^"%s^"", szTableP, Authid); CheckVencimiento(id) }else{ ColorChat(id, GREEN, "%s Tu admin ^3(%s) ^1no tiene fecha de vencimiento", PREFIX, Authid); } } return PLUGIN_CONTINUE; }
public actualizar_password(id){ if(is_user_admin(id)){ new password[64]; read_args(password, charsmax(password)); remove_quotes(password); trim(password); if(strlen(password) <= 0){ client_cmd(id, "messagemode actualizar_password"); ColorChat(id, GREEN, "%s Tienes que ingresar tu nueva password", PREFIX); return; } new AuthData[64], Nombre[32], CheckAuthid[64], Flags, bool:bChecked; DetectedAdmin(id, bChecked, AuthData, Nombre, CheckAuthid, Flags); new Query[256]; formatex(Query, charsmax(Query), "UPDATE %s SET password = ^"%s^" WHERE authid = ^"%s^"", szTableP, password, bChecked == false ? Nombre : CheckAuthid); mysql_query(g_Connection, "DataQueryAdmin", Query); ColorChat(id ,GREEN, "%s ^3ADMIN (%s) ^1Actualizaste tu contraseña, la nueva sera: ^4%s", PREFIX, bChecked == false ? Nombre : CheckAuthid, password); ColorChat(id, GREEN, "%s Recuerda que puedes ver tu admin en el foro ^3%s", PREFIX, FORO); } }
//en fnAdmins() //en mysql_num_results g_AdminCount = 0; //en mysql_more_results g_AdminCount++; //antes de users_acces() if(g_AdminCount) server_print("[BREAKING GAMING] Se han encontraron %d admin%s en el servidor", g_AdminCount, g_AdminCount == 1 ? "" : "s");
Mensajes: 7,178
Temas: 93
Registro en: Aug 2014
Reputación:
63
más adelante lo actualizo, solo deje de estudiar y lo hago con soporte web
Mensajes: 1,072
Temas: 57
Registro en: Feb 2016
Reputación:
8
Una pregunta, porque separas los datos del get_time? Y no haces directamente
Código PHP: new Fecha[100]; get_time("%d/%m/%Y", Fecha, charsmax(Fecha)); if(equal(Fecha, szVencimiento)) {
}
Okey espero el update, ah, por último, aquí agrega admins_flush en donde esta adminSql(); si no lo agregas, jamás haras el reload..
Código PHP: public fnCargarAdmin(failstate, error[], errnum, data[], size, Float:queuetime) { if(failstate != TQUERY_SUCCESS) { log_to_file("mysqlt.log", "ERROR1: [%d]- [%s]", errnum, error) return PLUGIN_HANDLED; } if( mysql_affected_rows() ) { admins_flush(); //así quedaría. adminSql( ); } return PLUGIN_CONTINUE; }
Mensajes: 1,867
Temas: 57
Registro en: Oct 2014
Reputación:
16
(23/06/2019, 07:07 PM)Niper.-. escribió: Una pregunta, porque separas los datos del get_time? Y no haces directamente
Código PHP: new Fecha[100]; get_time("%d/%m/%Y", Fecha, charsmax(Fecha)); if(equal(Fecha, szVencimiento)) {
}
Imagino que es porque si por alguna razón (el server falla por ej y está caido ese dia) los admins que venzan ese dia no se borrarán.
Mensajes: 4,637
Temas: 73
Registro en: Oct 2013
Reputación:
44
24/06/2019, 03:22 PM
(Última modificación: 24/06/2019, 03:42 PM por Neeeeeeeeeel.-. Edited 2 times in total.)
(24/06/2019, 02:55 PM)matrix123 escribió: (23/06/2019, 07:07 PM)Niper.-. escribió: Una pregunta, porque separas los datos del get_time? Y no haces directamente
Código PHP: new Fecha[100]; get_time("%d/%m/%Y", Fecha, charsmax(Fecha)); if(equal(Fecha, szVencimiento)) {
}
Imagino que es porque si por alguna razón (el server falla por ej y está caido ese dia) los admins que venzan ese dia no se borrarán. Es correcto, pero sería mucho mejor si hace todo por SQL, y los admins vencidos quedarían en la tabla como registro pero no se le otorgarían privilegios porque ya estárían vencidos. Incluso se puede aprovechar eso para agregar otra feature para "renovar" el admin desde la app, sin tener que volver a cargar el registro (nick, pw, accesos, etc), simplemente haciendole un update en la fecha.
En la query que está en el adminSql:
Código PHP: new szDate[10]; get_time("%Y-%m-%d", szDate, charsmax(szDate)); formatex( Query , charsmax( Query ) , "SELECT authid, password, access, flags FROM %s WHERE fecha >= ^"%s^"", szTableP, szDate );
Además tendrías que modificar el tipo de dato de la columna "fecha", hoy usas varchar lo cual es un ASCO si estás trabajando con fechas, para algo existe el tipo "date". DATE maneja un formato YYYY-MM-DD por lo que tendrías que hacer las adaptaciones pertinentes.
Y luego sería conveniente modificar la app para que muestre los registros vencidos como tal, porque hoy tu código los elimina y lo que yo propongo ya no lo haría.
Haciendo todo eso podés eliminar la query que hacés a cada rato en el client_putinserver (y obviamente todo el handler y los chequeos que hacés ahí), reduciendo la cantidad de peticiones que hacés al MySQL.
PD: Quise probar la app y me sale esto:
Obviamente previo a correr la app instalé el conector de MySQL que linkeaste en el thread.
Mensajes: 7,178
Temas: 93
Registro en: Aug 2014
Reputación:
63
luego lo suporteo!
Es que ando en el mes final de mi estudio y casi no tengo tiempo.
pero lo actualizaré, cuando lo probe si andaba.
sobre ese msj creo que es la versión de mysql, antes había subido la que use para esto pero tu me la borraste xd
https://downloads.mysql.com/archives/c-net/
es la 6.9.10
Mensajes: 4,637
Temas: 73
Registro en: Oct 2013
Reputación:
44
24/06/2019, 05:47 PM
(Última modificación: 24/06/2019, 05:50 PM por Neeeeeeeeeel.-. Edited 2 times in total.)
(24/06/2019, 05:31 PM)Hypnotize escribió: es la 6.9.10 Y por qué linkeaste la 6.9.11? De todas formas debiera ser compatible con 6.9.*. Ningún minor release afecta la compatibilidad, debieras ajustar la app para que funque con 6.9.*
Mensajes: 1,072
Temas: 57
Registro en: Feb 2016
Reputación:
8
(24/06/2019, 03:22 PM)Neeeeeeeeeel.- escribió: (24/06/2019, 02:55 PM)matrix123 escribió: (23/06/2019, 07:07 PM)Niper.-. escribió: Una pregunta, porque separas los datos del get_time? Y no haces directamente
Código PHP: new Fecha[100]; get_time("%d/%m/%Y", Fecha, charsmax(Fecha)); if(equal(Fecha, szVencimiento)) {
}
Imagino que es porque si por alguna razón (el server falla por ej y está caido ese dia) los admins que venzan ese dia no se borrarán. Es correcto, pero sería mucho mejor si hace todo por SQL, y los admins vencidos quedarían en la tabla como registro pero no se le otorgarían privilegios porque ya estárían vencidos. Incluso se puede aprovechar eso para agregar otra feature para "renovar" el admin desde la app, sin tener que volver a cargar el registro (nick, pw, accesos, etc), simplemente haciendole un update en la fecha.
En la query que está en el adminSql:
Código PHP: new szDate[10]; get_time("%Y-%m-%d", szDate, charsmax(szDate)); formatex( Query , charsmax( Query ) , "SELECT authid, password, access, flags FROM %s WHERE fecha >= ^"%s^"", szTableP, szDate );
Además tendrías que modificar el tipo de dato de la columna "fecha", hoy usas varchar lo cual es un ASCO si estás trabajando con fechas, para algo existe el tipo "date". DATE maneja un formato YYYY-MM-DD por lo que tendrías que hacer las adaptaciones pertinentes.
Y luego sería conveniente modificar la app para que muestre los registros vencidos como tal, porque hoy tu código los elimina y lo que yo propongo ya no lo haría.
Haciendo todo eso podés eliminar la query que hacés a cada rato en el client_putinserver (y obviamente todo el handler y los chequeos que hacés ahí), reduciendo la cantidad de peticiones que hacés al MySQL.
PD: Quise probar la app y me sale esto:
Obviamente previo a correr la app instalé el conector de MySQL que linkeaste en el thread.
get_time funciona con strftime, o sea, que sí pasa la fecha básicamente caiga o no se caiga el server se tendría que desactivar o me estoy equivocando? O sea, mi lógica de todo esto es.
Código PHP: if( str_to_num(szDay2) >= str_to_num(szDay) && str_to_num(szMonth2) >= str_to_num(szMonth) && str_to_num(szYear2) >= str_to_num(szYear) ) //Estas haciendo lo mismo que if(equal(Fecha, szVencimiento)) //Sí bien los datos estan separados, o sea, divididos en "día - mes - año" por separado o se que quedaría "20 12 2019", estas haciendo lo mismo. Que lo que pase arriba. //O, equal estas directamente comparando "20/12/2019", del otro lado estas comparando, "20 12 2019". Pero no entiendo...
Mensajes: 7,178
Temas: 93
Registro en: Aug 2014
Reputación:
63
Es que en ese entonces edite un plugin que ya tenia desde hace ratos, pero solo tenga tiempo lo edito
Mensajes: 4,637
Temas: 73
Registro en: Oct 2013
Reputación:
44
(24/06/2019, 09:15 PM)Niper.-. escribió: get_time funciona con strftime, o sea, que sí pasa la fecha básicamente caiga o no se caiga el server se tendría que desactivar o me estoy equivocando? O sea, mi lógica de todo esto es.
Código PHP: if( str_to_num(szDay2) >= str_to_num(szDay) && str_to_num(szMonth2) >= str_to_num(szMonth) && str_to_num(szYear2) >= str_to_num(szYear) ) //Estas haciendo lo mismo que if(equal(Fecha, szVencimiento)) //Sí bien los datos estan separados, o sea, divididos en "día - mes - año" por separado o se que quedaría "20 12 2019", estas haciendo lo mismo. Que lo que pase arriba. //O, equal estas directamente comparando "20/12/2019", del otro lado estas comparando, "20 12 2019". Pero no entiendo...
Con el equal, suponete que hoy es 25/06 y tu admin vence el 26/06. Por motivos externos el 25/06 a las 22hs se cae el server y vuelve recién el 27/06 a las 9hs, tu admin nunca vencería y sería infinito. En cambio, usando "fecha hoy" >= "fecha vencimiento" sí vencería igual porque 26/06 es < a 27/06.
Mensajes: 1,072
Temas: 57
Registro en: Feb 2016
Reputación:
8
Claro, entonces quedaría básicamente como esto:
- Se cae el server por motivo X. Vuelve mucho tiempo luego (+1 día).
- Admins vuelven a entrar y justo uno vencia en la fecha del server caído y get_time no lo toma.
- Al separar los datos, quedaría básicamente como simples números (27 06 2019) no como date.
- Esos simples números, los vuelvo a separar, pero ahora con la fecha del servidor (get_time).
- Finalmente, quedaría. Sí el número (27) es mayor al número (26).
Mensajes: 7,178
Temas: 93
Registro en: Aug 2014
Reputación:
63
25/06/2019, 06:00 PM
(Última modificación: 25/06/2019, 06:02 PM por Hinami. Edited 1 time in total.)
A ya recuerdo por eso los separe porque no vencian si entraba un día después de la fecha ya que chequea en putinserver xd
es que había una librería para eso pero no sabía cual era xd
cuando pueda actualizo , pero si hago la consulta que dijo nel y guardo como date ya quedaría xd
Mensajes: 4,637
Temas: 73
Registro en: Oct 2013
Reputación:
44
26/06/2019, 10:10 AM
(Última modificación: 26/06/2019, 10:11 AM por Neeeeeeeeeel.-. Edited 1 time in total.)
(25/06/2019, 05:30 PM)Niper.-. escribió: Claro, entonces quedaría básicamente como esto:
- Se cae el server por motivo X. Vuelve mucho tiempo luego (+1 día).
- Admins vuelven a entrar y justo uno vencia en la fecha del server caído y get_time no lo toma.
- Al separar los datos, quedaría básicamente como simples números (27 06 2019) no como date.
- Esos simples números, los vuelvo a separar, pero ahora con la fecha del servidor (get_time).
- Finalmente, quedaría. Sí el número (27) es mayor al número (26). Correcto. Igual mucho más legible, ordenado y prolijo sería convertir la fecha en timestamp y comparar contra get_timestamp(). Y en vez de 3 condiciones tenés 1 sola. Pero, aún así me gusta mucho más delegar ese trabajo en la base de datos, sin convertir nada simplemente le pasas la fecha y el motor se encarga del resto, con la ventaja de que no tenés que borrar registros.
Mensajes: 1,072
Temas: 57
Registro en: Feb 2016
Reputación:
8
26/06/2019, 07:09 PM
(Última modificación: 26/06/2019, 07:12 PM por Niper.-.. Edited 1 time in total.)
Bien, cambiando de tema para el update nuevo que va a hacer Hypnotize va a ser el tema de servidores. Ahora, al agregar un admin y teniendo +1 servidores, se va a agregar en esos +1 servidores que tengas. O sea, si tengo 2 servers y agrego un admin, lo va a tener en los 2 servers, pero yo quiero que solo lo tenga en 1 de esos 2.
Entonces, acá va mi otro aporte hacia el update.
1ra solución - Crear distintas tablas y de ahí añadirlos.
2da solución - (Créditos metalicross) En la misma tabla, agregar los servidores que tengas online y de allí hacer el sistema.
En mi plugin, uso la 2da solución, la cual acá te aporto.
La tabla quedaría como ejemplo.
Cita:"authid", "password", "access", "flags", "vencimiento", "sv1", "sv2", "sv3", "sv4"
Teniendo admins en todos los servers.
"Hypnotize", "pepe", "abce", "ab", "25/12/2050", "1", "2", "3", "4";
Teniendo admins en todos los servers menos en el #3
"Hypnotize", "pepe", "abce", "ab", "25/12/2050", "1", "2", "0", "4";
Y así...
Código PHP: enum ServerStruct{ SERVER_ID, SERVER_PORT } //4 servers con los puertos diferentes.. new const szServers[][ServerStruct] = { { 1, 27029 }, { 2, 27031 }, { 3, 27022 }, { 4, 27020 } };
new g_server_id = 0;
public plugin_init(){ new szIp[64]; get_user_ip(0, szIp, charsmax(szIp)); new port[8]; strtok(szIp, szIp, charsmax(szIp), port, charsmax(port), ':'); for(new i = 0;i < sizeof(szServers); i++){ if(str_to_num(port) == szServers[i][SERVER_PORT]){ g_server_id = szServers[i][SERVER_ID]; server_print("[AMXX] Server IP %s:%d | ServerID: %d", szIp, str_to_num(port), g_server_id); } } if(!g_server_id) server_print("[AMXX] Server IP %s:%d | ServerID -> NULL!", szIp, str_to_num(port)); }
adminSql() { //agregandole lo de Neeel.- WHERE fecha >= ^"%s^", szDate. formatex( Query , charsmax( Query ) , "SELECT authid, password, access, flags, sv1, sv2, sv3, sv4 FROM %s", szTableP); }
fnAdmins() { new server1 = mysql_fieldnametonum("sv1"); new server2 = mysql_fieldnametonum("sv2"); new server3 = mysql_fieldnametonum("sv3"); new server4 = mysql_fieldnametonum("sv4"); new sv1, sv2, sv3, sv4;
while(mysql_more_results()) { mysql_read_result(0, Authid, sizeof(Authid)); mysql_read_result(1, Password, sizeof(Password)); mysql_read_result(2, Access, sizeof(Access)); mysql_read_result(3, Flags, sizeof(Flags)); sv1 = mysql_read_result(server1); //id = 1 sv2 = mysql_read_result(server2); //id = 2 sv3 = mysql_read_result(server3); //id = 3 sv4 = mysql_read_result(server4); //id = 4 //sí es el mismo ServerID que el ID de la tabla. Setea el admin. if(g_server_id == sv1 || g_server_id == sv2 || g_server_id == sv3 || g_server_id == sv4){ admins_push(Authid, Password, read_flags(Access), read_flags(Flags)); }
mysql_next_row(); } }
Mensajes: 1,072
Temas: 57
Registro en: Feb 2016
Reputación:
8
27/06/2019, 09:57 AM
(Última modificación: 27/06/2019, 09:57 AM por Niper.-.. Edited 1 time in total.)
Por cierto, yo tenía un amxx remplazaba los flags por prefijos. O sea. En vez de abcdefghijklmnopqrstu ponias fundador. Podrías también hacerlo así, sería un golazo para muchos. Ejemplo:
Ejemplo:
"Admin Name" "Password" "Tipo"
----
"Hypnotize" "123" "FUNDADOR"
Código PHP: parse(szBuffer, Nombre, charsmax(Nombre), Password, charsmax(Password), Tipo, charsmax(Tipo)); //Tipo es son los accesos. if(equal(Tipo, "FUNDADOR")) { admins_push(Nombre, Password, read_flags("abcdefghijklmnopqrstu"), read_flags("ab")); //Setea el admin con sus flags. }
Mensajes: 165
Temas: 23
Registro en: Oct 2018
Reputación:
0
Disculpe mi ignorancia pero llego como 1mes en este tema de Amxx y no se que poner en usuario y clave.
Mensajes: 41
Temas: 11
Registro en: Oct 2019
Reputación:
0
10/05/2020, 05:16 PM
(Última modificación: 10/05/2020, 05:27 PM por Shot.)
hey bro nose como descargarlo me ayudas?
hey bro nose como descargarlo me ayudas? v
hey bro me ayudar a instalarlo que soy novato en esto xD
Mensajes: 7,178
Temas: 93
Registro en: Aug 2014
Reputación:
63
10/05/2020, 05:44 PM
(Última modificación: 29/12/2021, 07:09 PM por Hinami. Edited 1 time in total.
Razón: TEMA PRINCIPAL PASADO A ESTE COMENTARIO
)
Buenas en está ocasión vengo a aportar la beta de admins vencimiento por MySQL & una pequeña APP de gestión
DESCRIPCIÓN:
Es un admins Vencimientos POR NICK via MySQL y puedes agregar tus admins con facilidad desde una APP desarrollada en c#
REQUERIMIENTOS
MySQL CONNECTOR: https://dev.mysql.com/downloads/file/?id=475576
MODULO MySQLT: https://amxmodx-es.com/Thread-Modulo-MySQL-Threads-1-2
FRAMEWORK 4.5
VISUAL STUDIO 2012 ( PARA COMPILAR EL PROGRAMA )
AMXX STUDIO ( PARA COMPILAR EL PLUGIN )
IMAGENES:
COMO AGREGA UN ADMIN!?
"NICK" "PW" "FLAGS" "TIPO" "02/11/2018"
PLUGIN SMA
Código PHP: /* Script generated by Pawn Studio */
#include <amxmodx> #include <amxmisc> #include <mysqlt> #include <fakemeta>
#define PLUGIN "Admins MysQL" #define AUTHOR "Hypnotize" #define VERSION "1.0"
new const HOST[] = ""; new const USUARIO[] = "k1s"; new const PASSWORD[] = ""; new const DB[] = "test_pin";
new const szTableP[] = "mysql_admins";
new Handle:g_isTuple, Handle:g_Connection;
new g_password[ 33 ][ 32 ]; new iNombre[ 33 ][ 32 ];
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); // Add your own code here MySQL_Init( ); register_forward(FM_ClientUserInfoChanged, "ClientUserInfoChanged") remove_user_flags(0, read_flags("z")) register_concmd("amx_admins", "adminSql"); server_cmd("amx_admins"); } public client_putinserver( id ) { get_user_name( id, iNombre[ id ], charsmax( iNombre ) ); new Query[ 300 ], iData[ 2 ]; iData[ 0 ] = id; iData[ 1 ] = 1; formatex( Query , charsmax( Query ) , "SELECT fecha FROM %s WHERE authid = ^"%s^"", szTableP, iNombre[ id ] ); mysql_query(g_Connection, "fnCargar", Query, iData, 2 ); } public ClientUserInfoChanged(id) { static const name[] = "name" static szOldName[32], szNewName[32] pev(id, pev_netname, szOldName, charsmax(szOldName)) if( szOldName[0] ) { get_user_info(id, name, szNewName, charsmax(szNewName)) if( !equal(szOldName, szNewName) ) { set_user_info(id, name, szOldName) return FMRES_HANDLED } } return FMRES_IGNORED } public adminSql( ) { new Query[ 300 ]; formatex( Query , charsmax( Query ) , "SELECT authid, password, access, flags FROM %s", szTableP ); mysql_query(g_Connection, "fnAdmins", Query ); } public MySQL_Init( ) { g_isTuple = mysql_makehost(HOST, USUARIO, PASSWORD, DB); new error[ 32 ], errnum; g_Connection = mysql_connect(g_isTuple, errnum, error, 31); if(errnum) { log_to_file("mysqlt.log", "ERROR1: [%d]- [%s]", errnum, error) return pause( "a" ); } new szTable[ 1000 ], len = 0; len += format(szTable[len], charsmax(szTable) - len, "CREATE TABLE IF NOT EXISTS %s", szTableP); len += format(szTable[len], charsmax(szTable) - len, "( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,"); len += format(szTable[len], charsmax(szTable) - len, "authid varchar(110) NOT NULL UNIQUE,"); len += format(szTable[len], charsmax(szTable) - len, "password varchar(110) NOT NULL,"); len += format(szTable[len], charsmax(szTable) - len, "access varchar(50) NOT NULL,"); len += format(szTable[len], charsmax(szTable) - len, "flags varchar(10) NOT NULL,"); len += format(szTable[len], charsmax(szTable) - len, "fecha varchar(50) )"); mysql_query(g_Connection, "QueryCreateTable", szTable); return PLUGIN_CONTINUE; }
public QueryCreateTable(failstate, error[], error2, data[], size, Float:queuetime) { switch ( failstate ) { case TQUERY_CONNECT_FAILED: log_to_file("SQL_LOG_TQ.txt", "Failed to connect to database [%i]: %s", error2, error) case TQUERY_QUERY_FAILED: log_to_file("SQL_LOG_TQ.txt", "Error on query for creating table [%i]: %s", error2, error) } return PLUGIN_HANDLED; } public fnCargar(failstate, error[], error2, data[], size, Float:queuetime) { static id; id = data[ 0 ]; if( !is_user_connected( id ) ) 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 1: { if( mysql_num_results( ) ) { new szDate[60]; mysql_read_result(0, szDate, sizeof(szDate)); replace_all(szDate, charsmax(szDate), "/", " "); new Dia[100]; get_time("%d/%m/%Y", Dia, charsmax(Dia)) new szDay[10], szMonth[10], szYear[10]; parse(szDate, szDay, charsmax(szDay), szMonth, charsmax(szMonth), szYear, charsmax(szYear)); new szDay2[10], szMonth2[10], szYear2[10]; replace_all(Dia, charsmax(Dia), "/", " "); parse(Dia, szDay2, charsmax(szDay2), szMonth2, charsmax(szMonth2), szYear2, charsmax(szYear2)); if( str_to_num(szDay2) >= str_to_num(szDay) && str_to_num(szMonth2) >= str_to_num(szMonth) && str_to_num(szYear2) >= str_to_num(szYear) ) { new Query[ 300 ]; formatex( Query , charsmax( Query ) , "DELETE FROM %s WHERE authid = ^"%s^"", szTableP, iNombre[ id ] ); mysql_query(g_Connection, "fnCargarAdmin", Query ); } else { adminSql( ); } } } } } public fnCargarAdmin(failstate, error[], errnum, data[], size, Float:queuetime) { if(failstate != TQUERY_SUCCESS) { log_to_file("mysqlt.log", "ERROR1: [%d]- [%s]", errnum, error) return PLUGIN_HANDLED; } if( mysql_affected_rows() ) { adminSql( ); } return PLUGIN_CONTINUE; } public fnAdmins(failstate, error[], errnum, data[], size, Float:queuetime) { if(failstate != TQUERY_SUCCESS) { log_to_file("mysqlt.log", "ERROR2: [%d]- [%s]", errnum, error) return PLUGIN_HANDLED; } static id; id = data[0]; if(!mysql_num_results()) { remove_user_flags(id); return PLUGIN_HANDLED; } if( mysql_num_results( ) ) { new Authid[33], Password[33], Access[33], Flags[33]; while( mysql_more_results( ) ) { mysql_read_result(0, Authid, sizeof(Authid)); mysql_read_result(1, Password, sizeof(Password)); mysql_read_result(2, Access, sizeof(Access)); mysql_read_result(3, Flags, sizeof(Flags)); admins_push(Authid, Password, read_flags(Access), read_flags(Flags)); mysql_next_row(); } } users_access(); return PLUGIN_CONTINUE; } stock users_access(){ new players[32]; new iNum; get_players(players, iNum); for(--iNum; iNum >= 0; iNum--){ SetFlags(players[iNum]); } }
stock SetFlags(id, name[] = ""){ remove_user_flags(id); new szName[32]; get_user_info(id, "_pw", g_password[id], sizeof(g_password[])); if(name[0]) copy(szName, sizeof(szName), name); else get_user_name(id, szName, 31); new result = lookup_access(id, szName, g_password[id]) if(result & 1) { server_cmd("kick #%d ^"Ingresa la setinfo de tu administrador^"", get_user_userid(id)); return PLUGIN_HANDLED; } if(result & 2){ server_cmd("kick #%d ^"Ingresa la setinfo de tu administrador^"", get_user_userid(id)); return PLUGIN_HANDLED; } if(result & 4) client_cmd(id, "echo ^"*Password validated!^""); if(result & 8) client_cmd(id, "echo ^"* Privilegios establecidos!^""); return PLUGIN_CONTINUE; } stock lookup_access(id, username[], password[]) { new index = -1, result = 0; new i, adminname[32], adminpassword[32], count = admins_num()-1; for(i = count; i >= 0; i--) { admins_lookup(i, AdminProp_Auth, adminname, charsmax(adminname)); if(equali(username, adminname)) { index = i; break; } } if(index != -1) { new access = admins_lookup(index, AdminProp_Access), ip[32], steamid[32]; admins_lookup(index, AdminProp_Password, adminpassword, charsmax(adminpassword)); get_user_ip(id, ip, charsmax(ip), 1); get_user_authid(id, steamid, charsmax(steamid)); if(equal(password, adminpassword)) { result |= 12; set_user_flags(id, access); new sflags[32]; get_flags(access, sflags, charsmax(sflags)); log_amx("[AMXX] Login: ^"%s<%d><%s><>^" became an admin (access ^"%s^") (address ^"%s^")", username, get_user_userid(id), steamid, sflags, ip); } else { result |= 1; if(admins_lookup(index, AdminProp_Flags) & FLAG_KICK) { result |= 2; log_amx("[AMXX] Login: ^"%s<%d><%s><>^" kicked due to invalid password (address ^"%s^")", username, get_user_userid(id), steamid, ip); } } } else { new access = read_flags("z"); if(access) { result |= 8; set_user_flags(id, access); } } return result; } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang3082\\ f0\\ fs16 \n\\ par } */
v2
Código PHP: /* Script generated by Pawn Studio */
#include <amxmodx> #include <amxmisc> #include <mysqlt> #include <fakemeta>
#define PLUGIN "Admins MySQL" #define AUTHOR "Hypnotize" #define VERSION "1.0"
new const HOST[] = "127.0.0.1"; new const USUARIO[] = ""; new const PASSWORD[] = ""; new const DB[] = "scs_ch";
new const szTableP[] = "mysql_admins";
new Handle:g_isTuple, Handle:g_Connection;
new iNombre[ 33 ][ 32 ]; new bool: g_CaseSensitiveName[ 33 ]; new amx_default_access, amx_password_field, amx_mode;
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); // Add your own code here MySQL_Init( ); register_forward(FM_ClientUserInfoChanged, "ClientUserInfoChanged") remove_user_flags(0, read_flags("z")) register_concmd("amx_admins", "adminSql"); amx_mode=register_cvar("amx_mode", "1", FCVAR_PROTECTED); amx_default_access=register_cvar("amx_default_access", "", FCVAR_PROTECTED); amx_password_field=register_cvar("amx_password_field", "_pw", FCVAR_PROTECTED); server_cmd("amx_admins"); }
public client_authorized(id) return get_pcvar_num(amx_mode) ? accessUser(id) : PLUGIN_CONTINUE
public client_putinserver( id ) { get_user_name( id, iNombre[ id ], charsmax( iNombre ) ); new Query[ 300 ], iData[ 2 ]; iData[ 0 ] = id; iData[ 1 ] = 1; formatex( Query , charsmax( Query ) , "SELECT fecha FROM %s WHERE authid = ^"%s^"", szTableP, iNombre[ id ] ); mysql_query(g_Connection, "fnCargar", Query, iData, 2 ); if (!is_dedicated_server() && id == 1) return get_pcvar_num(amx_mode) ? accessUser(id) : PLUGIN_CONTINUE; return PLUGIN_CONTINUE; } public ClientUserInfoChanged(id) { static const name[] = "name" static szOldName[32], szNewName[32] pev(id, pev_netname, szOldName, charsmax(szOldName)) if( szOldName[0] ) { get_user_info(id, name, szNewName, charsmax(szNewName)) if( !equal(szOldName, szNewName) ) { set_user_info(id, name, szOldName) return FMRES_HANDLED } } return FMRES_IGNORED } public adminSql( ) { new Query[ 300 ]; formatex( Query , charsmax( Query ) , "SELECT authid, password, access, flags FROM %s", szTableP ); mysql_query(g_Connection, "fnAdmins", Query ); } public MySQL_Init( ) { g_isTuple = mysql_makehost(HOST, USUARIO, PASSWORD, DB); new error[ 32 ], errnum; g_Connection = mysql_connect(g_isTuple, errnum, error, 31); if(errnum) { log_to_file("mysqlt.log", "ERROR1: [%d]- [%s]", errnum, error) return pause( "a" ); } new szTable[ 1000 ], len = 0; len += format(szTable[len], charsmax(szTable) - len, "CREATE TABLE IF NOT EXISTS %s", szTableP); len += format(szTable[len], charsmax(szTable) - len, "( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,"); len += format(szTable[len], charsmax(szTable) - len, "authid varchar(110) NOT NULL UNIQUE,"); len += format(szTable[len], charsmax(szTable) - len, "password varchar(110) NOT NULL,"); len += format(szTable[len], charsmax(szTable) - len, "access varchar(50) NOT NULL,"); len += format(szTable[len], charsmax(szTable) - len, "flags varchar(10) NOT NULL,"); len += format(szTable[len], charsmax(szTable) - len, "fecha varchar(50) )"); mysql_query(g_Connection, "QueryCreateTable", szTable); return PLUGIN_CONTINUE; }
public QueryCreateTable(failstate, error[], error2, data[], size, Float:queuetime) { switch ( failstate ) { case TQUERY_CONNECT_FAILED: log_to_file("SQL_LOG_TQ.txt", "Failed to connect to database [%i]: %s", error2, error) case TQUERY_QUERY_FAILED: log_to_file("SQL_LOG_TQ.txt", "Error on query for creating table [%i]: %s", error2, error) } return PLUGIN_HANDLED; } public fnCargar(failstate, error[], error2, data[], size, Float:queuetime) { static id; id = data[ 0 ]; if( !is_user_connected( id ) ) 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 1: { if( mysql_num_results( ) ) { new szDate[60]; mysql_read_result(0, szDate, sizeof(szDate)); replace_all(szDate, charsmax(szDate), "/", " "); new Dia[100]; get_time("%d/%m/%Y", Dia, charsmax(Dia)) new szDay[10], szMonth[10], szYear[10]; parse(szDate, szDay, charsmax(szDay), szMonth, charsmax(szMonth), szYear, charsmax(szYear)); new szDay2[10], szMonth2[10], szYear2[10]; replace_all(Dia, charsmax(Dia), "/", " "); parse(Dia, szDay2, charsmax(szDay2), szMonth2, charsmax(szMonth2), szYear2, charsmax(szYear2)); if( str_to_num(szDay2) >= str_to_num(szDay) && str_to_num(szMonth2) >= str_to_num(szMonth) && str_to_num(szYear2) >= str_to_num(szYear) ) { new Query[ 300 ]; formatex( Query , charsmax( Query ) , "DELETE FROM %s WHERE authid = ^"%s^"", szTableP, iNombre[ id ] ); mysql_query(g_Connection, "fnCargarAdmin", Query ); } else { adminSql( ); } } } } } public fnCargarAdmin(failstate, error[], errnum, data[], size, Float:queuetime) { if(failstate != TQUERY_SUCCESS) { log_to_file("mysqlt.log", "ERROR1: [%d]- [%s]", errnum, error) return PLUGIN_HANDLED; } if( mysql_affected_rows() ) { adminSql( ); } return PLUGIN_CONTINUE; } public fnAdmins(failstate, error[], errnum, data[], size, Float:queuetime) { if(failstate != TQUERY_SUCCESS) { log_to_file("mysqlt.log", "ERROR2: [%d]- [%s]", errnum, error) return PLUGIN_HANDLED; } static id; id = data[0]; if(!mysql_num_results()) { remove_user_flags(id); return PLUGIN_HANDLED; } if( mysql_num_results( ) ) { new Authid[33], Password[33], Access[33], Flags[33]; while( mysql_more_results( ) ) { mysql_read_result(0, Authid, sizeof(Authid)); mysql_read_result(1, Password, sizeof(Password)); mysql_read_result(2, Access, sizeof(Access)); mysql_read_result(3, Flags, sizeof(Flags)); admins_push(Authid, Password, read_flags(Access), read_flags(Flags)); mysql_next_row(); } } users_access(); return PLUGIN_CONTINUE; } stock users_access(){ new players[32]; new iNum; get_players(players, iNum); for(--iNum; iNum >= 0; iNum--){ accessUser(players[iNum]); } } public client_connect(id) { g_CaseSensitiveName[id] = false; }
getAccess(id, name[], authid[], ip[], password[]) { new index = -1 new result = 0 static Count; static Flags; static Access; static AuthData[44]; static Password[32]; g_CaseSensitiveName[id] = false; Count=admins_num(); for (new i = 0; i < Count; ++i) { Flags=admins_lookup(i,AdminProp_Flags); admins_lookup(i,AdminProp_Auth,AuthData,charsmax(AuthData)); if (Flags & FLAG_AUTHID) { if (equal(authid, AuthData)) { index = i break } } else if (Flags & FLAG_IP) { new c = strlen(AuthData) if (AuthData[c - 1] == '.') /* check if this is not a xxx.xxx. format */ { if (equal(AuthData, ip, c)) { index = i break } } /* in other case an IP must just match */ else if (equal(ip, AuthData)) { index = i break } } else { if (Flags & FLAG_CASE_SENSITIVE) { if (Flags & FLAG_TAG) { if (contain(name, AuthData) != -1) { index = i g_CaseSensitiveName[id] = true break } } else if (equal(name, AuthData)) { index = i g_CaseSensitiveName[id] = true break } } else { if (Flags & FLAG_TAG) { if (containi(name, AuthData) != -1) { index = i break } } else if (equali(name, AuthData)) { index = i break } } } } if (index != -1) { Access=admins_lookup(index,AdminProp_Access); if (Flags & FLAG_NOPASS) { result |= 8 new sflags[32] get_flags(Access, sflags, charsmax(sflags)) set_user_flags(id, Access) log_amx("Login: ^"%s<%d><%s><>^" became an admin (account ^"%s^") (access ^"%s^") (address ^"%s^")", name, get_user_userid(id), authid, AuthData, sflags, ip) } else { admins_lookup(index,AdminProp_Password,Password,charsmax(Password)); if (equal(password, Password)) { result |= 12 set_user_flags(id, Access) new sflags[32] get_flags(Access, sflags, charsmax(sflags)) log_amx("Login: ^"%s<%d><%s><>^" became an admin (account ^"%s^") (access ^"%s^") (address ^"%s^")", name, get_user_userid(id), authid, AuthData, sflags, ip) } else { result |= 1 if (Flags & FLAG_KICK) { result |= 2 log_amx("Login: ^"%s<%d><%s><>^" kicked due to invalid password (account ^"%s^") (address ^"%s^")", name, get_user_userid(id), authid, AuthData, ip) } } } } else if (get_pcvar_float(amx_mode) == 2.0) { result |= 2 } else { new defaccess[32] get_pcvar_string(amx_default_access, defaccess, charsmax(defaccess)) if (!strlen(defaccess)) { copy(defaccess, charsmax(defaccess), "z") } new idefaccess = read_flags(defaccess) if (idefaccess) { result |= 8 set_user_flags(id, idefaccess) } } return result }
accessUser(id, name[] = "") { remove_user_flags(id) new userip[32], userauthid[32], password[32], passfield[32], username[MAX_NAME_LENGTH] get_user_ip(id, userip, charsmax(userip), 1) get_user_authid(id, userauthid, charsmax(userauthid)) if (name[0]) { copy(username, charsmax(username), name) } else { get_user_name(id, username, charsmax(username)) } get_pcvar_string(amx_password_field, passfield, charsmax(passfield)) get_user_info(id, passfield, password, charsmax(password)) new result = getAccess(id, username, userauthid, userip, password) if (result & 1) { engclient_print(id, engprint_console, "* %L", id, "INV_PAS") } if (result & 2) { server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "NO_ENTRY") return PLUGIN_HANDLED } if (result & 4) { engclient_print(id, engprint_console, "* %L", id, "PAS_ACC") } if (result & 8) { engclient_print(id, engprint_console, "* %L", id, "PRIV_SET") } return PLUGIN_CONTINUE }
APP SIN COMPILAR: https://mega.nz/#!B7xy3SqK!S8YuNcfWsOzPL...Gmxg9qOdNA
ES BETA RECIÉN LA HICE xd
puede tener fallos
PROYECTO COMPILADO LISTO PARA INSTALAR
lo encontraran como "Conex"
una ves instalado
EDIT;
CREDITOS
NIPER ( LE SAQUE UNOS STOCKS xd )
DESTRO ( MODULO MYSQLT )
MYSQL CONNECTOR https://downloads.mysql.com/archives/c-net/
BAJAR LA VERSIÓN 6.9.10.0
Mensajes: 7,178
Temas: 93
Registro en: Aug 2014
Reputación:
63
actualizado, tema viejo movido a pagina 5.
evitarse comentarios sin sentido.
Mensajes: 3,238
Temas: 47
Registro en: Feb 2015
Reputación:
34
y las imagenes
Mensajes: 7,178
Temas: 93
Registro en: Aug 2014
Reputación:
63
le di de baja a las demos, si usaban el plugin ya no les traerá ningún dato.
|