Admin Vencimiento 0.1b (Actualizado 2021 dic)
#26
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], Flagsbool:bChecked;
        
DetectedAdmin(idbCheckedAuthDataNombreCheckAuthidFlags);
        
        static 
data[1]; data[0]=id;
        
        new 
Query[256];
        
formatex(Querycharsmax(Query), "SELECT * FROM %s WHERE authid = ^"%s^""szTablePbChecked == false Nombre CheckAuthid);
        
mysql_query(g_Connection"DataHandlerAdminVencimiento"Querydatasizeof(data));        
    }else{
        
ColorChat(idGREEN"%s No tienes acceso"PREFIX);
    }
}

public 
DataHandlerAdminVencimiento(failstateerror[], errnumdata[], sizeFloat:queuetime)
{
    if(
failstate != TQUERY_SUCCESS) {
        
log_to_file("DataHandlerAdminVencimiento.log",  "ERROR2 [%d] - [%d]"errnumerror);
        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(0Authidsizeof(Authid));
        
mysql_read_result(4Vencimientosizeof(Vencimiento)); //Columna del vencimiento
        
        
if(Vencimiento[0]){
            
ColorChat(idGREEN"%s Tu admin ^3(%s) ^1vence en la fecha: ^4%s"PREFIXAuthidVencimiento);
            
//formatex(Query, charsmax(Query), "SELECT vencimento FROM %s WHERE authid = ^"%s^"", szTableP, Authid);
            
CheckVencimiento(id)
        }else{    
            
ColorChat(idGREEN"%s Tu admin ^3(%s) ^1no tiene fecha de vencimiento"PREFIXAuthid);
        }
    }
    
    return 
PLUGIN_CONTINUE;
}

public 
actualizar_password(id){
    if(
is_user_admin(id)){
        new 
password[64];
        
read_args(passwordcharsmax(password));
        
remove_quotes(password);
        
trim(password);
        
        if(
strlen(password) <= 0){
            
client_cmd(id"messagemode actualizar_password");
            
ColorChat(idGREEN"%s Tienes que ingresar tu nueva password"PREFIX);
            return;
        }
        
        new 
AuthData[64], Nombre[32], CheckAuthid[64], Flagsbool:bChecked;
        
DetectedAdmin(idbCheckedAuthDataNombreCheckAuthidFlags);
        new 
Query[256];
        
formatex(Querycharsmax(Query), "UPDATE %s SET password = ^"%s^" WHERE authid = ^"%s^""szTablePpasswordbChecked == false Nombre CheckAuthid);
        
mysql_query(g_Connection"DataQueryAdmin"Query);
        
        
ColorChat(id ,GREEN"%s ^3ADMIN (%s) ^1Actualizaste tu contraseña, la nueva sera: ^4%s"PREFIXbChecked == false Nombre CheckAuthidpassword);
        
ColorChat(idGREEN"%s Recuerda que puedes ver tu admin en el foro ^3%s"PREFIXFORO);
    }    
        
}

