02/12/2018, 08:48 PM
(Última modificación: 02/12/2018, 08:58 PM por Hinami. Edited 2 times in total.)
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
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.
otro mini aporte xDXdXDx
SQLManager para leer tu DB
Es la versión que dije sacar para SQL.
IMAGENES:
https://prnt.sc/lpuys8
https://prnt.sc/lpuz3l
https://prnt.sc/lpuzay
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 szRuta[ 300 ];
new szPath[ 256 ];
new Handle:g_isTuple;
new g_playername[ 33 ][ 32 ];
enum { ACTIVAR_CODE = 0, UPDATE_CODE };
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
// 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_configsdir( szPath, charsmax( szPath ) );
formatex( szRuta, charsmax( szRuta ), "%s/%s", szPath, szArchivo );
MySQL_Init( );
}
public client_putinserver( id ) get_user_name(id, g_playername[ id ], charsmax( g_playername ) );
public amx_activar( id )
{
new iBuffer[ 128 ],
Query[ 256 ],
iData[ 2 ];
iData[ 0 ] = id;
iData[ 1 ] = ACTIVAR_CODE;
read_args( iBuffer, charsmax(iBuffer) );
remove_quotes( iBuffer );
formatex( Query , charsmax( Query ) , "SELECT * FROM %s WHERE Code=^"%s^"", szTableP, iBuffer );
SQL_ThreadQuery(g_isTuple, "DataHandler", Query, iData, 2 );
return PLUGIN_HANDLED;
}
public amx_crear( id, nivel, cid )
{
if (!cmd_access(id, nivel, cid, 3))
return PLUGIN_HANDLED;
if( !file_exists( szRuta ) )
{
client_print( id, print_console, "[ AMXX ] El archivo '%s' NO Existe.", szRuta );
return PLUGIN_HANDLED;
}
new Query[ 256 ], iData[ 2 ], code[ 100 ], len, valor[ 100 ], szText[ 300 ];
new iFile = fopen( szRuta, "wt" );
iData[ 0 ] = id;
iData[ 1 ] = UPDATE_CODE;
read_argv( 1, code, charsmax( code ) );
read_argv( 2, valor, charsmax( valor ) );
remove_quotes( code );
remove_quotes( valor );
new amount = str_to_num( code );
new amount2 = str_to_num( valor );
new rnd = random_num( 4, 9 );
for( new i = 0; i < amount; i++ )
{
len = format(code[len], sizeof code - len, "ZP_");
for( new i = 0; i < rnd; i++ )
{
switch( random_num(0, 2) )
{
case 0: len += format(code[len], sizeof code - len, "%c", random_num( 97, 122 ));
case 1: len += format(code[len], sizeof code - len, "%c", random_num( 65, 90 ));
case 2: len += format(code[len], sizeof code - len, "%c", random_num( 48, 57 ));
}
}
formatex( szText, charsmax( szText ), "Code [ %s ] - Valor: [ %i ]^n", code, amount2 );
fputs( iFile, szText );
formatex( Query , charsmax( Query ) , "INSERT INTO %s (Code, premio) VALUES (^"%s^", %d)", szTableP, code, amount2);
SQL_ThreadQuery( g_isTuple, "DataHandler", Query, iData, 2 );
}
fclose( iFile );
return PLUGIN_HANDLED;
}
public MySQL_Init( )
{
new get_type[ 12 ]; SQL_SetAffinity( "sqlite" );
SQL_GetAffinity( get_type, sizeof get_type );
if( !equali( get_type, "sqlite" ) )
{
log_to_file( "SQLITE_ERROR.txt", "[ AMXX ] Error de conexion" );
return pause( "a" );
}
g_isTuple = SQL_MakeDbTuple( "", "", "", szDB );
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 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_ThreadQuery( g_isTuple, "QueryCreateTable", szTable );
return PLUGIN_CONTINUE;
}
public plugin_end( )
SQL_FreeHandle( g_isTuple );
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 DataHandler( failstate, Handle:Query, error[ ], error2, data[ ], datasize, Float:time )
{
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 ACTIVAR_CODE:
{
if( SQL_NumResults( Query ) )
{
if( SQL_ReadResult( Query, 4 ) >= 1 )
{
chatcolor( id , "Ya usaron este ^4codigo!" );
return;
}
new szBuffer[ 200 ],
sum = SQL_ReadResult( Query, 3 );
new Code[ 90 ];
SQL_ReadResult( Query, 1, Code, charsmax( Code ) );
#if defined zp5
zp_ammopacks_set(id, zp_ammopacks_get( id ) + sum);
#else
zp_set_user_ammo_packs( id , zp_get_user_ammo_packs( id ) + sum );
#endif
chatcolor( 0 , "^1El player ^4%s^1 Activo un code de ^4%d^1 ammopacks", g_playername[ id ], sum );
chatcolor( 0 , "^1para obtener uno Compra el tuyo en: ^1[ ^4%s ^1]", szWeb);
client_print(id, print_console, "// [ dg_code system by Hypnotize ] \\");
client_print(id, print_console, "Gracias por preferinos, recuerda visitar %s para mas info.", szWeb);
client_print(id, print_console, "Activaste un code de [ %d ] Puntos !", sum);
client_print(id, print_console, "Codigo: [ %s ] | Premio: [ %d ]", Code, sum);
client_print(id, print_console, "Activado por: %s", g_playername[ id ]);
client_print(id, print_console, "// [ dg_code system by Hypnotize ] \\");
new iData[ 2 ];
iData[ 0 ] = id;
iData[ 1 ] = UPDATE_CODE;
formatex( szBuffer, 255, "UPDATE %s SET usado=1, Pj=^"%s^" WHERE Code=^"%s^"", szTableP, g_playername[ id ], Code );
SQL_ThreadQuery(g_isTuple, "DataHandler", szBuffer, iData, 2 );
}
else
chatcolor( id, "^4code^1 no ^4encontrado");
}
case UPDATE_CODE:
{
if( failstate < TQUERY_SUCCESS )
console_print( id, "Consulta fallida" );
else
console_print( id, "Consulta ejecutada en %.1f.", time );
}
}
}
stock chatcolor(id, const input[], any:...)
{
static szMsg[191], msgSayText;
if (!msgSayText)
msgSayText = get_user_msgid("SayText");
vformat(szMsg, 190, input, 3);
replace_all(szMsg, 190, "!g", "^4");
replace_all(szMsg, 190, "!y", "^1");
replace_all(szMsg, 190, "!team", "^3");
message_begin(id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, msgSayText, .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.
otro mini aporte xDXdXDx
SQLManager para leer tu DB
Es la versión que dije sacar para SQL.
IMAGENES:
https://prnt.sc/lpuys8
https://prnt.sc/lpuz3l
https://prnt.sc/lpuzay