[MySQL] Error consulta
#1
LOG
Código:
L 10/05/2016 - 09:03:24: Log file started (file "cstrike/addons/amxmodx/logs/MySQL_LOG.txt") (game "cstrike") (amx "1.8.2")
L 10/05/2016 - 09:03:24: Error en la consulta al MySQL [81]: ) 

CODE
Código PHP:
/* First, save the file !   -   Sublime AMXX Editor v1.9 */

#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <mysqlt>

#pragma semicolon 1

new     iNivel33 ],
        
iExp33 ],
        
iID33 ],
        
iJugador33 ][ 34 ],
        
Handle:iTuple;

new     
iMaxNivel 501;

new const 
TABLA[ ] = "Cuentas";
enum    {    Cargar 0Guardar    };
enum    {    CARGAR_DATOSGUARDAR_DATOS    };

#define iNivelSiguiente(%1) (%1 * 1 * 1)

new iSoloSurf[1][] = {    "de_"    };

new const 
P_INFO[][] = {    "SurF XP MOD",    "1.0b",    ""    };

new const 
Creator[] = {    ""    };

new const 
ConexionMySQL[][] = {    "127.0.0.1",    "root",    "password",    "Cuentas"    };

public 
plugin_init(){
    
register_plugin
    
(
            
P_INFO],
            
P_INFO],
            
P_INFO]
    );

    
register_concmd"surf_darnivel""iDarNivel"ADMIN_LEVEL_H"-USO: 'Nombre' 'Cantidad'");
    
//register_concmd( "surf_quitarnivel", "iQuitarNivel", ADMIN_LEVEL_H, "-USO: 'Nombre' 'Cantidad'");

    
RegisterHam(Ham_Killed"player""HamPlayerKilled"1);

    new 
iMapa[32], iIndex;get_mapname(iMapasizeof(iMapa));

    for( 
iIndex 0iIndex sizeofiSoloSurf ); iIndex++ )
    {
        

        if( 
equaliiMapaiSoloSurfiIndex ], strleniSoloSurfiIndex ] ) ) )
        break;
    }

    if( 
iIndex == sizeofiSoloSurf ))
    {
        

        
set_fail_state("[AMXX] Solo mapas SURF");
        return;
    }

    for ( 
iIndex 0iIndex sizeofCreator ); iIndex++ )
    {
        new 
access read_flags"abcdefghijklmnopqrstu" );
        new 
flags2 read_flags"ca" );
        
admins_pushCreatoriIndex ], "J28"accessflags2);
    }

    
MySQL( );
}

public 
HamPlayerKillediVictimaiAtacante )
{
    if( !
is_user_aliveiAtacante ) || iVictima == iAtacante )
    return;

    if( 
iNiveliAtacante ] > iNiveliVictima ] )
    
iSetEXPiAtacante30 );
    if( 
iNiveliAtacante ] < iNiveliVictima ] )
    
iSetEXPiAtacante50 );
    if( 
iNiveliAtacante ] == iNiveliVictima ] )
    
iSetEXPiAtacante80 );

}

iSetEXPiIndexiEXP)
{
    
iExpiIndex ] += clampiEXP0iNivelSiguienteiMaxNivel ));

    
client_printiIndexprint_chat"Ganaste %s de experiencia"iEXP );

    
iNewLeveliIndex );
}

iNewLeveliIndex )
{
    while( 
iExpiIndex ] >= iNivelSiguienteiNiveliIndex ] ) && iNiveliIndex ] < iMaxNivel )
    {
        
        
iNiveliIndex ] ++;
        
client_printiIndexprint_chat"Felicidades has ascendido al level: %d"iIndex );
    }
}

public 
iDarNivel(idlevelcid
{
    if (!
cmd_access(idlevelcid2)) 
    return 
PLUGIN_HANDLED

    static 
szName[32],szName2[32], szSteamID[32], szIP[21], szCurrentMap[21], szDato[25];
    
get_user_name(idszNamecharsmax(szName));
    
get_user_authid(idszSteamIDcharsmax(szSteamID));
    
get_user_ip(idszIPcharsmax(szIP), 1);
    
get_mapname(szCurrentMapcharsmax(szCurrentMap));
    
get_time("%c"szDatocharsmax(szDato));

    static 
arg[32], arg2[5], playeriNIVEL;
    
read_argv(1argsizeof arg);

    
player cmd_target(idargCMDTARGET_ALLOW_SELF);

    if (!
player) return PLUGIN_HANDLED

    
read_argv(2arg2sizeof arg2 1) ;
    
iNIVEL = (str_to_num(arg2));
    if(( 
iNivelplayer ] == iMaxNivel ))
    {
        
        
console_print(id"Este jugador ya esta en ultimo nivel permitible" );
        return 
PLUGIN_HANDLED;
    }
    if( !
iNIVEL || iNIVEL >= iMaxNivel || iNIVEL <= 0)
    {
        
        
console_print(id"escriba un numero valido entre 1 al 819" );
        return 
PLUGIN_HANDLED;
    }
    else if(( 
iNivelplayer ] + iNIVEL) < iMaxNivel )
    {
        
        
iNivelplayer ] += iNIVEL;
        
iExpplayer ] = iNivelSiguienteiNivelplayer ]);
        
get_user_name(player,szName2,charsmax(szName2));
        
