[ZP] No guarda las habilidades
#1
Hola gente. Estoy tratando de guardar en mysql todas las habilidades, mediante un for, pero no se porque no funciona. No guarda ninguna habilidad, ya intente de varias formas, no me tira error en logs ni nada :/ (tengo el debug activado por las dudas de que me digan Whatever). Al insertar manualmente valores en las columnas de las habilidades las carga perfectamente.

Dejo el code..

Código PHP:
new g_habs33 ][ ][ ];

new 
g_mejoras_humanas[][ DATA_MEJORAS ] = {  
    { 
"Habilidad 1",         835 },  
    { 
"Habilidad 2",     625 }, 
    { 
"Habilidad 3",     1030 },  
    { 
"Habilidad 4",     1020 },  
    { 
"Habilidad 5",     715 },
    { 
"Habilidad 6",     520 },
    { 
"Habilidad 7",     420 },
    { 
"Habilidad 8",     415 }
}; 

En la parte de guardar:
Código PHP:
    formatex(g_querycharsmax(g_query), "UPDATE `%s` "TABLE4)
    for (new 
0sizeof g_mejoras_humanasi++)
        
formatex(g_querycharsmax(g_query), "SET `Habh%d`='%d'%s "ig_habs[id][0][i], (i==sizeof g_mejoras_humanas-1) ? "" ",");
    
    
formatex(g_querycharsmax(g_query), "`Cofres`='%d' WHERE `Cuenta`=^"%s^" AND `Personaje`=^"%s^""g_cofres{id}, user_id[id][1], g_name[id])
    
