Quest 6: Change listeners

K.V.
25 Jun 2021, 16:10

Hello.

I didn't know change listeners were added to QuestJS until I read about it in another thread today. (This is my fault for not keeping up with the docs.)

I have been using the vanilla JS method for change scripts, and it seems to work right -- even after loading a saved game.

Now, I'm wondering if it might break something in the game. . .


UPDATE

Yes. My code did break something.

Also, I prefer the new, built-in way.

Hurray for change scripts!


The Pixie
26 Jun 2021, 07:27

This is my fault for not keeping up with the docs.

They were not in the docs until yesterday, so not your fault

I have been using the vanilla JS method for change scripts

What is that?


K.V.
26 Jun 2021, 12:28

Just setters and getters.

function setupAtt(o, att, val) {
  o['_' + att] = val
  Object.defineProperty(o, att, {
    get: function () { return this['_' + att]; },
    set: function (newValue) {
      this[att + 'Bak'] = this['_' + att]
      if (this[att + 'OnChange']) {
        this[att + 'OnChange'].call(this, newValue)
      }
      this['_' + att] = newValue
    }
  });
}

Also note that I later found out this bit of code isn't the code that was causing issues.

I found this out after I changed everything over to the new change script format. I had starting adding a new item to the game a couple of weeks ago, but I was interrupted halfway through writing the item's createItem() function and forgot to go back and finish.