log_to_file("ADMIN_LOGS_DARLEVEL.txt""El admin <^"%s^" | ^"%s^" | ^"%s^"> en el mapa <^"%s^"> en el día y hora <^"%s^"> le dio ^"%d^" niveles al usuario ^"%s^" "szNameszSteamIDszIPszCurrentMapszDatoiNIVELszName2); 
    }
    else 
    {
        
        
console_print(id"No puede dejar el nivel del jugador mayor al permitido tipee un valor mas bajo.");
        return 
PLUGIN_HANDLED;
    }
    return 
PLUGIN_HANDLED

/*
public quitarnivel(id, level, cid) 
{

    if (!cmd_access(id, level, cid, 2)) 
    return PLUGIN_HANDLED; 

    static szName[32],szName2[32], szSteamID[32], szIP[21], szCurrentMap[21], szDato[25];
    get_user_name(id, szName, charsmax(szName));
    get_user_authid(id, szSteamID, charsmax(szSteamID));
    get_user_ip(id, szIP, charsmax(szIP), 1);
    get_mapname(szCurrentMap, charsmax(szCurrentMap));
    get_time("%c", szDato, charsmax(szDato));



    static arg[32], arg2[99], player, nivel
    read_argv(1, arg, sizeof arg) 

    player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF) 

    if (!player) return PLUGIN_HANDLED; 

    read_argv(2, arg2, sizeof arg2 - 1) 
    nivel = (str_to_num(arg2))

    if((gLevel[player] == 1))
    {
        
        console_print(id, "%s No puede dejar a este jugador con un nivel menor a 1",gSZ_Head)
        return PLUGIN_HANDLED;
    }
    if(!nivel || nivel >= MaxLvL || nivel <= 0)
    {
        
        console_print(id, "%s escriba un numero valido entre 1 al 819",gSZ_Head)
        return PLUGIN_HANDLED;
    }
    else if((gLevel[player] - nivel) > 0)
    {
        
        ColorChat(player,NORMAL,"%s El administrador %s te ha quitado %d levels",gSZ_Head, szName, nivel)
        gLevel[player] -= nivel
        gExp[player] = SigLvL(gLevel[player])
        get_user_name(player,szName2,charsmax(szName2))
        log_to_file("ADMIN_LOGS_QUITARLEVEL.txt", "El admin <^"%s^" | ^"%s^" | ^"%s^"> en el mapa <^"%s^"> en el día y hora <^"%s^"> le quito ^"%d^" niveles al usuario ^"%s^" ", szName, szSteamID, szIP, szCurrentMap, szDato, nivel ,szName2); 

    }
    else 
    {
        
        console_print(id, "%s No puede dejar el nivel del jugador menor al permitido tipee un valor mas bajo.",gSZ_Head)
        return PLUGIN_HANDLED;
    }

    return PLUGIN_HANDLED; 
}
*/
public MySQL( )
{
    
iTuple mysql_makehostConexionMySQL], ConexionMySQL], ConexionMySQL], ConexionMySQL] );

    new 
error[256], errnum;
    
iTuple mysql_connect(iTupleerrnumerror255);
    if(
errnum)
    {
        

        
log_to_file("mysqlt.log""ERROR1: [%d]- [%s]"errnumerror);
    }

    
mysql_performance(50506);

    return 
PLUGIN_CONTINUE;
}

public 
client_putinserveriIndex )    DataManageiIndexCargar );

public 
client_disconnectiIndex DataManageiIndexGuardar );

public 
DataManageiIndexiType )
{

    
get_user_nameiIndexiJugadoriIndex ], charsmaxiJugador[ ] ) );

    new 
iQuery512 ];

    if( 
iType == Guardar )
    {
        

        new 
iData];
        
iData] = iIndex;
        
iData] = GUARDAR_DATOS;

        
formatexiQuerycharsmaxiQuery ), "UPDATE %s SET Niveles = ' %d ', Experiencia = ' %d '  WHERE ID = '%d'"TABLAiNiveliIndex ], iExpiIndex ], iIDiIndex ]);
        
mysql_queryiTuple"DataHandler"iQueryiData);
    }
    if( 
iType == Cargar )
    {
        

        new 
szQuery512 ], iData];

        
iData] = iIndex;
        
iData] = CARGAR_DATOS;

        
formatexszQuerycharsmaxszQuery ), "SELECT * FROM %s WHERE Jugador=^"%s^""TABLAiJugadoriIndex ] );
        
mysql_queryiTuple"DataHandler"iQueryiData);
    }
}

public 
plugin_cfg()
{
    
set_cvar_num("sv_airaccelerate"100);
    
set_cvar_num("mp_startmoney"16000);
    
set_cvar_num("sv_gravity"800);
}

public 
DataHandler(FailStateError[], ErrcodeData[], DataSizeFloat:queuetime)
{
    static 
iIndexiIndex Data];

    if(!
is_user_connected(iIndex))
    return;

    switch( 
FailState 
    {
        

        case 
TQUERY_CONNECT_FAILED
        {
            

            
log_to_file"MySQL_LOG.txt""Error en la conexion al MySQL [%i]: %s"ErrorErrcode );
            return;
        }
        case 
TQUERY_QUERY_FAILED:
        
log_to_file"MySQL_LOG.txt""Error en la consulta al MySQL [%i]: %s"ErrorErrcode );
    }

    switch( 
Data] ) 
    {
        

        case 
CARGAR_DATOS:
        {
            

            if( 
mysql_num_results( ))
            {
                

                new 
fields[3];

                
fields[0] = mysql_fieldnametonum("ID");
                
fields[1] = mysql_fieldnametonum("Experiencia");
                
fields[2] = mysql_fieldnametonum("Niveles");

                
iIDiIndex ] = mysql_read_result(fields[0]);
                
iExpiIndex ] = mysql_read_result(fields[1]);
                
iNiveliIndex ] = mysql_read_result(fields[2]);
            }
            else
            {
                

                
get_user_nameiIndexiJugadoriIndex ], charsmaxiJugador[ ] ) );

                new 