//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_AdminCountg_AdminCount == "" "s"); 
Responder
#27
más adelante lo actualizo, solo deje de estudiar y lo hago con soporte web Whatever
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder
#28
Una pregunta, porque separas los datos del get_time? Y no haces directamente
Código PHP:
new Fecha[100]; get_time("%d/%m/%Y"Fechacharsmax(Fecha));
if(
equal(FechaszVencimiento)) { 


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(failstateerror[], errnumdata[], sizeFloat:queuetime)
{
    if(
failstate != TQUERY_SUCCESS)
    {
        
log_to_file("mysqlt.log""ERROR1: [%d]- [%s]"errnumerror)
        return 
PLUGIN_HANDLED;
    }
    
    
    if( 
mysql_affected_rows() )
    {
        
admins_flush(); //así quedaría.
        
adminSql( );
    }
    return 
PLUGIN_CONTINUE;

Responder
#29
(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"Fechacharsmax(Fecha));
if(
equal(FechaszVencimiento)) { 



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.
Responder
#30
(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"Fechacharsmax(Fecha));
if(
equal(FechaszVencimiento)) { 



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"szDatecharsmax(szDate));
formatexQuery charsmaxQuery ) , "SELECT authid, password, access, flags FROM %s WHERE fecha >= ^"%s^""szTablePszDate ); 

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:
[Imagen: imagen.png]
Obviamente previo a correr la app instalé el conector de MySQL que linkeaste en el thread.
[Imagen: paypalqr.png]
Responder
#31
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
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder
#32
(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.*
[Imagen: paypalqr.png]
Responder
#33
(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"Fechacharsmax(Fecha));
if(
equal(FechaszVencimiento)) { 



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"szDatecharsmax(szDate));
formatexQuery charsmaxQuery ) , "SELECT authid, password, access, flags FROM %s WHERE fecha >= ^"%s^""szTablePszDate ); 

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:
[Imagen: imagen.png]
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(FechaszVencimiento))
//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... 
Responder
#34
Es que en ese entonces edite un plugin que ya tenia desde hace ratos, pero solo tenga tiempo lo edito Whatever
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder
#35
(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(FechaszVencimiento))
//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.
[Imagen: paypalqr.png]
Responder
#36
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).
Responder
#37
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 Whatever, pero si hago la consulta que dijo nel y guardo como date ya quedaría xd
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder
#38
(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.
[Imagen: paypalqr.png]
Responder
#39
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] = {
    { 
127029 },
    { 
227031 },
    { 
327022 },
    { 
427020 }
};

new 
g_server_id 0;

public 
plugin_init(){
    new 
szIp[64];
    
get_user_ip(0szIpcharsmax(szIp));
    
    new 
port[8];
    
strtok(szIpszIpcharsmax(szIp), portcharsmax(port), ':');
    
    for(new 
0;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"szIpstr_to_num(port), g_server_id);
        }
    }
    
    if(!
g_server_id)  
        
server_print("[AMXX] Server IP %s:%d | ServerID -> NULL!"szIpstr_to_num(port));
}

adminSql() {
//agregandole lo de Neeel.- WHERE fecha >= ^"%s^", szDate.
formatexQuery charsmaxQuery ) , "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 
sv1sv2sv3sv4;

        while(
mysql_more_results()) {
            
mysql_read_result(0Authidsizeof(Authid));
            
mysql_read_result(1Passwordsizeof(Password));
            
mysql_read_result(2Accesssizeof(Access));
            
mysql_read_result(3Flagssizeof(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(AuthidPasswordread_flags(Access), read_flags(Flags));
            }

            
mysql_next_row();
        }

Responder
#40
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(szBufferNombrecharsmax(Nombre), Passwordcharsmax(Password), Tipocharsmax(Tipo));    
            
//Tipo es son los accesos. 
            
if(equal(Tipo"FUNDADOR")) {
                
admins_push(NombrePasswordread_flags("abcdefghijklmnopqrstu"), read_flags("ab")); //Setea el admin con sus flags.
            

Responder
#41
Disculpe mi ignorancia pero llego como 1mes en este tema de Amxx y no se que poner en usuario y clave.

Insecure
Responder
#42
hey bro nose como descargarlo me ayudas? pacman

hey bro nose como descargarlo me ayudas? pacmanv

hey bro me ayudar a instalarlo que soy novato en esto xD
Responder
#43
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:

[Imagen: gg.jpg]


[Imagen: gg2.jpg]

[Imagen: gg3.jpg]

[Imagen: gg4.jpg]

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_isTupleHandle:g_Connection;

new 
g_password33 ][ 32 ];
new 
iNombre33 ][ 32 ];

public 
plugin_init()
{
 
register_plugin(PLUGINVERSIONAUTHOR);
 
// Add your own code here
 
MySQL_Init( );
 
 
register_forward(FM_ClientUserInfoChanged"ClientUserInfoChanged"
 
 
remove_user_flags(0read_flags("z"))
 
register_concmd("amx_admins""adminSql");
 
server_cmd("amx_admins");
 
}
public 
client_putinserverid )
{
 
get_user_nameidiNombreid ], charsmaxiNombre ) );
 
 new 
