Burgershot
  • Home
  • Members
  • Team
  • Help
  • Search
  • Register
  • Login
  • Home
  • Members
  • Help
  • Search
Burgershot SA-MP Pawn Scripting [Pawn] Help with sqlite floats

 
  • 0 Vote(s) - 0 Average
Pawn Help with sqlite floats
Turk54721
Offline

Burgershot Member
Posts: 9
Threads: 2
Joined: Apr 2021
Reputation: 0
#1
2021-04-11, 12:12 PM (This post was last modified: 2021-04-11, 04:42 PM by Turk54721.)
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
DandoRYx
Offline

Burgershot Member
Posts: 20
Threads: 0
Joined: Feb 2021
Reputation: 2
Location: Slovakia
#2
2021-04-11, 01:52 PM (This post was last modified: 2021-04-11, 01:53 PM by DandoRYx.)
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));
Turk54721
Offline

Burgershot Member
Posts: 9
Threads: 2
Joined: Apr 2021
Reputation: 0
#3
2021-04-11, 03:12 PM
(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.
DandoRYx
Offline

Burgershot Member
Posts: 20
Threads: 0
Joined: Feb 2021
Reputation: 2
Location: Slovakia
#4
2021-04-11, 03:43 PM (This post was last modified: 2021-04-11, 03:44 PM by DandoRYx.)
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.
Turk54721
Offline

Burgershot Member
Posts: 9
Threads: 2
Joined: Apr 2021
Reputation: 0
#5
2021-04-11, 04:49 PM
(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([font=Tahoma, Verdana, Arial, sans-serif][font=Tahoma, Verdana, Arial, sans-serif]Pl[/font][font=Tahoma, Verdana, Arial, sans-serif]ayer[playerid][Health][/font]);[/font][font=Tahoma, Verdana, Arial, sans-serif][/c[/font][font=Tahoma, Verdana, Arial, sans-serif]ode][/font]
[font=Tahoma, Verdana, Arial, sans-serif]BTW Health armour and x y z was already float.[/font]
DandoRYx
Offline

Burgershot Member
Posts: 20
Threads: 0
Joined: Feb 2021
Reputation: 2
Location: Slovakia
#6
2021-04-11, 06:08 PM
Oh my bad :D, I read bad line... You have it right then, but you still need to change those %d to %f
Turk54721
Offline

Burgershot Member
Posts: 9
Threads: 2
Joined: Apr 2021
Reputation: 0
#7
2021-04-11, 06:43 PM
What ever I do I get no values in DB: https://gyazo.com/dd6fb875c00e5f0afd06579087f4427e
DandoRYx
Offline

Burgershot Member
Posts: 20
Threads: 0
Joined: Feb 2021
Reputation: 2
Location: Slovakia
#8
2021-04-11, 06:56 PM
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);
Turk54721
Offline

Burgershot Member
Posts: 9
Threads: 2
Joined: Apr 2021
Reputation: 0
#9
2021-04-11, 07:46 PM
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
Turk54721
Offline

Burgershot Member
Posts: 9
Threads: 2
Joined: Apr 2021
Reputation: 0
#10
2021-04-12, 06:48 AM
When I change from %d to %f, I get no values at all (In DB)
DandoRYx
Offline

Burgershot Member
Posts: 20
Threads: 0
Joined: Feb 2021
Reputation: 2
Location: Slovakia
#11
2021-04-12, 01:17 PM
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
Turk54721
Offline

Burgershot Member
Posts: 9
Threads: 2
Joined: Apr 2021
Reputation: 0
#12
2021-04-12, 04:41 PM
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
DandoRYx
Offline

Burgershot Member
Posts: 20
Threads: 0
Joined: Feb 2021
Reputation: 2
Location: Slovakia
#13
2021-04-14, 03:30 PM
Then try to change it to this:
Code:
db_get_field_assoc(Result, "X");
Player[playerid][X] = float(strval(Field));
Turk54721
Offline

Burgershot Member
Posts: 9
Threads: 2
Joined: Apr 2021
Reputation: 0
#14
2021-04-16, 07:59 AM
Thank you, had to change some other things too and it worked
« Next Oldest | Next Newest »



  • View a Printable Version
  • Subscribe to this thread
Forum Jump:

© Burgershot - Powered by our Community and MyBB Original Theme by Emerald

Linear Mode
Threaded Mode