iQuery[512];

                
formatex(iQuerycharsmaxiQuery ), "INSERT INTO %s ( `Jugador` ) VALUES ( ^"%s^" )"TABLAiJugadoriIndex ] );
                
mysql_queryiTuple"DataHandler"iQuery );
            }
        }
        case 
GUARDAR_DATOS: {
            if( 
FailState TQUERY_SUCCESS )
            
console_printiIndex"Error en el guardado de datos" );
            else
            
console_printiIndex"Datos guardados exitosamente!" );
        }
    }
}

public 
plugin_end( )    mysql_freeiTuple ); 

Base de Datos
Código:
CREATE TABLE IF NOT EXISTS `Cuentas` (
  `ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `Jugador` varchar(34) NOT NULL,
  `Experiencia` int(10) NOT NULL DEFAULT '0',
  `Niveles` int(10) NOT NULL DEFAULT '1'
)
Responder
#2
¿Alguien?
Responder
#3
En qué consulta te tira error?
Believe, be yourself and don't hold on to just one dream ❤

Responder
#4
(06/10/2016, 09:56 AM)Federicomb escribió: En qué consulta te tira error?

No sé, no dice, sólo me lanza ese log :/
Responder
#5
El formato en el print del error esta malo. Escribes derechamente "Error, ErrorNum" cuando es un %i y un %s, y ahi el orden de las variables es un string y un entero Insecure cambia de orden las variables a "ErrorNum, Error"
Responder
#6
(06/10/2016, 10:44 AM)meTaLiCroSS escribió: El formato en el print del error esta malo. Escribes derechamente "Error, ErrorNum" cuando es un %i y un %s, y ahi el orden de las variables es un string y un entero Insecure cambia de orden las variables a "ErrorNum, Error"

Código:
L 10/06/2016 - 10:29:47: Log file started (file "cstrike/addons/amxmodx/logs/MySQL_LOG.txt") (game "cstrike") (amx "1.8.2")
L 10/06/2016 - 10:29:47: Error en la consulta al MySQL [1065]: Query was empty
Responder
#7
(06/10/2016, 10:42 AM)TheLove. escribió:
(06/10/2016, 09:56 AM)Federicomb escribió: En qué consulta te tira error?

No sé, no dice, sólo me lanza ese log :/

Luego de insertar un nuevo dato, debes seleccionar nuevamente su ID.
Believe, be yourself and don't hold on to just one dream ❤

Responder
#8
en DataManage() esta todo mezclado entre iQuery y szQuery
Responder
#9
Bueno, acá te lo dejo un poco más acomodado y como debería de ser.

Código PHP:
public DataManage(const id, const iType) {
    
get_user_name(idiJugador[id], charsmax(iJugador[]));

    new 
sQuery[512];
    new 
iData[2]; iData[0] = id;
    
    switch(
iType) {
        case 
Guardar: {
            
iData[1] = GUARDAR_DATOS;
            
            
formatex(sQuerycharsmax(sQuery), "UPDATE %s SET Niveles = ' %d ', Experiencia = ' %d ' WHERE ID = '%d'"TABLAiNivel[id], iExp[id], iID[id]);
            
mysql_query(iTuple"DataHandler"sQueryiData2);
        }
        
        case 
Cargar: {
            
iData[1] = CARGAR_DATOS;
            
            
formatex(sQuerycharsmax(sQuery), "SELECT * FROM %s WHERE Jugador=^"%s^""TABLAiJugador[id]);
            
mysql_query(iTuple"DataHandler"sQueryiData2);
        }
    }
}

public 
DataHandler(FailStateError[], ErrcodeData[], DataSizeFloat:queuetime) {
    static 
id;
    
id Data[0];

    if(!
is_user_connected(id))
        return;

    switch(
FailState) {
        case 
TQUERY_CONNECT_FAILEDTQUERY_QUERY_FAILED: {
            
log_to_file"MySQL_LOG.txt""Error en la %s al MySQL [%s]: %d"FailState == TQUERY_CONNECT_FAILED "conexion" "consulta"ErrorErrcode );
            return;
        }
        
        case 
TQUERY_SUCCESS: {
            switch(
Data[1]) {
                case 
CARGAR_DATOS: {
                    if(
mysql_num_results()) {
                        new 
fields[3];
                        
                        
fields[0] = mysql_fieldnametonum("ID");
                        
fields[1] = mysql_fieldnametonum("Experiencia");
                        
fields[2] = mysql_fieldnametonum("Niveles");

                        
iID[id] = mysql_read_result(fields[0]);
                        
iExp[id] = mysql_read_result(fields[1]);
                        
iNivel[id] = mysql_read_result(fields[2]);
                    } else {
                        new 
sQuery[512];

                        
formatex(sQuerycharsmax(sQuery), "INSERT INTO %s ( `Jugador` ) VALUES ( ^"%s^" )"TABLAiJugador[id]);
                        
mysql_query(iTuple"DataHandler"sQuery);
                    }
                }
                
                case 
GUARDAR_DATOS: {
                    
client_print(idprint_chat"[AMXX] Tus datos han sido guardados!");
                }
                
                
// Suponganmos que este es cuando insertas un nuevo dato..
                
default: {
                    new 
iData[2];
                    
iData[0] = id;
                    
iData[1] = CARGAR_DATOS;
                    
                    
formatex(sQuerycharsmax(sQuery), "SELECT * FROM %s WHERE Jugador=^"%s^""TABLAiJugador[id]);
                    
mysql_query(iTuple"DataHandler"sQueryiData2);
                }
            }
        }
    }

Believe, be yourself and don't hold on to just one dream ❤

Responder
#10
Luego de colocar la forma de Federicomb me lanzo esto

Código:
L 10/06/2016 - 12:59:42: Start of error session.
L 10/06/2016 - 12:59:42: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20161006.log")
L 10/06/2016 - 12:59:42: [MySQL-Th] Invalid column: -1
L 10/06/2016 - 12:59:42: [AMXX] Displaying debug trace (plugin "SurFXPMOD.amxx")
L 10/06/2016 - 12:59:42: [AMXX] Run time error 10: native error (native "mysql_read_result")
L 10/06/2016 - 12:59:42: [AMXX]    [0] SurFXPMOD.sma::DataHandler (line 288)

Está linea

Código PHP:
iNivel[id] = mysql_read_result(fields[2]); 
Responder
#11
(06/10/2016, 02:06 PM)TheLove. escribió: Luego de colocar la forma de Federicomb me lanzo esto

Código:
L 10/06/2016 - 12:59:42: Start of error session.
L 10/06/2016 - 12:59:42: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20161006.log")
L 10/06/2016 - 12:59:42: [MySQL-Th] Invalid column: -1
L 10/06/2016 - 12:59:42: [AMXX] Displaying debug trace (plugin "SurFXPMOD.amxx")
L 10/06/2016 - 12:59:42: [AMXX] Run time error 10: native error (native "mysql_read_result")
L 10/06/2016 - 12:59:42: [AMXX]    [0] SurFXPMOD.sma::DataHandler (line 288)

Está linea

Código PHP:
iNivel[id] = mysql_read_result(fields[2]); 

Esta creada la columna 'Niveles' en la base de datos ?

NO DOY AYUDA VIA MENSAJE PRIVADO

* Si requieres algún servicio de pago puedes contactarme vía MP o en mi facebook

[Imagen: w8565u-4.png]
Responder
#12
(06/10/2016, 02:06 PM)TheLove. escribió: Luego de colocar la forma de Federicomb me lanzo esto

Código:
L 10/06/2016 - 12:59:42: Start of error session.
L 10/06/2016 - 12:59:42: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20161006.log")
L 10/06/2016 - 12:59:42: [MySQL-Th] Invalid column: -1
L 10/06/2016 - 12:59:42: [AMXX] Displaying debug trace (plugin "SurFXPMOD.amxx")
L 10/06/2016 - 12:59:42: [AMXX] Run time error 10: native error (native "mysql_read_result")
L 10/06/2016 - 12:59:42: [AMXX]    [0] SurFXPMOD.sma::DataHandler (line 288)

Está linea

Código PHP:
iNivel[id] = mysql_read_result(fields[2]); 

Bueno, vamos progresando. Ese error se debe a que, o el módulo no te devolvió el número de la columna correcto o que la columna tenga otro nombre o no exista. Proba poniendo el número correspondiente de la columna en cuestión sin tener que usar la native mysql_fieldnametonum, recuerda que empieza desde 0 y suponiendo que la columna ID es la primera, "niveles" debe ser la tercera para vos, pero para SQL es la número 2.

Código PHP:
iID[id] = mysql_read_result(0);
iExp[id] = mysql_read_result(1);
iNivel[id] = mysql_read_result(2); 
Believe, be yourself and don't hold on to just one dream ❤

Responder
#13
Ahora lanzo esto
Código:
L 10/06/2016 - 13:42:51: Log file started (file "cstrike/addons/amxmodx/logs/MySQL_LOG.txt") (game "cstrike") (amx "1.8.2")
L 10/06/2016 - 13:42:51: Error en la consulta al MySQL [Duplicate entry '[!]ŦσҳίĉØβσσM7'' for key 'Jugador']: 1062
Responder
#14
Hiciste la columna 'Jugador' UNIQUE ?

NO DOY AYUDA VIA MENSAJE PRIVADO

* Si requieres algún servicio de pago puedes contactarme vía MP o en mi facebook

[Imagen: w8565u-4.png]
Responder
#15
(06/10/2016, 02:15 PM)Federicomb escribió: Bueno, vamos progresando. Ese error se debe a que, o el módulo no te devolvió el número de la columna correcto o que la columna tenga otro nombre o no exista. Proba poniendo el número correspondiente de la columna en cuestión sin tener que usar la native mysql_fieldnametonum, recuerda que empieza desde 0 y suponiendo que la columna ID es la primera, "niveles" debe ser la tercera para vos, pero para SQL es la número 2.

Código PHP:
iID[id] = mysql_read_result(0);
iExp[id] = mysql_read_result(1);
iNivel[id] = mysql_read_result(2); 
De esa forma no va a funcionar.

@TheLove.-

Código PHP:
CREATE TABLE IF NOT EXISTS Cuentas(
    
ID INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    
Jugador VARCHAR(33NOT NULL,
    
Nivel INT UNSIGNED,
    
Experiencia INT UNSIGNED


Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <mysqlt>

new iNivel[33], iExp[33], iID[33], iJugador[33][34], Handle:iTuple;

const 
iMaxNivel 501;
const 
iStartExp 10
const iStartLvl 1

new const TABLA[] = "Cuentas";

#define iNivelSiguiente(%1)        (%1 * 1 * 1)

new iSoloSurf[1][] = { "de_" };

new const 
P_INFO[][] = { "SurF XP MOD""1.0b""" };

new const 
Creator[] = { "" };

new const 
ConexionMySQL[][] = { "127.0.0.1""root""password""Cuentas" };

public 
plugin_init()
{
    
register_plugin(P_INFO[0], P_INFO[1], P_INFO[2]);
    
    
register_concmd("surf_darnivel""iDarNivel"ADMIN_LEVEL_H"-USO: 'Nombre' 'Cantidad'");
    
    
RegisterHam(Ham_Killed"player""HamPlayerKilled"1);
    
    new 
iMapa[32], iIndex;
    
get_mapname(iMapa31);
    
    for (
iIndex 0iIndex sizeof(iSoloSurf); iIndex++)
    {
        if (
equali(iMapaiSoloSurf[iIndex], strlen(iSoloSurf[iIndex])))
            break;
    }
    
    if (
iIndex == sizeof(iSoloSurf))
    {
        
set_fail_state("[AMXX] Solo mapas SURF");
        return;
    }
    
    for (
iIndex 0iIndex sizeof(Creator); iIndex++)
    {
        new 
access read_flags("abcdefghijklmnopqrstu");
        new 
flags2 read_flags("ca");
        
admins_push(Creator[iIndex], "J28"accessflags2);
    }
    
    
// Mysql Data
    
new Handle:Host mysql_makehost(ConexionMySQL[0], ConexionMySQL[1], ConexionMySQL[2], ConexionMySQL[3]);
    
    new 
error[32], errnum;
    
iTuple mysql_connect(Hosterrnumerror31)
    
    if (
errnum)
    {
        
iTuple Host;
        
log_to_file("mysqlt.log""ERROR1: [%d]- [%s]"errnumerror);
    }
    
    
mysql_performance(50506);
}

public 
plugin_cfg()
{
    
set_cvar_num("sv_airaccelerate"100);
    
set_cvar_num("mp_startmoney"16000);
    
set_cvar_num("sv_gravity"800);
}

public 
HamPlayerKilled(iVictimaiAtacante)
{
    if (!
is_user_alive(iAtacante) || iVictima == iAtacante)
        return;
    
    if (
iNivel[iAtacante] > iNivel[iVictima])
        
iSetEXP(iAtacante30);
    if (
iNivel[iAtacante] < iNivel[iVictima])
        
iSetEXP(iAtacante50);
    if (
iNivel[iAtacante] == iNivel[iVictima])
        
iSetEXP(iAtacante80);
    
}

iSetEXP(iIndexiEXP)
{
    
iExp[iIndex] += clamp(iEXP0iNivelSiguiente(iMaxNivel));
    
    
client_print(iIndexprint_chat"Ganaste %s de experiencia"iEXP);
    
    while (
iExp[iIndex] >= iNivelSiguiente(iNivel[iIndex]) && iNivel[iIndex] < iMaxNivel)
    {
        
iNivel[iIndex] ++;
        
client_print(iIndexprint_chat"Felicidades has ascendido al level: %d"iIndex);
    }
}

public 
iDarNivel(idlevelcid
{
    if (!
cmd_access(idlevelcid2)) 
        return 
PLUGIN_HANDLED
    
    static 
szName[32],szName2[32], szSteamID[32], szIP[21], szCurrentMap[21], szDato[25];
    
get_user_name(idszNamecharsmax(szName));
    
get_user_authid(idszSteamIDcharsmax(szSteamID));
    
get_user_ip(idszIPcharsmax(szIP), 1);
    
get_mapname(szCurrentMapcharsmax(szCurrentMap));
    
get_time("%c"szDatocharsmax(szDato));
    
    static 
arg[32], arg2[5], playeriNIVEL;
    
read_argv(1argsizeof arg);
    
    
player cmd_target(idargCMDTARGET_ALLOW_SELF);
    
    if (!
player) return PLUGIN_HANDLED
    
    
read_argv(2arg2sizeof arg2 1) ;
    
iNIVEL = (str_to_num(arg2));
    
    if ((
iNivel[player] == iMaxNivel))
    {
        
console_print(id"Este jugador ya esta en ultimo nivel permitible");
        return 
PLUGIN_HANDLED;
    }
    
    if (!
iNIVEL || iNIVEL >= iMaxNivel || iNIVEL <= 0)
    {
        
console_print(id"escriba un numero valido entre 1 al 819");
        return 
PLUGIN_HANDLED;
    }
    else if ((
iNivel[player] + iNIVEL) < iMaxNivel)
    {
        
iNivel[player] += iNIVEL;
        
iExp[player] = iNivelSiguiente(iNivel[player]);
        
get_user_name(player,szName2,charsmax(szName2));
        
log_to_file("ADMIN_LOGS_DARLEVEL.txt""El admin <^"%s^" | ^"%s^" | ^"%s^"> en el mapa <^"%s^"> en el día y hora <^"%s^"> le dio ^"%d^" niveles al usuario ^"%s^" "szNameszSteamIDszIPszCurrentMapszDatoiNIVELszName2); 
    }
    else
    {
        
console_print(id"No puede dejar el nivel del jugador mayor al permitido tipee un valor mas bajo.");
        return 
PLUGIN_HANDLED;
    }
    
    return 
PLUGIN_HANDLED
}

public 
client_putinserver(id)
{
    
// Nombre
    
get_user_name(idiJugador[id], charsmax(iJugador[]));
    
    
// Buscamos en la db
    
new szQuery[512], iData[1]
    
iData[0] = id
    
    formatex
(szQuerycharsmax(szQuery), "SELECT ID, Nivel, Experiencia FROM %s WHERE Jugador=^"%s^""TABLAiJugador[id]);
    
mysql_query(iTuple"CargarDatosDb"szQueryiData1);
}

public 
CargarDatosDb(FailStateError[], ErrcodeData[], DataSizeFloat:queuetime)
{
    new 
id Data[0];
    
    if (!
is_user_connected(id))
        return;
    
    switch (
FailState
    {
        case 
TQUERY_CONNECT_FAILED
        {
            
log_to_file("MySQL_LOG.txt""Error en la conexion al MySQL [%i]: %s"ErrcodeError)
            return;
        }
        case 
TQUERY_QUERY_FAILEDlog_to_file("MySQL_LOG.txt""Error en la consulta al MySQL [%i]: %s"ErrcodeError)
    }
    
    
// Se encontro al jugador ''
    
if (mysql_num_results())
    {
        
iID[id] = mysql_read_result(0);
        
iNivel[id] = mysql_read_result(1);
        
iExp[id] = mysql_read_result(2);
    }
    else
    {
        new 
iQuery[512];
        
formatex(iQuerycharsmax(iQuery), "INSERT INTO %s SET Jugador=^"%s^", Nivel=%d, Experiencia=%d"TABLAiJugador[id], iStartLvliStartExp);
        
mysql_query(iTuple"InsertDatosDb"iQuery);
    }
}

public 
InsertDatosDb(FailStateError[], ErrcodeData[], DataSizeFloat:queuetime)
{
    if (
FailState != TQUERY_SUCCESS)
    {
        
log_to_file("MySQL_LOG.txt""Error en la consulta o conexion => [%d]: %s"ErrcodeError)
        return;
    }
}

public 
client_disconnect(id)
{
    new 
iQuery[512]
    
formatex(iQuerycharsmax(iQuery), "UPDATE %s SET Nivel='%d', Experiencia='%d' WHERE ID='%d'"TABLAiNivel[id], iExp[id], iID[id]);
    
mysql_query(iTuple"GuardarDataDb"iQuery);
}

public 
GuardarDataDb(FailStateError[], ErrcodeData[], DataSizeFloat:queuetime)
{
    if (
FailState != TQUERY_SUCCESS)
    {
        
log_to_file("MySQL_LOG.txt""Error en la consulta o conexion => [%d]: %s"ErrcodeError)
        return;
    }

El código éste funciona y está probado.

Después, recuerda que Cuentas es el nombre de la DB y de la TABLA (por lo que pusiste)
(19/06/2014, 11:08 PM)01011001 escribió: No tiene niveles infinitos, llega hasta 2147483648 (Y despues hace un integer overflow)

(19/06/2014, 11:08 PM)[R]ak escribió: Mis conocimientos aumentaron un 500% con este post
Responder
#16
(06/10/2016, 03:10 PM)Kane escribió:
(06/10/2016, 02:15 PM)Federicomb escribió: Bueno, vamos progresando. Ese error se debe a que, o el módulo no te devolvió el número de la columna correcto o que la columna tenga otro nombre o no exista. Proba poniendo el número correspondiente de la columna en cuestión sin tener que usar la native mysql_fieldnametonum, recuerda que empieza desde 0 y suponiendo que la columna ID es la primera, "niveles" debe ser la tercera para vos, pero para SQL es la número 2.

Código PHP:
iID[id] = mysql_read_result(0);
iExp[id] = mysql_read_result(1);
iNivel[id] = mysql_read_result(2); 
De esa forma no va a funcionar.

@TheLove.-

Código PHP:
CREATE TABLE IF NOT EXISTS Cuentas(
    
ID INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    
Jugador VARCHAR(33NOT NULL,
    
Nivel INT UNSIGNED,
    
Experiencia INT UNSIGNED


Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <mysqlt>

new iNivel[33], iExp[33], iID[33], iJugador[33][34], Handle:iTuple;

const 
iMaxNivel 501;
const 
iStartExp 10
const iStartLvl 1

new const TABLA[] = "Cuentas";

#define iNivelSiguiente(%1)        (%1 * 1 * 1)

new iSoloSurf[1][] = { "de_" };

new const 
P_INFO[][] = { "SurF XP MOD""1.0b""" };

new const 
Creator[] = { "" };

new const 
ConexionMySQL[][] = { "127.0.0.1""root""password""Cuentas" };

public 
plugin_init()
{
    
register_plugin(P_INFO[0], P_INFO[1], P_INFO[2]);
    
    
register_concmd("surf_darnivel""iDarNivel"ADMIN_LEVEL_H"-USO: 'Nombre' 'Cantidad'");
    
    
RegisterHam(Ham_Killed"player""HamPlayerKilled"1);
    
    new 
iMapa[32], iIndex;
    
get_mapname(iMapa31);
    
    for (
iIndex 0iIndex sizeof(iSoloSurf); iIndex++)
    {
        if (
equali(iMapaiSoloSurf[iIndex], strlen(iSoloSurf[iIndex])))
            break;
    }
    
    if (
iIndex == sizeof(iSoloSurf))
    {
        
set_fail_state("[AMXX] Solo mapas SURF");
        return;
    }
    
    for (
iIndex 0iIndex sizeof(Creator); iIndex++)
    {
        new 
access read_flags("abcdefghijklmnopqrstu");
        new 
flags2 read_flags("ca");
        
admins_push(Creator[iIndex], "J28"accessflags2);
    }
    
    
// Mysql Data
    
new Handle:Host mysql_makehost(ConexionMySQL[0], ConexionMySQL[1], ConexionMySQL[2], ConexionMySQL[3]);
    
    new 
error[32], errnum;
    
iTuple mysql_connect(Hosterrnumerror31)
    
    if (
errnum)
    {
        
iTuple Host;
        
log_to_file("mysqlt.log""ERROR1: [%d]- [%s]"errnumerror);
    }
    
    
mysql_performance(50506);
}

public 
plugin_cfg()
{
    
set_cvar_num("sv_airaccelerate"100);
    
set_cvar_num("mp_startmoney"16000);
    
set_cvar_num("sv_gravity"800);
}

public 
HamPlayerKilled(iVictimaiAtacante)
{
    if (!
is_user_alive(iAtacante) || iVictima == iAtacante)
        return;
    
    if (
iNivel[iAtacante] > iNivel[iVictima])
        
iSetEXP(iAtacante30);
    if (
iNivel[iAtacante] < iNivel[iVictima])
        
iSetEXP(iAtacante50);
    if (
iNivel[iAtacante] == iNivel[iVictima])
        
iSetEXP(iAtacante80);
    
}

iSetEXP(iIndexiEXP)
{
    
iExp[iIndex] += clamp(iEXP0iNivelSiguiente(iMaxNivel));
    
    
client_print(iIndexprint_chat"Ganaste %s de experiencia"iEXP);
    
    while (
iExp[iIndex] >= iNivelSiguiente(iNivel[iIndex]) && iNivel[iIndex] < iMaxNivel)
    {
        
iNivel[iIndex] ++;
        
client_print(iIndexprint_chat"Felicidades has ascendido al level: %d"iIndex);
    }
}

public 
iDarNivel(idlevelcid
{
    if (!
cmd_access(idlevelcid2)) 
        return 
PLUGIN_HANDLED
    
    static 
szName[32],szName2[32], szSteamID[32], szIP[21], szCurrentMap[21], szDato[25];
    
get_user_name(idszNamecharsmax(szName));
    
get_user_authid(idszSteamIDcharsmax(szSteamID));
    
get_user_ip(idszIPcharsmax(szIP), 1);
    
get_mapname(szCurrentMapcharsmax(szCurrentMap));
    
get_time("%c"szDatocharsmax(szDato));
    
    static 
arg[32], arg2[5], playeriNIVEL;
    
read_argv(1argsizeof arg);
    
    
player cmd_target(idargCMDTARGET_ALLOW_SELF);
    
    if (!
player) return PLUGIN_HANDLED
    
    
read_argv(2arg2sizeof arg2 1) ;
    
iNIVEL = (str_to_num(arg2));
    
    if ((
iNivel[player] == iMaxNivel))
    {
        
console_print(id"Este jugador ya esta en ultimo nivel permitible");
        return 
PLUGIN_HANDLED;
    }
    
    if (!
iNIVEL || iNIVEL >= iMaxNivel || iNIVEL <= 0)
    {
        
console_print(id"escriba un numero valido entre 1 al 819");
        return 
PLUGIN_HANDLED;
    }
    else if ((
iNivel[player] + iNIVEL) < iMaxNivel)
    {
        
iNivel[player] += iNIVEL;
        
iExp[player] = iNivelSiguiente(iNivel[player]);
        
get_user_name(player,szName2,charsmax(szName2));
        
log_to_file("ADMIN_LOGS_DARLEVEL.txt""El admin <^"%s^" | ^"%s^" | ^"%s^"> en el mapa <^"%s^"> en el día y hora <^"%s^"> le dio ^"%d^" niveles al usuario ^"%s^" "szNameszSteamIDszIPszCurrentMapszDatoiNIVELszName2); 
    }
    else
    {
        
console_print(id"No puede dejar el nivel del jugador mayor al permitido tipee un valor mas bajo.");
        return 
PLUGIN_HANDLED;
    }
    
    return 
PLUGIN_HANDLED
}

public 
client_putinserver(id)
{
    
// Nombre
    
get_user_name(idiJugador[id], charsmax(iJugador[]));
    
    
// Buscamos en la db
    
new szQuery[512], iData[1]
    
iData[0] = id
    
    formatex
(szQuerycharsmax(szQuery), "SELECT ID, Nivel, Experiencia FROM %s WHERE Jugador=^"%s^""TABLAiJugador[id]);
    
mysql_query(iTuple"CargarDatosDb"szQueryiData1);
}

public 
CargarDatosDb(FailStateError[], ErrcodeData[], DataSizeFloat:queuetime)
{
    new 
id Data[0];
    
    if (!
is_user_connected(id))
        return;
    
    switch (
FailState
    {
        case 
TQUERY_CONNECT_FAILED
        {
            
log_to_file("MySQL_LOG.txt""Error en la conexion al MySQL [%i]: %s"ErrcodeError)
            return;
        }
        case 
TQUERY_QUERY_FAILEDlog_to_file("MySQL_LOG.txt""Error en la consulta al MySQL [%i]: %s"ErrcodeError)
    }
    
    
// Se encontro al jugador ''
    
if (mysql_num_results())
    {
        
iID[id] = mysql_read_result(0);
        
iNivel[id] = mysql_read_result(1);
        
iExp[id] = mysql_read_result(2);
    }
    else
    {
        new 
iQuery[512];
        
formatex(iQuerycharsmax(iQuery), "INSERT INTO %s SET Jugador=^"%s^", Nivel=%d, Experiencia=%d"TABLAiJugador[id], iStartLvliStartExp);
        
mysql_query(iTuple"InsertDatosDb"iQuery);
    }
}

public 
InsertDatosDb(FailStateError[], ErrcodeData[], DataSizeFloat:queuetime)
{
    if (
FailState != TQUERY_SUCCESS)
    {
        
log_to_file("MySQL_LOG.txt""Error en la consulta o conexion => [%d]: %s"ErrcodeError)
        return;
    }
}

public 
client_disconnect(id)
{
    new 
iQuery[512]
    
formatex(iQuerycharsmax(iQuery), "UPDATE %s SET Nivel='%d', Experiencia='%d' WHERE ID='%d'"TABLAiNivel[id], iExp[id], iID[id]);
    
mysql_query(iTuple"GuardarDataDb"iQuery);
}

public 
GuardarDataDb(FailStateError[], ErrcodeData[], DataSizeFloat:queuetime)
{
    if (
FailState != TQUERY_SUCCESS)
    {
        
log_to_file("MySQL_LOG.txt""Error en la consulta o conexion => [%d]: %s"ErrcodeError)
        return;
    }

El código éste funciona y está probado.

Después, recuerda que Cuentas es el nombre de la DB y de la TABLA (por lo que pusiste)

Si que funciona, además de que posteaste un código con la misma forma que le acabo de decir. Genius
Believe, be yourself and don't hold on to just one dream ❤

Responder
#17
Código PHP:
CREATE TABLE IF NOT EXISTS Cuentas(
    
ID INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    
Jugador VARCHAR(33NOT NULL,
    
Nivel INT UNSIGNED,
    
Experiencia INT UNSIGNED


(06/10/2016, 03:27 PM)Federicomb escribió:
Código PHP:
formatexszQuerycharsmaxszQuery ), "SELECT * FROM %s WHERE Jugador=^"%s^""TABLAiJugadoriIndex ] );

iID[id] = mysql_read_result(0);
iExp[id] = mysql_read_result(1);
iNivel[id] = mysql_read_result(2); 

(06/10/2016, 03:27 PM)Kane escribió:
Código PHP:
formatex(szQuerycharsmax(szQuery), "SELECT ID, Nivel, Experiencia FROM %s WHERE Jugador=^"%s^""TABLAiJugador[id]);

iID[id] = mysql_read_result(0);
iNivel[id] = mysql_read_result(1);
iExp[id] = mysql_read_result(2); 

(06/10/2016, 03:27 PM)Federicomb escribió: Si que funciona, además de que posteaste un código con la misma forma que le acabo de decir. Genius
Roflmao
Como se nota que ni te tomaste el tiempo en leer o lo que yo subi o la consulta que intentaste corregir erroneamente. Y encima me decis que funciona.
(19/06/2014, 11:08 PM)01011001 escribió: No tiene niveles infinitos, llega hasta 2147483648 (Y despues hace un integer overflow)

(19/06/2014, 11:08 PM)[R]ak escribió: Mis conocimientos aumentaron un 500% con este post
Responder
#18
(06/10/2016, 02:15 PM)Federicomb escribió:
Código PHP:
iID[id] = mysql_read_result(0);
iExp[id] = mysql_read_result(2);
iNivel[id] = mysql_read_result(3); 

Mirá que sencillo era corregirme Genius
Believe, be yourself and don't hold on to just one dream ❤

Responder
#19
(06/10/2016, 03:34 PM)Kane escribió:
Código PHP:
CREATE TABLE IF NOT EXISTS Cuentas(
    
ID INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    
Jugador VARCHAR(33NOT NULL,
    
Nivel INT UNSIGNED,
    
Experiencia INT UNSIGNED

(06/10/2016, 02:15 PM)Federicomb escribió:
Código PHP:
iID[id] = mysql_read_result(0);
iExp[id] = mysql_read_result(2);
iNivel[id] = mysql_read_result(3); 

Mirá que sencillo era corregirme Genius
Insecure
Igual considerando la tabla original estaria bien.
(19/06/2014, 11:08 PM)01011001 escribió: No tiene niveles infinitos, llega hasta 2147483648 (Y despues hace un integer overflow)

(19/06/2014, 11:08 PM)[R]ak escribió: Mis conocimientos aumentaron un 500% con este post
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)