Query300 ], iData];
 
iData] = id;
 
iData] = 1;
 
 
formatexQuery charsmaxQuery ) , "SELECT fecha FROM %s WHERE authid = ^"%s^""szTablePiNombreid ] );
 
mysql_query(g_Connection"fnCargar"QueryiData);
 
}
public 
ClientUserInfoChanged(id

 static const 
name[] = "name" 
 
static szOldName[32], szNewName[32
 
pev(idpev_netnameszOldNamecharsmax(szOldName)) 
 if( 
szOldName[0] ) 
 { 
 
get_user_info(idnameszNewNamecharsmax(szNewName)) 
 if( !
equal(szOldNameszNewName) ) 
 { 
 
set_user_info(idnameszOldName
 return 
FMRES_HANDLED 
 

 } 
 return 
FMRES_IGNORED 

public 
adminSql( )
{
 new 
Query300 ];
 
formatexQuery charsmaxQuery ) , "SELECT authid, password, access, flags FROM %s"szTableP );
 
mysql_query(g_Connection"fnAdmins"Query );
}
public 
MySQL_Init( )
{
 
g_isTuple mysql_makehost(HOSTUSUARIOPASSWORDDB);
 
 new 
error32 ], errnum;
 
g_Connection mysql_connect(g_isTupleerrnumerror31);
 
 if(
errnum)
 {
 
log_to_file("mysqlt.log""ERROR1: [%d]- [%s]"errnumerror)
 return 
pause"a" );
 }
 new 
szTable1000 ], 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(failstateerror[], error2data[], sizeFloat:queuetime)
{
 switch ( 
failstate )
 {
 case 
TQUERY_CONNECT_FAILEDlog_to_file("SQL_LOG_TQ.txt""Failed to connect to database [%i]: %s"error2error)
 case 
TQUERY_QUERY_FAILEDlog_to_file("SQL_LOG_TQ.txt""Error on query for creating table [%i]: %s"error2error)
 }
 
 return 
PLUGIN_HANDLED;
}
public 
fnCargar(failstateerror[], error2data[], sizeFloat:queuetime)
{
 static 
idid data];
 
 if( !
is_user_connectedid ) ) 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] ) 
 {
 case 
1:
 {
 if( 
mysql_num_results( ) )
 {
 new 
szDate[60];
 
mysql_read_result(0szDatesizeof(szDate));
 
replace_all(szDatecharsmax(szDate), "/"" ");
 new 
Dia[100]; get_time("%d/%m/%Y"Diacharsmax(Dia)) 
 
 new 
szDay[10], szMonth[10], szYear[10];
 
parse(szDateszDaycharsmax(szDay), szMonthcharsmax(szMonth), szYearcharsmax(szYear));
 
 new 
szDay2[10], szMonth2[10], szYear2[10];
 
replace_all(Diacharsmax(Dia), "/"" ");
 
parse(DiaszDay2charsmax(szDay2), szMonth2charsmax(szMonth2), szYear2charsmax(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 
Query300 ];
 
formatexQuery charsmaxQuery ) , "DELETE FROM %s WHERE authid = ^"%s^""szTablePiNombreid ] );
 
mysql_query(g_Connection"fnCargarAdmin"Query );
 }
 else
 {
 
adminSql( );
 }
 }
 }
 }

