|
|
|
|
Attention |
Topic was automatically imported from the old Question2Answer platform. |
|
Asked By |
GoodCrafting |
this is how looks my Global script:
extends Node
# Game Data
var score = 0
var hp = 100
var bullets = 10
const magazin = 20
var max_trees = 300
var max_zombies = 350
var max_ammo = 75
var max_heal = 25
var kill = 0
var player_position
# Save system
var gamedata = {
"player" : {
"score" : score,
"hp" : hp,
"bullets" : bullets,
"zombies" : max_zombies,
"ammount" : max_ammo,
"apteca" : max_heal,
"position" : player_position
}
}
var file = File.new()
func save():
file.open('user://z-shot.save', File.WRITE)
file.store_line(to_json(gamedata))
file.close()
print(gamedata)
func load():
file.open('user://z-shot.save', File.READ)
var json = parse_json(file.get_as_text())
score = int(json.player.score)
hp = int(json.player.hp)
bullets = int(json.player.bullets)
file.close()
print(json)
And, even after LONG playing it prints me this:
** Debug Process Started **
Godot Engine v3.1.2.stable.official - https://godotengine.org
OpenGL ES 3.0 Renderer: Gallium 0.4 on llvmpipe (LLVM 3.8, 128 bits)
{player:{ammount:75, apteca:25, bullets:10, hp:100, position:Null, score:0, zombies:350}}
** Debug Process Stopped **
So, saving gamedata WORKS, but not correctly… Why does it happen???
|
|
|
|
Reply From: |
Ryukuzo |
Hello,
As I’m new to godot, I could probably be wrong but here’s my answer.
The possible mistake is here : var json = parse_json(file.get_as_text())
I think you should define a new dictionnary, for example :
var gamedata = {}
Then, put the result of the json file into this dictionnary :
gamedata = json.result
Now you can close the file as you don’t need it anymore. You can immediatly reach your data by referring to your dictionnary. For example :
var score = gamedata.player.score
Tell me if it solved the problem
Thanks for answer, but problem is not there. The problem is in function save, not load
.
As the debug is writing data of gamedata
and there is not changed data of player, it means that file.store_line(to_json(gamedata))
saves primordial data. I don’t think, that it can be because all changing happens in the other script. it’s like:
func shot():
if (!G.bullets <= 0):
$img/shot_light.show()
$img/shot_light/anim.play('hide')
G.bullets -= 1 #this changing data
it really changing data, but may it be because the save function is in Global script?
I don’t think so, because it worked if i write json as a “string” in G script.
Or may it be also because name of the file ends in .save, not .json?
GoodCrafting | 2020-05-05 19:21
When you open your file do you see the data stored in there ?
If yes, that means either the problem comes from the load function, or that your not calling your save function.
If not, either try using a .json file and not a .save file, or change the file name. Maybe your system doesn’t create files with a “-”
Ryukuzo | 2020-05-07 13:37
No, it doesn’t work anyway. I’m trying it already two months. I’m new in godot too, so I don’t know what exactly I have to do. Can I send somewhere my whole project with all script?
GoodCrafting | 2020-05-08 16:32