Hi,
I'm getting the error mentioned in the title whenever I try adding a custom template to my game (and adding an object that uses that template). I'm not entirely sure how to fix it, so here's what I've tried so far:
The original code:
const CYBERDECK = function(procslots, memslots, driveslots, jackslots) {
const res = $.extend({}, TAKEABLE_DICTIONARY);
res.procslots = procslots;
res.memslots = memslots;
res.driveslots = driveslots;
res.jackslots = jackslots;
}
createItem("cyberdeck", TAKEABLE(), CYBERDECK(1,1,1,1), {
loc:"coffee_table",
examine: "Your cyberdeck. It has slots for one processor, one stick of RAM, an internal drive, and, of course, a neural jack.",
})
And the code after I tried to fix it myself:
const CYBERDECK = function(procslots, memslots, driveslots, jackslots) {
const res = $.extend({}, TAKEABLE_DICTIONARY);
res.procslots = procslots;
res.memslots = memslots;
res.driveslots = driveslots;
res.jackslots = jackslots;
res.onCreation = function(o) {
if (!o.isAtLoc(game.player.name)) {
list.push("Take")
}
else {
list.push("Drop")
}
}
}
createItem("cyberdeck", TAKEABLE(), CYBERDECK(1,1,1,1), {
loc:"coffee_table",
examine: "Your cyberdeck. It has slots for one processor, one stick of RAM, an internal drive, and, of course, a neural jack.",
})
Hello.
You're going to be mad . . .
You have to return res
at the end of your function. This works:
const CYBERDECK = function(procslots, memslots, driveslots, jackslots) {
const res = $.extend({}, TAKEABLE_DICTIONARY);
res.procslots = procslots;
res.memslots = memslots;
res.driveslots = driveslots;
res.jackslots = jackslots;
return res;
}
createItem("cyberdeck", TAKEABLE(), CYBERDECK(1,1,1,1), {
loc:"coffee_table",
examine: "Your cyberdeck. It has slots for one processor, one stick of RAM, an internal drive, and, of course, a neural jack.",
})
BUT, since you extended the TAKEABLE dictionary in the template, you can leave the TAKEABLE()
out of createItem
, like so:
createItem("cyberdeck", CYBERDECK(1,1,1,1), {
loc:"coffee_table",
examine: "Your cyberdeck. It has slots for one processor, one stick of RAM, an internal drive, and, of course, a neural jack.",
})
REFERENCE
https://github.com/ThePix/QuestJS/wiki/Custom-Templates
I would have suggested the same; it seemed odd to declare a local variable res
and then discard it. But haven't seen the docs on this and wasn't sure how Quest 6 handles it.
Now I look at it, that seems an overly verbose way to create a template. To me, this seems both simpler and more intuitive:
const CYBERDECK = (procslots, memslots, driveslots, jackslots) => $.extend({},
TAKEABLE_DICTIONARY, {
procslots: procslots,
memslots: memslots,
driveslots: driveslots,
jackslots: jackslots
}
)
or even
const CYBERDECK = (procslots, memslots, driveslots, jackslots) => $.extend({
procslots: procslots,
memslots: memslots,
driveslots: driveslots,
jackslots: jackslots
}, TAKEABLE_DICTIONARY)