SQL_ThreadQuery(g_SqlTuple"IgnoreHandle"g_query

La parte de cargar:

Código PHP:
            if (SQL_NumResults(Query))
            {
                new 
i
                
for (0sizeof g_mejoras_humanasi++)
                    
g_habs[id][0][i] = SQL_ReadResult(Query2+i);
                    
                
g_cofres{id} = SQL_ReadResult(Query10)
                
                
messages(id"Cargando personaje.")
            } 

Whatdone
Responder
#2
El problema es que usas formatex varias veces y solo se utiliza la última parte escrita, es decir que lo primeros utilizados, no se tomarán en cuenta (Una de sus desventajas..). Es más recomendable hacer todo en uno solo o aunque sea algo molesto y piensas que sea menos "optimizable", hazlo uno por uno y listo.

PD: Otro caso que puedes hacer es usar iLen + Formatex, así lo puedes utilizar mejor
Código PHP:
new iLen 0;

iLen += formatex(g_query[iLen], charsmax(g_query) - iLen"UPDATE `%s` "TABLE4)
for (new 
0sizeof g_mejoras_humanasi++)
     
iLen += formatex(g_query[iLen], charsmax(g_query) - iLen"SET `Habh%d`='%d'%s "ig_habs[id][0][i], (i==sizeof g_mejoras_humanas-1) ? "" ",");
iLen += formatex(g_query[iLen], charsmax(g_query) - iLen"`Cofres`='%d' WHERE `Cuenta`=^"%s^" AND `Personaje`=^"%s^""g_cofres{id}, user_id[id][1], g_name[id])
SQL_ThreadQuery(g_SqlTuple"IgnoreHandle"g_query

PD2: Si no entendiste a lo que me referia, aquí te dejo un ejemplo
Código PHP:
formatex(szBuffercharsmax(szBuffer), "Hola a todos"// No se muestra porque utilizas la misma variable que guarda los caracteres
formatex(szBuffercharsmax(szBuffer), "Como estan"); // Esto si se muestra porque es lo último que escribes en la variable

client_print(idprint_chat"%s"szBuffer); 
Free agent - Vendo plugins, mods o apps del foro IPB (Invision community)
Contactarme vía Discord >>> AtselTV#8202
Responder
#3
(28/02/2015, 10:38 PM)CSAxel escribió: El problema es que usas formatex varias veces y solo se utiliza la última parte escrita, es decir que lo primeros utilizados, no se tomarán en cuenta (Una de sus desventajas..). Es más recomendable hacer todo en uno solo o aunque sea algo molesto y piensas que sea menos "optimizable", hazlo uno por uno y listo.

PD: Otro caso que puedes hacer es usar iLen + Formatex, así lo puedes utilizar mejor
Código PHP:
new iLen 0;

iLen += formatex(g_query[iLen], charsmax(g_query) - iLen"UPDATE `%s` "TABLE4)
for (new 
0sizeof g_mejoras_humanasi++)
     
iLen += formatex(g_query[iLen], charsmax(g_query) - iLen"SET `Habh%d`='%d'%s "ig_habs[id][0][i], (i==sizeof g_mejoras_humanas-1) ? "" ",");
iLen += formatex(g_query[iLen], charsmax(g_query) - iLen"`Cofres`='%d' WHERE `Cuenta`=^"%s^" AND `Personaje`=^"%s^""g_cofres{id}, user_id[id][1], g_name[id])
SQL_ThreadQuery(g_SqlTuple"IgnoreHandle"g_query

Ya lo habia probado asi, y tampoco funciona.. Ragestart
Responder
#4
Hazlo en una sola consulta y listo, menos quilombo..
Código PHP:
formatex(g_querycharsmax(g_query), "UPDATE `%s` SET `Habh1`='%d'"Habh2 ='%d'Habh3, `Cofres`='%d' WHERE `Cuenta`=^"%s^" AND `Personaje`=^"%s^"TABLE4g_habs[id][0][0], g_habs[id][0][1], g_habs[id][0][2], g_cofres{id}, user_id[id][1], g_name[id]); 
Free agent - Vendo plugins, mods o apps del foro IPB (Invision community)
Contactarme vía Discord >>> AtselTV#8202
Responder
#5
(28/02/2015, 11:15 PM)CSAxel escribió: Hazlo en una sola consulta y listo, menos quilombo..
Código PHP:
formatex(g_querycharsmax(g_query), "UPDATE `%s` SET `Habh1`='%d'"Habh2 ='%d'Habh3, `Cofres`='%d' WHERE `Cuenta`=^"%s^" AND `Personaje`=^"%s^"TABLE4g_habs[id][0][0], g_habs[id][0][1], g_habs[id][0][2], g_cofres{id}, user_id[id][1], g_name[id]); 

Es que no quiero hacerlo asi, supongamos que tengo que guardar mas de 30 variables, es alto choclo de codigo :_. Por eso hice el thread Confundido
Responder
#6
Igual es lo que más recomiendo, aunque haya posibilidades de que se pueda optimizar, optaría por eso... No importa si son 500 variables a guardar.. Si SQL soporta millones de bombardeos de consultas Roflmao
Free agent - Vendo plugins, mods o apps del foro IPB (Invision community)
Contactarme vía Discord >>> AtselTV#8202
Responder
#7
Perdon por el doble post, pero acabo de solucionarlo, y era una pelotudes.


Hice un print para ver que valores me devolvia, y vi que me los devolvia mal

Código PHP:
public dime(id)
{
    for (new 
0sizeof g_mejoras_humanasi++)
        
client_print(idprint_console"SET `Habh%d`='%d'%s "ig_habs[id][0][i], (i==sizeof g_mejoras_humanas-1) ? "" ",");


Me devolvia estos valores:

Código PHP:
SET `Habh0`='0'
SET `Habh1`='0'
SET `Habh2`='0'
SET `Habh5`='0'
SET `Habh7`='0'
SET `Habh6`='0'
SET `Habh3`='0'
SET `Habh2`='0' 

Como se puede ver, estan desordenados, tendrian que ir de Habh0 a Habh7.

Enconces, lo que hice fue lo siguiente, fue sacar el sizeof del print (no del for), y agregarle un 9-1. Como son 8 habilidades, hasta la habilidad 8 van a tener comas.
Código PHP:
public dime(id)
{
    for (new 
0sizeof g_mejoras_humanasi++)
        
client_print(idprint_console"SET `Habh%d`='%d'%s "ig_habs[id][0][i], (i==9-1) ? "" ",");
}

//Valores:

SET `Habh0`='0'
SET `Habh1`='0'
SET `Habh2`='0'
SET `Habh3`='0'
SET `Habh4`='0'
SET `Habh5`='0'
SET `Habh6`='0'
SET `Habh7`='0'

Ahora los devolvia bien. Entonces, lo que hice en la consulta de guardar fue esto Whatever

Código PHP:
new iLen 0;

    
iLen += formatex(g_query[iLen], charsmax(g_query) - iLen"UPDATE `%s` SET `ph`='%d', "TABLE4g_points[id][0])
    for (new 
0sizeof g_mejoras_humanasi++)
        
iLen += formatex(g_query[iLen], charsmax(g_query) - iLen"`Habh%d`='%d'%s "ig_habs[id][0][i], (i==9-1) ? "" ",");
    
iLen += formatex(g_query[iLen], charsmax(g_query) - iLen"`Cofres`='%d' WHERE `Cuenta`=^"%s^" AND `Personaje`=^"%s^""g_cofres{id}, user_id[id][1], g_name[id])
    
SQL_ThreadQuery(g_SqlTuple"IgnoreHandle"g_query

La parte de cargar:
Código PHP:
            if (SQL_NumResults(Query))
            {
                
g_points[id][0] = SQL_ReadResult(Query2)
                new 
i
                
for (0sizeof g_mejoras_humanasi++)
                    
g_habs[id][0][i] = SQL_ReadResult(Query3+i);
                    
                
g_cofres{id} = SQL_ReadResult(Query11)
                
                
messages(id"Cargando personaje.")
            } 
Bueno, no se si se entendio bien lo que hice para arreglarlo, soy medio malo explicando. Espero que a alguien le sirva por si quiere hacer algo parecido a lo que yo hice pacman

Cutecry
[Imagen: BAiqZgW.png]
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)