Save / Load library not working [Moved to the Quest Forum]

M4u

Hi guys, I tried to use the new library to save a game but it is not working:

https://github.com/ThePix/quest/wiki/Library:-Save-and-Load

It gets stuck in: "About to do clones"

Any advise or a different way to save when playing online?

Thank you,


Just double confirming, pixie's save-and-load might indeed be not working
as I had tried before in
https://textadventures.co.uk/forum/quest/topic/kx6xtevrhug7dvspfkdz9q/running-start-script-on-every-play-even-on-saves


I'm also interested to know as I heavily rely on object clones and will need to reload them in the same state as they were when they were saved.


I noticed you posted a Quest 5.8 guide to saving yet this is the QuestJS forum, this is the guide to saving on QuestJS https://github.com/ThePix/QuestJS/wiki/Save-Load


NOTE FROM MODERATOR: This thread was moved to the Quest Forum after this was posted.


M4u

Thank you PsychoVyse, where can i get QuestJS? is that Quest 6 as mentioned in the article? Is it the version online?


Hello.

where can i get QuestJS? is that Quest 6 as mentioned in the article? Is it the version online?

https://github.com/ThePix/QuestJS


If you are still checking this thread, the normal online saving feature has recently been fixed.


For anyone reading this who is having this issue, I believe this might be what happens when the game includes a | in the code somewhere.

https://github.com/ThePix/quest/wiki/Library:-Save-and-Load


Clones

It can handle clones, but you do need to set them up. When a save-game is loaded, all existing clones in the game world are destroyed, and then all the clones from the save-game are re-created. Note that they will be cloned from the saved prototypes, so if your prototype has changed, it will be a clone of the prototype as it was when the game was saved.

To ensure a clone gets its attributes set properly, you need to give the prototype a "saveloadatts" attribute - and Quest will refuse to clone anything without it. The attribute should be a string list of attributes to save. Unlike the "saveloadatts" attribute of the game object, Quest will attempt to guess the attribute type, and is restricted to int, string and boolean


Limitations

Your game name must not include a vertical bar, |.

This cannot cope with attributes that are scripts, dictionaries or lists, except for string lists and dictionaries of string lists (if the latter seems somewhat obscure, it is because it is required internally). You certainly can use these other attributes in your game, they just will not be saved, so you cannot have them change during game play.

It cannot cope with objects that are created during game time, as you will not know their names or types. It can handle cloned objects, so you can work around that limitation.

It assumes the player object is called "player", and does not allow for changing POV.

The firsttime/otherwise script command saves deep in the underlying code, inaccessible to Quest, and therefore cannot be saved. It is probably best avoided altogether. You can use the once text processor directive.


https://github.com/ThePix/quest/blob/1b45540319969405d58e22b219de4a1f8104cab6/SaveLoad.aslx#L428C1-L445C14

<function name="GetCloneData" type="string">
ol = FilterByNotAttribute(AllObjects(), "prototype", null)
sl = NewStringList()
msg("About to do clones")
foreach (o, ol) {
s = o.name + "/" + o.prototype.name
if (HasAttribute(o, "saveloadatts")) {
foreach (att, o.saveloadatts) {
s = s + "/" + GetAttribute(o, att)
}
list add (sl, s)
}
else {
error("Clone prototype, " + o.prototype.name + ", has no 'saveloadatts' attribute.")
}
}
return (Join(sl, "|"))
</function>

To test this theory, one could replace this line:

    return (Join(sl, "|"))

... with these 2 lines:

    msg("About to return GetCloneData...")
    return (Join(sl, "|"))

This topic is now closed. Topics are closed after 14 days of inactivity.

Support

Forums