[Ayuda] Guardado de armas
#1

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:

pawn Код:
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.
Reply
#2

creo que no estas uniendo la variable weapons con la variable parma intenta asi

PHP код:
stock GuardarCuenta(playerid)
{
    static 
query[350], Float:pos[4], Float:vidaFloat:chaleco;
    
GetPlayerPos(playeridposArr{pos});
    
GetPlayerFacingAngle(playeridpos[3]);
    
GetPlayerHealth(playeridvida);
    
GetPlayerArmour(playeridchaleco);
    new 
weapons[13][2];
    for(new 
i13; ++i)
    {
         
GetPlayerWeaponData(playeridig_PlayerInfo[playerid][pArma][i], g_PlayerInfo[playerid][pMunicion][i]);

        
mysql_format(g_Handlequery"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_Handlequeryfalse"SendQuery""");
    }
    return 
1;

PD: Deberia funcionar
Reply
#3

Quote:
Originally Posted by cesar_******
Посмотреть сообщение
creo que no estas uniendo la variable weapons con la variable parma intenta asi

PHP код:
stock GuardarCuenta(playerid)
{
    static 
query[350], Float:pos[4], Float:vidaFloat:chaleco;
    
GetPlayerPos(playeridposArr{pos});
    
GetPlayerFacingAngle(playeridpos[3]);
    
GetPlayerHealth(playeridvida);
    
GetPlayerArmour(playeridchaleco);
    new 
weapons[13][2];
    for(new 
i13; ++i)
    {
         
GetPlayerWeaponData(playeridig_PlayerInfo[playerid][pArma][i], g_PlayerInfo[playerid][pMunicion][i]);
        
mysql_format(g_Handlequery"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_Handlequeryfalse"SendQuery""");
    }
    return 
1;

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

pawn Код:
[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.
Reply
#4

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.
Reply
#5

Fijate asн:
pawn Код:
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).
Reply
#6

Quote:
Originally Posted by [J]ulian
Посмотреть сообщение
Fijate asн:
pawn Код:
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:
pawn Код:
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.
Reply
#7

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.
Reply
#8

Quote:
Originally Posted by [J]ulian
Посмотреть сообщение
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.
Reply
#9

Quote:
Originally Posted by oOFotherOo
Посмотреть сообщение
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.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)