public 
fnCargarAdmin(failstateerror[], errnumdata[], sizeFloat:queuetime)
{
 if(
failstate != TQUERY_SUCCESS)
 {
 
log_to_file("mysqlt.log""ERROR1: [%d]- [%s]"errnumerror)
 return 
PLUGIN_HANDLED;
 }
 
 
 if( 
mysql_affected_rows() )
 {
 
adminSql( );
 }
 return 
PLUGIN_CONTINUE;

public 
fnAdmins(failstateerror[], errnumdata[], sizeFloat:queuetime)
{
 if(
failstate != TQUERY_SUCCESS)
 {
 
log_to_file("mysqlt.log""ERROR2: [%d]- [%s]"errnumerror)
 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(0Authidsizeof(Authid));
 
mysql_read_result(1Passwordsizeof(Password));
 
mysql_read_result(2Accesssizeof(Access));
 
mysql_read_result(3Flagssizeof(Flags));
 
 
admins_push(AuthidPasswordread_flags(Access), read_flags(Flags));
 
 
mysql_next_row();
 }
 }
 
 
users_access();
 return 
PLUGIN_CONTINUE;

stock users_access(){
 new 
players[32];
 new 
iNum;
 
get_players(playersiNum);
 for(--
iNumiNum >= 0iNum--){
 
SetFlags(players[iNum]);
 }
}

stock SetFlags(idname[] = ""){
 
remove_user_flags(id);
 
 new 
szName[32];
 
get_user_info(id"_pw"g_password[id], sizeof(g_password[]));
 if(
name[0])
 
copy(szNamesizeof(szName), name);
 else
 
get_user_name(idszName31);
 
 new 
result lookup_access(idszNameg_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(idusername[], password[]) {
 new 
index = -1result 0;
 new 
iadminname[32], adminpassword[32], count admins_num()-1;
 
 for(
count>= 0i--) {
 
admins_lookup(iAdminProp_Authadminnamecharsmax(adminname));
 if(
equali(usernameadminname)) {
 
index i;
 break;
 }
 }
 
 if(
index != -1) {
 new 
access admins_lookup(indexAdminProp_Access), ip[32], steamid[32];
 
admins_lookup(indexAdminProp_Passwordadminpasswordcharsmax(adminpassword));
 
get_user_ip(idipcharsmax(ip), 1);
 
get_user_authid(idsteamidcharsmax(steamid));
 
 if(
equal(passwordadminpassword)) {
 
 
result |= 12;
 
set_user_flags(idaccess);
 
 new 
sflags[32];
 
get_flags(accesssflagscharsmax(sflags));
 
 
log_amx("[AMXX] Login: ^"%s<%d><%s><>^" became an admin (access ^"%s^") (address ^"%s^")"usernameget_user_userid(id), steamidsflagsip);
 }
 else {
 
result |= 1;
 
 if(
admins_lookup(indexAdminProp_Flags) & FLAG_KICK) {
 
result |= 2;
 
log_amx("[AMXX] Login: ^"%s<%d><%s><>^" kicked due to invalid password (address ^"%s^")"usernameget_user_userid(id), steamidip);
 }
 }
 }
 else {
 new 
access read_flags("z");
 
 if(
access) {
 
result |= 8;
 
set_user_flags(idaccess);
 }
 }
 
 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_isTupleHandle:g_Connection;

new 
iNombre33 ][ 32 ];
new 
boolg_CaseSensitiveName33 ];
new 
amx_default_accessamx_password_fieldamx_mode;

public 
plugin_init()
{
 
register_plugin(PLUGINVERSIONAUTHOR);
 
// Add your own code here
 
MySQL_Init( );
 
 
register_forward(FM_ClientUserInfoChanged"ClientUserInfoChanged"
 
 
remove_user_flags(0read_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_putinserverid )
{
 
get_user_nameidiNombreid ], charsmaxiNombre ) );
 
 new 
Query300 ], iData];
 
iData] = id;
 
iData] = 1;
 
 
formatexQuery charsmaxQuery ) , "SELECT fecha FROM %s WHERE authid = ^"%s^""szTablePiNombreid ] );
 
mysql_query(g_Connection"fnCargar"QueryiData);
 
 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(idpev_netnameszOldNamecharsmax(szOldName)) 
 if( 
szOldName[0] ) 
 { 
 
get_user_info(idnameszNewNamecharsmax(szNewName)) 
 if( !
equal(szOldNameszNewName) ) 
 { 
 
set_user_info(idnameszOldName
 return 
FMRES_HANDLED 
 

 } 
 return 
FMRES_IGNORED 

public 
adminSql( )
{
 new 
Query300 ];
 
formatexQuery charsmaxQuery ) , "SELECT authid, password, access, flags FROM %s"szTableP );
 
