Вы случайно создали помеченные операторы вместо создания объекта и добавления к нему свойств.
Если userData[message.author.id]
не существует, сначала необходимо создать его с начальными значениями:
if (!userData[message.author.id]) {
userData[message.author.id] = {
level: {
lvl: 0,
exp: 0,
lvlupreq: 100,
},
stats: {
maxhp: 200,
hp: 200,
atk: 5,
def: 5,
planet: 1,
},
}
}
Обновление статистики, возможно, должно быть сделано для всех пользователей, хотя, в зависимости от вашей дальнейшей логики c (не очень необходимо в вашем примере кода):
Object.assign(userData[message.author.id].stats, {
maxhp: 200 + userData[message.author.id].level.lvl * 5,
atk: 5 + userData[message.author.id].level.lvl,
def: 5 + userData[message.author.id].level.lvl,
});
Использование Object.assign
в этом случае эквивалентно написанию одного присваивания для свойства:
userData[message.author.id].stats.maxhp = 200 + userData[message.author.id].level.lvl * 5;
userData[message.author.id].stats.atk = 5 + userData[message.author.id].level.lvl;
userData[message.author.id].stats.def = 5 + userData[message.author.id].level.lvl;