PDA

View Full Version : [Ayuda] Guardado de armas


oOFotherOo
22/11/2012, 08:23 PM
Buenas amigos de SAMP quisiera saber si me podeis ayudar con este pequeño problema y es que estoy tratando de guardar las armas y no se guardan las armas.

Codigo:

stock GuardarCuenta(playerid)
{
static query[350], Float:pos[4], Float:vida, Float:chaleco;
GetPlayerPos(playerid, posArr{pos});
GetPlayerFacingAngle(playerid, pos[3]);
GetPlayerHealth(playerid, vida);
GetPlayerArmour(playerid, chaleco);
new weapons[13][2];
for(new i; i < 13; ++i)
{
GetPlayerWeaponData(playerid, i, weapons[i][0], weapons[i][1]);

mysql_format(g_Handle, query, "UPDATE `Usuarios` SET Vida = %.1f, Chaleco = %.1f, X = %.2f, Y = %.2f, Z = %.1f, A = %.2f, Interior = %d, VW = %d, Skin = %d, Dinero = %d, Nivel = %d, Arma_%i = %i, Municion_%i = %i WHERE `ID` = %d",
vida,
chaleco,
posArrEx{pos},
GetPlayerInterior(playerid),
GetPlayerVirtualWorld(playerid),
GetPlayerSkin(playerid),
GetPlayerMoney(playerid),
GetPlayerScore(playerid),
g_PlayerInfo[playerid][pArma][i],
g_PlayerInfo[playerid][pMunicion][i],
g_PlayerInfo[playerid][pSQLid]
);
mysql_function_query(g_Handle, query, false, "SendQuery", "");
}
return 1;
}

Muchas gracias.

Un saludo.

Parka
22/11/2012, 10:49 PM
creo que no estas uniendo la variable weapons con la variable parma intenta asi


stock GuardarCuenta(playerid)
{
static query[350], Float:pos[4], Float:vida, Float:chaleco;
GetPlayerPos(playerid, posArr{pos});
GetPlayerFacingAngle(playerid, pos[3]);
GetPlayerHealth(playerid, vida);
GetPlayerArmour(playerid, chaleco);
new weapons[13][2];
for(new i; i < 13; ++i)
{
GetPlayerWeaponData(playerid, i, g_PlayerInfo[playerid][pArma][i], g_PlayerInfo[playerid][pMunicion][i]);

mysql_format(g_Handle, query, "UPDATE `Usuarios` SET Vida = %.1f, Chaleco = %.1f, X = %.2f, Y = %.2f, Z = %.1f, A = %.2f, Interior = %d, VW = %d, Skin = %d, Dinero = %d, Nivel = %d, Arma_%i = %i, Municion_%i = %i WHERE `ID` = %d",
vida,
chaleco,
posArrEx{pos},
GetPlayerInterior(playerid),
GetPlayerVirtualWorld(playerid),
GetPlayerSkin(playerid),
GetPlayerMoney(playerid),
GetPlayerScore(playerid),
g_PlayerInfo[playerid][pArma][i],
g_PlayerInfo[playerid][pMunicion][i],
g_PlayerInfo[playerid][pSQLid]
);
mysql_function_query(g_Handle, query, false, "SendQuery", "");
}
return 1;
}


PD: Deberia funcionar

oOFotherOo
23/11/2012, 12:17 AM
creo que no estas uniendo la variable weapons con la variable parma intenta asi


stock GuardarCuenta(playerid)
{
static query[350], Float:pos[4], Float:vida, Float:chaleco;
GetPlayerPos(playerid, posArr{pos});
GetPlayerFacingAngle(playerid, pos[3]);
GetPlayerHealth(playerid, vida);
GetPlayerArmour(playerid, chaleco);
new weapons[13][2];
for(new i; i < 13; ++i)
{
GetPlayerWeaponData(playerid, i, g_PlayerInfo[playerid][pArma][i], g_PlayerInfo[playerid][pMunicion][i]);

mysql_format(g_Handle, query, "UPDATE `Usuarios` SET Vida = %.1f, Chaleco = %.1f, X = %.2f, Y = %.2f, Z = %.1f, A = %.2f, Interior = %d, VW = %d, Skin = %d, Dinero = %d, Nivel = %d, Arma_%i = %i, Municion_%i = %i WHERE `ID` = %d",
vida,
chaleco,
posArrEx{pos},
GetPlayerInterior(playerid),
GetPlayerVirtualWorld(playerid),
GetPlayerSkin(playerid),
GetPlayerMoney(playerid),
GetPlayerScore(playerid),
g_PlayerInfo[playerid][pArma][i],
g_PlayerInfo[playerid][pMunicion][i],
g_PlayerInfo[playerid][pSQLid]
);
mysql_function_query(g_Handle, query, false, "SendQuery", "");
}
return 1;
}


PD: Deberia funcionar

Muchas gracias pero hay un problema y es que envia 3 consultas y con errores:

