[ZP] Addon: Sistema de Códigos SQL
#1
En esta ocasión les dejo un sistema de códigos utilizando SQL basado en mi otro plugin ( Sistema de Códigos MySQL )


Consiste en que a través de un comando, puedan insertar codigos que den X APS al activarlo, comando:
amx_crear < Cantidad de codes > < Cantidad de APS >

y puedes activar los codes en la DB con esto:

amx_code "el_code"

Requerimientos

- Modulo SQL activado
- Meter un archivo .ini llamado Codes en configs

Código PHP:
/* Script generated by Pawn Studio */

#include <amxmodx>
#include <amxmisc>
#include <sqlx>
#include <zombieplague>
//#include <zp50_ammopacks>

#define PLUGIN    "[ ZP ] Addon: Sistema de Códigos"
#define AUTHOR    "Hypnotize"
#define VERSION    "1.0"
//descomentar linea si se usa zp5.0
//#define zp5

new const szTableP[] = "amx_codigos";
new const 
szDB[] = "TEST";
new const 
szWeb[] = "nopor.com";
new const 
szArchivo[] = "Codes.ini";

new 
szRuta300 ]; 
new 
szPath256 ];

new 
Handle:g_isTuple;

new 
g_playername33 ][ 32 ]; 

enum ACTIVAR_CODE 0UPDATE_CODE };

public 
plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR);
    
// Add your own code here
    
register_clcmd"amx_code""amx_activar" );
    
register_clcmd"amx_crearCode""amx_crear"ADMIN_RCON"< Cantidad de codes > < Cantidad de APS >");
    
    
get_configsdirszPathcharsmaxszPath ) );
    
formatexszRutacharsmaxszRuta ), "%s/%s"szPathszArchivo );
    
    
MySQL_Init( );
}
public 
client_putinserverid get_user_name(idg_playernameid ], charsmaxg_playername ) );

public 
amx_activarid )
{
    new 
iBuffer128 ], 
    
Query256 ], 
    
iData]; 
    
    
iData] = id
    
iData] = ACTIVAR_CODE;
    
    
read_argsiBuffercharsmax(iBuffer) );
    
remove_quotesiBuffer );
    
    
formatexQuery charsmaxQuery ) , "SELECT * FROM %s WHERE Code=^"%s^""szTablePiBuffer );
    
SQL_ThreadQuery(g_isTuple"DataHandler"QueryiData);
    
    return 
PLUGIN_HANDLED;
}

public 
amx_crearidnivelcid )
{
    if (!
cmd_access(idnivelcid3))
        return 
PLUGIN_HANDLED;
    
    if( !
file_existsszRuta ) ) 
    {
        
client_printidprint_console"[ AMXX ] El archivo '%s' NO Existe."szRuta );
        return 
PLUGIN_HANDLED;
    }
    
    new 
Query256 ], iData], code100 ], lenvalor100 ], szText300 ];
    new 
iFile fopenszRuta"wt" );
    
    
iData] = id
    
iData] = UPDATE_CODE;
    
    
read_argv1codecharsmaxcode ) );
    
read_argv2valorcharsmaxvalor ) );
    
    
remove_quotescode );
    
remove_quotesvalor );
    
    new 
amount str_to_numcode );
    new 
amount2 str_to_numvalor );
    new 
rnd random_num4);
    
    for( new 
0amounti++ )
    {
        
len format(code[len], sizeof code len"ZP_");
        for( new 
0rndi++ )
        {
            switch( 
random_num(02) )
            {
                case 
0len += format(code[len], sizeof code len"%c"random_num97122 ));
                case 
1len += format(code[len], sizeof code len"%c"random_num6590 ));
                case 
2len += format(code[len], sizeof code len"%c"random_num4857 ));
            }
        }
        
        
formatexszTextcharsmaxszText ), "Code [ %s ] - Valor: [ %i ]^n"codeamount2 );
        
fputsiFileszText );
        
        
formatexQuery charsmaxQuery ) , "INSERT INTO %s (Code, premio) VALUES (^"%s^", %d)"szTablePcodeamount2);
        
SQL_ThreadQueryg_isTuple"DataHandler"QueryiData);
    } 
    
fcloseiFile );
    return 
PLUGIN_HANDLED;
}

public 
MySQL_Init( )
{
    new 
get_type12 ]; SQL_SetAffinity"sqlite" );
    
SQL_GetAffinityget_typesizeof get_type );
    
    if( !
equaliget_type"sqlite" ) )
    {
        
log_to_file"SQLITE_ERROR.txt""[ AMXX ] Error de conexion" );
        return 
pause"a" );
    }
    
    
g_isTuple SQL_MakeDbTuple""""""szDB );
    
    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 INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL, ");
    
len += format(szTable[len], charsmax(szTable) - len"Code VARCHAR NOT NULL UNIQUE,");
    
len += format(szTable[len], charsmax(szTable) - len"Pj VARCHAR NOT NULL DEFAULT 'null',");
    