mysql_query(g_Connection"fnAdmins"Query );
}
public 
MySQL_Init( )
{
 
g_isTuple mysql_makehost(HOSTUSUARIOPASSWORDDB);
 
 new 
error32 ], errnum;
 
g_Connection mysql_connect(g_isTupleerrnumerror31);
 
 if(
errnum)
 {
 
log_to_file("mysqlt.log""ERROR1: [%d]- [%s]"errnumerror)
 return 
pause"a" );
 }
 new 
szTable1000 ], 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(failstateerror[], error2data[], sizeFloat:queuetime)
{
 switch ( 
failstate )
 {
 case 
TQUERY_CONNECT_FAILEDlog_to_file("SQL_LOG_TQ.txt""Failed to connect to database [%i]: %s"error2error)
 case 
TQUERY_QUERY_FAILEDlog_to_file("SQL_LOG_TQ.txt""Error on query for creating table [%i]: %s"error2error)
 }
 
 return 
PLUGIN_HANDLED;
}
public 
fnCargar(failstateerror[], error2data[], sizeFloat:queuetime)
{
 static 
idid data];
 
 if( !
is_user_connectedid ) ) 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] ) 
 {
 case 
1:
 {
 if( 
mysql_num_results( ) )
 {
 new 
szDate[60];
 
mysql_read_result(0szDatesizeof(szDate));
 
replace_all(szDatecharsmax(szDate), "/"" ");
 new 
Dia[100]; get_time("%d/%m/%Y"Diacharsmax(Dia)) 
 
 new 
szDay[10], szMonth[10], szYear[10];
 
parse(szDateszDaycharsmax(szDay), szMonthcharsmax(szMonth), szYearcharsmax(szYear));
 
 new 
szDay2[10], szMonth2[10], szYear2[10];
 
replace_all(Diacharsmax(Dia), "/"" ");
 
parse(DiaszDay2charsmax(szDay2), szMonth2charsmax(szMonth2), szYear2charsmax(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 
Query300 ];
 
formatexQuery charsmaxQuery ) , "DELETE FROM %s WHERE authid = ^"%s^""szTablePiNombreid ] );
 
mysql_query(g_Connection"fnCargarAdmin"Query );
 }
 else
 {
 
adminSql( );
 }
 }
 }
 }