[20:32:12] Error ID: 1064
[20:32:12] Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%i WHERE `ID` = %d' at line 1
[20:32:12] Callback: SendQuery Query: UPDATE `Usuarios` SET Vida = 100.0, Chaleco = 100.0, X = 1854.59, Y = -1387.45, Z = 14.4, A = 111.94, Interior = 0, VW = 0, Skin = 0, Dinero = 0, Nivel = 0, Arma_0 = 73, Municion_1 = %i WHERE `ID` = %d
[20:32:12] Error ID: 1064
[20:32:12] Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%i WHERE `ID` = %d' at line 1
[20:32:12] Callback: SendQuery Query: UPDATE `Usuarios` SET Vida = 100.0, Chaleco = 100.0, X = 1854.59, Y = -1387.45, Z = 14.4, A = 111.94, Interior = 0, VW = 0, Skin = 0, Dinero = 0, Nivel = 0, Arma_0 = 0, Municion_1 = %i WHERE `ID` = %d
[20:32:12] Error ID: 1064
[20:32:12] Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%i WHERE `ID` = %d' at line 1
[20:32:12] Callback: SendQuery Query: UPDATE `Usuarios` SET Vida = 100.0, Chaleco = 100.0, X = 1854.59, Y = -1387.45, Z = 14.4, A = 111.94, Interior = 0, VW = 0, Skin = 0, Dinero = 0, Nivel = 0, Arma_24 = 89, Municion_1 = %i WHERE `ID` = %d


Muchas gracias.

Un saludo.

WCrimson
23/11/2012, 12:45 AM
Prueba cambiando el especificador '%d' por '%i'.
- No dejes espacios entre el último campo a actualizar y valor a introducir.
- Ejecuta 2 consultas, 1 cada para actualizar las armas ( cada que corra el bucle ) y la 2 fuera del bucle para el resto de campos, ya que es totalmente innecesario actualizarlos tantas veces.

EDIT: Cierto, se me escapó el detalle que dejo Julian.

[J]ulian
23/11/2012, 12:52 AM
Fijate así:

i, // slot
g_PlayerInfo[playerid][pArma][i], // arma
i, // slot
g_PlayerInfo[playerid][pMunicion][i], // balas


Y creo lo mismo, que es innecesario ejecutar todo 13 veces por lo de las armas. Quizás sea mejor ejecutarlo en sentencias distintas (lo de las armas separado del resto).

oOFotherOo
23/11/2012, 01:21 AM
ulian;2236420']Fijate así:

i, // slot
g_PlayerInfo[playerid][pArma][i], // arma
i, // slot
g_PlayerInfo[playerid][pMunicion][i], // balas


Y creo lo mismo, que es innecesario ejecutar todo 13 veces por lo de las armas. Quizás sea mejor ejecutarlo en sentencias distintas (lo de las armas separado del resto).

Gracias me sirvio, no me gusta hacerlo asi ya que envia 3 consultas innecesariamente, trate de hacerlo con GetPlayerWeapon y GetPlayerAmmo pero no funciona.

Codigo:
stock GuardarCuenta(playerid)
{
static query[350], Float:pos[4], Float:vida, Float:chaleco;
GetPlayerPos(playerid, posArr{pos});
GetPlayerFacingAngle(playerid, pos[3]);
GetPlayerHealth(playerid, vida);
GetPlayerArmour(playerid, chaleco);
mysql_format(g_Handle, query, "UPDATE `Usuarios` SET Vida = %.1f, Chaleco = %.1f, X = %.2f, Y = %.2f, Z = %.1f, A = %.2f, \
Interior = %d, VW = %d, Skin = %d, Dinero = %d, Nivel = %d, Arma_0 = %d, Municion_0 = %d , Arma_1 = %d, Municion_1 = %d, Arma_2 = %d, Municion_2 = %d WHERE `ID` = %d",
vida,
chaleco,
posArrEx{pos},
GetPlayerInterior(playerid),
GetPlayerVirtualWorld(playerid),
GetPlayerSkin(playerid),
GetPlayerMoney(playerid),
GetPlayerScore(playerid),
GetPlayerWeapon(playerid),
GetPlayerAmmo(playerid),
GetPlayerWeapon(playerid),
GetPlayerAmmo(playerid),
GetPlayerWeapon(playerid),
GetPlayerAmmo(playerid),
g_PlayerInfo[playerid][pSQLid]
);
mysql_function_query(g_Handle, query, false, "SendQuery", "");
return 1;
}

PD: Solo es para guardar 3 armas ya que tengo un sistema de armas maximas las cuales son 3 por PJ.

Muchas gracias un saludo.

[J]ulian
23/11/2012, 05:34 AM
Así tengas 3 armas, tenes que recorrer los 13 slots.

Así estás modificando 10 datos 13 veces innecesariamente xD, no se que sea mas efectivo pero creo que es mejor 13 sentencias que modificar 130 datos xD

PD: GetPlayerWeapon te devuelve el arma de la mano, no te sirve como lo hiciste.

oOFotherOo
23/11/2012, 01:51 PM
ulian;2236549']Así tengas 3 armas, tenes que recorrer los 13 slots.

Así estás modificando 10 datos 13 veces innecesariamente xD, no se que sea mas efectivo pero creo que es mejor 13 sentencias que modificar 130 datos xD

PD: GetPlayerWeapon te devuelve el arma de la mano, no te sirve como lo hiciste.

No hay alguna otra forma para realizar el guardado de las armas sin tener que enviar tantas consultas?

PD: Antes guardaba 1 sola arma con GetPlayerWeapon y GetPlayerAmmo pero por lo que veo solo 1.

Muchas gracias.

Un saludo.

[J]ulian
23/11/2012, 06:30 PM
No hay alguna otra forma para realizar el guardado de las armas sin tener que enviar tantas consultas?

PD: Antes guardaba 1 sola arma con GetPlayerWeapon y GetPlayerAmmo pero por lo que veo solo 1.

Muchas gracias.

Un saludo.

Si, poniendo "Arma_0", "Arma_1" todo así hasta 13 pero a mano.