• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Pawn] Help with sqlite floats
#1
Hello for some reason floats are being loaded normaly (Armour and health is 1 and cordinates are like 5169131981403219871320)

Code:
enum PlayerStats{
    Mode,// 0-not logged   1-logged
    Team,
    Skin,
    Money,
    Score,
    Float:Health,
    Float:Armour,
    Float:X,
    Float:Y,
    Float:Z};

new Player[MAX_PLAYERS][PlayerStats];

Code:
GetPlayerPos(playerid, Player[playerid][X], Player[playerid][Y], Player[playerid][Z]);
format(Query,sizeof(Query),"UPDATE `USERS` SET TEAM = '%d', SKIN = '%d', MONEY = '%d', SCORE = '%d', HEALTH = '%f', ARMOUR = '%f', X = '%f', Y = '%f', Z = '%f' WHERE `NAME` = '%s' COLLATE NOCASE",
Player[playerid][Team],
Player[playerid][Skin],
GetPlayerMoney(playerid),//
GetPlayerScore(playerid),//
GetPlayerHealth(playerid, Player[playerid][Health]),//
GetPlayerArmour(playerid, Player[playerid][Armour]),//
Player[playerid][X],//
Player[playerid][Y],//
Player[playerid][Z],//
DB_Escape(name));
db_query(Database, Query);