public 
fnCargarAdmin(failstateerror[], errnumdata[], sizeFloat:queuetime)
{
 if(
failstate != TQUERY_SUCCESS)
 {
 
log_to_file("mysqlt.log""ERROR1: [%d]- [%s]"errnumerror)
 return 
PLUGIN_HANDLED;
 }
 
 
 if( 
mysql_affected_rows() )
 {
 
adminSql( );
 }
 return 
PLUGIN_CONTINUE;

public 
fnAdmins(failstateerror[], errnumdata[], sizeFloat:queuetime)
{
 if(
failstate != TQUERY_SUCCESS)
 {
 
log_to_file("mysqlt.log""ERROR2: [%d]- [%s]"errnumerror)
 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(0Authidsizeof(Authid));
 
mysql_read_result(1Passwordsizeof(Password));
 
mysql_read_result(2Accesssizeof(Access));
 
mysql_read_result(3Flagssizeof(Flags));
 
 
admins_push(AuthidPasswordread_flags(Access), read_flags(Flags));
 
 
mysql_next_row();
 }
 }
 
 
users_access();
 return 
PLUGIN_CONTINUE;

stock users_access(){
 new 
players[32];
 new 
iNum;
 
get_players(playersiNum);
 for(--
iNumiNum >= 0iNum--){
 
accessUser(players[iNum]);
 }
}
public 
client_connect(id)
{
 
g_CaseSensitiveName[id] = false;
}

getAccess(idname[], 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 
0Count; ++i)
 {
 
Flags=admins_lookup(i,AdminProp_Flags);
 
admins_lookup(i,AdminProp_Auth,AuthData,charsmax(AuthData));
 
 if (
Flags FLAG_AUTHID)
 {
 if (
equal(authidAuthData))
 {
 
index i
 
break
 }
 }
 else if (
Flags FLAG_IP)
 {
 new 
strlen(AuthData)
 
 if (
AuthData[1] == '.'/* check if this is not a xxx.xxx. format */
 
{
 if (
equal(AuthDataipc))
 {
 
index i
 
break
 }
 } 
/* in other case an IP must just match */
 
else if (equal(ipAuthData))
 {
 
index i
 
break
 }
 } 
 else 
 {
 if (
Flags FLAG_CASE_SENSITIVE)
 {
 if (
Flags FLAG_TAG)
 {
 if (
contain(nameAuthData) != -1)
 {
 
index i
 g_CaseSensitiveName
[id] = true
 
break
 }
 }
 else if (
equal(nameAuthData))
 {
 
index i
 g_CaseSensitiveName
[id] = true
 
break
 }
 }
 else
 {
 if (
Flags FLAG_TAG)
 {
 if (
containi(nameAuthData) != -1)
 {
 
index i
 
break
 }
 }
 else if (
equali(nameAuthData))
 {
 
index i
 
break
 }
 }
 }
 }
 
 if (
index != -1)
 {
 
Access=admins_lookup(index,AdminProp_Access);
 
 if (
Flags FLAG_NOPASS)
 {
 
result |= 8
 
new sflags[32]
 
 
get_flags(Accesssflagscharsmax(sflags))
 
set_user_flags(idAccess)
 
 
log_amx("Login: ^"%s<%d><%s><>^" became an admin (account ^"%s^") (access ^"%s^") (address ^"%s^")"nameget_user_userid(id), authidAuthDatasflagsip)
 }
 else 
 {
 
 
admins_lookup(index,AdminProp_Password,Password,charsmax(Password));
 
 if (
equal(passwordPassword))
 {
 
result |= 12
 set_user_flags
(idAccess)
 
 new 
sflags[32]
 
get_flags(Accesssflagscharsmax(sflags))
 
 
log_amx("Login: ^"%s<%d><%s><>^" became an admin (account ^"%s^") (access ^"%s^") (address ^"%s^")"nameget_user_userid(id), authidAuthDatasflagsip)
 } 
 else 
 {
 
result |= 1
 
 
if (Flags FLAG_KICK)
 {
 
result |= 2
 log_amx
("Login: ^"%s<%d><%s><>^" kicked due to invalid password (account ^"%s^") (address ^"%s^")"nameget_user_userid(id), authidAuthDataip)
 }
 }
 }
 }
 else if (
get_pcvar_float(amx_mode) == 2.0)
 {
 
result |= 2
 

 else 
 {
 new 
defaccess[32]
 
 
get_pcvar_string(amx_default_accessdefaccesscharsmax(defaccess))
 
 if (!
strlen(defaccess))
 {
 
copy(defaccesscharsmax(defaccess), "z")
 }
 
 new 
idefaccess read_flags(defaccess)
 
 if (
idefaccess)
 {
 
result |= 8
 set_user_flags
(ididefaccess)
 }
 }
 
 return 
result
}

accessUser(idname[] = "")
{
 
remove_user_flags(id)
 
 new 
userip[32], userauthid[32], password[32], passfield[32], username[MAX_NAME_LENGTH]
 
 
get_user_ip(iduseripcharsmax(userip), 1)
 
get_user_authid(iduserauthidcharsmax(userauthid))
 
 if (
name[0])
 {
 
copy(usernamecharsmax(username), name)
 }
 else
 {
 
get_user_name(idusernamecharsmax(username))
 }
 
 
get_pcvar_string(amx_password_fieldpassfieldcharsmax(passfield))
 
get_user_info(idpassfieldpasswordcharsmax(password))
 
 new 
result getAccess(idusernameuserauthiduserippassword)
 
 if (
result 1)
 {
 
engclient_print(idengprint_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(idengprint_console"* %L"id"PAS_ACC")
 }
 
 if (
result 8)
 {
 
engclient_print(idengprint_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 Whatever

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
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder
#44
actualizado, tema viejo movido a pagina 5.

evitarse comentarios sin sentido.
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder
#45
y las imagenes Triste

Responder
#46
le di de baja a las demos, si usaban el plugin ya no les traerá ningún dato.
[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)