len += format(szTable[len], charsmax(szTable) - len"premio integer NOT NULL DEFAULT '5000',");
    
len += format(szTable[len], charsmax(szTable) - len"usado integer not null default '0')");
    
SQL_ThreadQueryg_isTuple"QueryCreateTable"szTable );
    
    return 
PLUGIN_CONTINUE;
}
public 
plugin_end( )
    
SQL_FreeHandleg_isTuple ); 
    
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 
DataHandlerfailstateHandle:Queryerror[ ], error2data[ ], datasizeFloat:time )
{
    static 
id;
    
id 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_FAILEDlog_to_file"SQL_LOG_TQ.txt""Error en la consulta al MySQL [%i]: %s"error2error );
    }
    
    switch( 
data] ) 
    {
        case 
ACTIVAR_CODE
        {
            if( 
SQL_NumResultsQuery ) ) 
            {
                if( 
SQL_ReadResultQuery) >= )
                {
                    
chatcolorid "Ya usaron este ^4codigo!" );
                    return;
                }
                
                new 
szBuffer200 ], 
                
sum SQL_ReadResultQuery);
                
                new 
Code90 ]; 
                
SQL_ReadResultQuery1CodecharsmaxCode ) );
                
#if defined zp5
                
zp_ammopacks_set(idzp_ammopacks_getid ) + sum);
                
#else
                
zp_set_user_ammo_packsid zp_get_user_ammo_packsid ) + sum );
                
#endif
                
chatcolor"^1El player ^4%s^1 Activo un code de ^4%d^1 ammopacks"g_playernameid ], sum );
                
chatcolor"^1para obtener uno Compra el tuyo en: ^1[ ^4%s ^1]"szWeb);
                
                
client_print(idprint_console"//                        [ dg_code system by Hypnotize ]                        \\");
                
client_print(idprint_console"Gracias por preferinos, recuerda visitar %s para mas info."szWeb);
                
client_print(idprint_console"Activaste un code de [ %d ] Puntos !"sum);
                
client_print(idprint_console"Codigo: [ %s ] | Premio: [ %d ]"Codesum);
                
client_print(idprint_console"Activado por: %s"g_playernameid ]);
                
client_print(idprint_console"//                        [ dg_code system by Hypnotize ]                        \\");
                
                new 
iData]; 
                
                
iData] = id
                
iData] = UPDATE_CODE;
                
                
formatexszBuffer255"UPDATE %s SET usado=1, Pj=^"%s^" WHERE Code=^"%s^""szTablePg_playernameid ], Code );
                
                
SQL_ThreadQuery(g_isTuple"DataHandler"szBufferiData);                                                                
            }
            else
            
chatcolorid"^4code^1 no ^4encontrado");
        }
        case 
UPDATE_CODE:
        {
            
            if( 
failstate TQUERY_SUCCESS )
                
console_printid"Consulta fallida" );        
            else
            
console_printid"Consulta ejecutada en %.1f."time  );
        }
    }
}
stock chatcolor(id, const input[], any:...)
{
    static 
szMsg[191], msgSayText;
    
    if (!
msgSayText)
        
msgSayText get_user_msgid("SayText");
    
    
vformat(szMsg190input3);
    
    
replace_all(szMsg190"!g""^4");
    
replace_all(szMsg190"!y""^1");
    
replace_all(szMsg190"!team""^3");
    
    
message_begin(id MSG_ONE_UNRELIABLE MSG_BROADCASTmsgSayText, .player id);
    
write_byte(id id 33);
    
write_string(szMsg);
    
message_end();


Aclaro los codes que se guardan en el .ini son los que se insertan en ese momento, si creas otros se borran del .ini más no de la DB, solo sobre escribe el .ini, por cual una ves en el ini se recomienda copiarlos para tenerlos a la mano. Whatever

otro mini aporte xDXdXDx
SQLManager para leer tu DB


Es la versión que dije sacar para SQL. Whatever


IMAGENES:

https://prnt.sc/lpuys8
https://prnt.sc/lpuz3l
https://prnt.sc/lpuzay



(26/11/2018, 03:04 PM)w0w escribió:
(26/11/2018, 10:54 AM)Neeeeeeeeeel.- escribió: Estaría bueno que se puedan generar desde el mismo plugin también los códigos.

+ que se puedan crear códigos random. Es decir, por ejemplo: amx_code_create y te crea un código random por ejemplo "mz5WJXwCeWcqqOfv" o amx_code_create "10" y que te cree 10 códigos random.
(26/11/2018, 04:34 PM)Hypnotize escribió: Lo haré pero otra versión que aportaré para SQL...

solo tenga tiempo
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder
#2
Buen Aporte Proud
Cita: Kikizon2 Dijo :
Lo que deberian de aprender es a escribir, parece que escriben con el escroto en la mano.
Responder
#3
Buen aporte, el comando es "amx_crearCode" :'v

Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)