Code:
format(Query, sizeof(Query), "SELECT * FROM `USERS` WHERE `NAME` = '%s' COLLATE NOCASE AND `PASSWORD` = '%s'", DB_Escape(name), DB_Escape(inputtext));
Result = db_query(Database, Query);
if(db_num_rows(Result)){
new Field[ 20 ]; //Creating a field to retrieve the data
db_get_field_assoc(Result, "TEAM", Field, 30);
Player[playerid][Team] = strval(Field);
db_get_field_assoc(Result, "SKIN", Field, 30);
Player[playerid][Skin] = strval(Field);
db_get_field_assoc(Result, "MONEY", Field, 30);
Player[playerid][Money] = strval(Field);
db_get_field_assoc(Result, "SCORE", Field, 30);
Player[playerid][Score] = strval(Field);
db_get_field_assoc_float(Result, "HEALTH");
Player[playerid][Health] = floatstr(Field);
db_get_field_assoc_float(Result, "ARMOUR");
Player[playerid][Armour] = floatstr(Field);
db_get_field_assoc_float(Result, "X");
Player[playerid][X] = floatstr(Field);
db_get_field_assoc_float(Result, "Y");
Player[playerid][Y] = floatstr(Field);
db_get_field_assoc_float(Result, "Z");
Player[playerid][Z] = floatstr(Field);


Code:
format(Query, sizeof(Query), "INSERT INTO `USERS` (`NAME`, `PASSWORD`, `IP`, `TEAM`, `SKIN`, `MONEY`, `SCORE`, `HEALTH`, `ARMOUR`, `X`, `Y`, `Z`) VALUES('%s','%s','%s', '0', '0', '0', '0', '%f', '%f', '%f', '%f', '%f')", DB_Escape(name), DB_Escape(inputtext), DB_Escape(ip));

Let me know if you need more code to understand, thank you
  Reply
#2
How about changing %d to %f ?
Code:
HEALTH = '%d', ARMOUR = '%d', X = '%d', Y = '%d', Z = '%d'
?
HEALTH = '%f', ARMOUR = '%f', X = '%f', Y = '%f', Z = '%f'

and same in here:
Code:
format(Query, sizeof(Query), "INSERT INTO `USERS` (`NAME`, `PASSWORD`, `IP`, `TEAM`, `SKIN`, `MONEY`, `SCORE`, `HEALTH`, `ARMOUR`, `X`, `Y`, `Z`) VALUES('%s','%s','%s', '0', '0', '0', '0', '%d', '%d', '%d', '%d', '%d')", DB_Escape(name), DB_Escape(inputtext), DB_Escape(ip));
?
format(Query, sizeof(Query), "INSERT INTO `USERS` (`NAME`, `PASSWORD`, `IP`, `TEAM`, `SKIN`, `MONEY`, `SCORE`, `HEALTH`, `ARMOUR`, `X`, `Y`, `Z`) VALUES('%s','%s','%s', '0', '0', '0', '0', '%f', '%f', '%f', '%f', '%f')", DB_Escape(name), DB_Escape(inputtext), DB_Escape(ip));
  Reply
#3
(2021-04-11, 01:52 PM)DandoRYx Wrote: How about changing %d to %f ?

Code:
HEALTH = '%d', ARMOUR = '%d', X = '%d', Y = '%d', Z = '%d'

?

HEALTH = '%f', ARMOUR = '%f', X = '%f', Y = '%f', Z = '%f'



and same in here:

Code:
format(Query, sizeof(Query), "INSERT INTO `USERS` (`NAME`, `PASSWORD`, `IP`, `TEAM`, `SKIN`, `MONEY`, `SCORE`, `HEALTH`, `ARMOUR`, `X`, `Y`, `Z`) VALUES('%s','%s','%s', '0', '0', '0', '0', '%d', '%d', '%d', '%d', '%d')", DB_Escape(name), DB_Escape(inputtext), DB_Escape(ip));

?

format(Query, sizeof(Query), "INSERT INTO `USERS` (`NAME`, `PASSWORD`, `IP`, `TEAM`, `SKIN`, `MONEY`, `SCORE`, `HEALTH`, `ARMOUR`, `X`, `Y`, `Z`) VALUES('%s','%s','%s', '0', '0', '0', '0', '%f', '%f', '%f', '%f', '%f')", DB_Escape(name), DB_Escape(inputtext), DB_Escape(ip));



I think I tried that, will try again when I will get home, thanks for answer.
  Reply
#4
Now when I looked at it, from string to float you shouldn't be using strval, because that converts to integer. You should use floatstr(string) instead.
But then the variables Player[playerid][Health] etc.. should be float.
  Reply
#5
(2021-04-11, 03:43 PM)DandoRYx Wrote: Now when I looked at it, from string to float you shouldn't be using strval, because that converts to integer. You should use floatstr(string) instead.

But then the variables Player[playerid][Health] etc.. should be float.



How would line like this look??[code]Player[playerid][Health] = floatstr(string);[/code]

I'm new to scripting I've tryied smth like??[code]floatstr(Player[playerid][Health]);[/code]

BTW Health armour and x y z was already float.
  Reply
#6
Oh my bad :D, I read bad line... You have it right then, but you still need to change those %d to %f
  Reply
#7
What ever I do I get no values in DB: https://gyazo.com/dd6fb875c00e5f0afd06579087f4427e
  Reply
#8
oh, you have to put the variables itself into the query so you do:

Code:
GetPlayerPos(playerid, Player[playerid][X], Player[playerid][Y], Player[playerid][Z]);



// THIS

GetPlayerHealth(playerid, Player[playerid][Health]);

GetPlayerArmour(playerid, Player[playerid][Armour]);



format(Query,sizeof(Query),"UPDATE `USERS` SET TEAM = '%d', SKIN = '%d', MONEY = '%d', SCORE = '%d', HEALTH = '%f', ARMOUR = '%f', X = '%f', Y = '%f', Z = '%f' WHERE `NAME` = '%s' COLLATE NOCASE",

Player[playerid][Team],

Player[playerid][Skin],

GetPlayerMoney(playerid),//

GetPlayerScore(playerid),//

Player[playerid][Health],// AND THEN THIS

Player[playerid][Armour],// THIS TOO

Player[playerid][X],//

Player[playerid][Y],//

Player[playerid][Z],//

DB_Escape(name));

db_query(Database, Query);
  Reply
#9
I don't know man, I keep getting the same result as in that photo, this is how the code look like now: https://pastebin.com/iVr4BHaj
  Reply
#10
When I change from %d to %f, I get no values at all (In DB)
  Reply
#11
I don't see any problem in there, your last chance might be changing every %f back to %d, and convert every float (for example Player[playerid][Health]) to integer:

Code:
Player[playerid][Health]

?

floatround(Player[playerid][Health], floatround_round);



but I would keep the floatstr(Field) as it is.



https://open.mp/docs/scripting/functions/floatround
  Reply
#12
I changed it to %d and did floatround when saving (Everything works fine), but now when loading I get 0 values on health armour x y z
  Reply
#13
Then try to change it to this:

Code:
db_get_field_assoc(Result, "X");

Player[playerid][X] = float(strval(Field));
  Reply
#14
Thank you, had to change some other things too and it worked
  Reply


Forum Jump: