mirror of
https://github.com/sudoxnym/habitica.git
synced 2026-05-23 14:17:05 +00:00
Fix: reassign object for user.items.gear.owned to trigger change in vue view
This commit is contained in:
parent
00ea6a4c7f
commit
9cbdf0df42
10 changed files with 142 additions and 35 deletions
|
|
@ -60,7 +60,10 @@ async function buyArmoire (store, params) {
|
|||
|
||||
const isExperience = item.type === 'experience';
|
||||
if (item.type === 'gear') {
|
||||
store.state.user.data.items.gear.owned[item.dropKey] = true;
|
||||
store.state.user.data.items.gear.owned = {
|
||||
...store.state.user.data.items.gear.owned,
|
||||
[item.dropKey]: true,
|
||||
};
|
||||
}
|
||||
|
||||
if (item.type === 'food') {
|
||||
|
|
|
|||
|
|
@ -9,7 +9,10 @@ export default function getLoginIncentives (api) {
|
|||
rewardKey: ['armor_special_bardRobes'],
|
||||
reward: [api.gear.flat.armor_special_bardRobes],
|
||||
assignReward: function assignReward (user) {
|
||||
user.items.gear.owned.armor_special_bardRobes = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
armor_special_bardRobes: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
},
|
||||
},
|
||||
|
|
@ -30,7 +33,10 @@ export default function getLoginIncentives (api) {
|
|||
rewardKey: ['head_special_bardHat'],
|
||||
reward: [api.gear.flat.head_special_bardHat],
|
||||
assignReward: function assignReward (user) {
|
||||
user.items.gear.owned.head_special_bardHat = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
head_special_bardHat: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
},
|
||||
},
|
||||
|
|
@ -91,7 +97,10 @@ export default function getLoginIncentives (api) {
|
|||
rewardKey: ['weapon_special_bardInstrument'],
|
||||
reward: [api.gear.flat.weapon_special_bardInstrument],
|
||||
assignReward: function assignReward (user) {
|
||||
user.items.gear.owned.weapon_special_bardInstrument = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
weapon_special_bardInstrument: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
},
|
||||
},
|
||||
|
|
@ -177,7 +186,10 @@ export default function getLoginIncentives (api) {
|
|||
rewardKey: ['slim_armor_special_pageArmor'],
|
||||
reward: [api.gear.flat.armor_special_pageArmor],
|
||||
assignReward: function assignReward (user) {
|
||||
user.items.gear.owned.armor_special_pageArmor = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
armor_special_pageArmor: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
},
|
||||
},
|
||||
|
|
@ -194,7 +206,10 @@ export default function getLoginIncentives (api) {
|
|||
rewardKey: ['head_special_pageHelm'],
|
||||
reward: [api.gear.flat.head_special_pageHelm],
|
||||
assignReward: function assignReward (user) {
|
||||
user.items.gear.owned.head_special_pageHelm = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
head_special_pageHelm: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
},
|
||||
},
|
||||
|
|
@ -211,7 +226,10 @@ export default function getLoginIncentives (api) {
|
|||
rewardKey: ['weapon_special_pageBanner'],
|
||||
reward: [api.gear.flat.weapon_special_pageBanner],
|
||||
assignReward: function assignReward (user) {
|
||||
user.items.gear.owned.weapon_special_pageBanner = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
weapon_special_pageBanner: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
},
|
||||
},
|
||||
|
|
@ -228,7 +246,10 @@ export default function getLoginIncentives (api) {
|
|||
rewardKey: ['shield_special_diamondStave'],
|
||||
reward: [api.gear.flat.shield_special_diamondStave],
|
||||
assignReward: function assignReward (user) {
|
||||
user.items.gear.owned.shield_special_diamondStave = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
shield_special_diamondStave: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
},
|
||||
},
|
||||
|
|
@ -389,8 +410,14 @@ export default function getLoginIncentives (api) {
|
|||
rewardKey: ['shop_weapon_special_skeletonKey', 'shop_shield_special_lootBag'],
|
||||
reward: [api.gear.flat.weapon_special_skeletonKey, api.gear.flat.shield_special_lootBag],
|
||||
assignReward: function assignReward (user) {
|
||||
user.items.gear.owned.weapon_special_skeletonKey = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned.shield_special_lootBag = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
weapon_special_skeletonKey: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
shield_special_lootBag: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
},
|
||||
},
|
||||
|
|
@ -410,8 +437,14 @@ export default function getLoginIncentives (api) {
|
|||
api.gear.flat.armor_special_sneakthiefRobes,
|
||||
],
|
||||
assignReward: function assignReward (user) {
|
||||
user.items.gear.owned.head_special_clandestineCowl = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned.armor_special_sneakthiefRobes = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
head_special_clandestineCowl: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
armor_special_sneakthiefRobes: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
},
|
||||
},
|
||||
|
|
@ -431,8 +464,14 @@ export default function getLoginIncentives (api) {
|
|||
api.gear.flat.armor_special_snowSovereignRobes,
|
||||
],
|
||||
assignReward: function assignReward (user) {
|
||||
user.items.gear.owned.head_special_snowSovereignCrown = true; // eslint-disable-line camelcase, max-len
|
||||
user.items.gear.owned.armor_special_snowSovereignRobes = true; // eslint-disable-line camelcase, max-len
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
head_special_snowSovereignCrown: true,
|
||||
}; // eslint-disable-line camelcase, max-len
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
armor_special_snowSovereignRobes: true,
|
||||
}; // eslint-disable-line camelcase, max-len
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
},
|
||||
},
|
||||
|
|
@ -449,8 +488,14 @@ export default function getLoginIncentives (api) {
|
|||
rewardKey: ['shop_shield_special_wintryMirror', 'shop_back_special_snowdriftVeil'],
|
||||
reward: [api.gear.flat.shield_special_wintryMirror, api.gear.flat.back_special_snowdriftVeil],
|
||||
assignReward: function assignReward (user) {
|
||||
user.items.gear.owned.shield_special_wintryMirror = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned.back_special_snowdriftVeil = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
shield_special_wintryMirror: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
back_special_snowdriftVeil: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
},
|
||||
},
|
||||
|
|
@ -479,8 +524,14 @@ export default function getLoginIncentives (api) {
|
|||
api.gear.flat.armor_special_nomadsCuirass,
|
||||
],
|
||||
assignReward: function assignReward (user) {
|
||||
user.items.gear.owned.weapon_special_nomadsScimitar = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned.armor_special_nomadsCuirass = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
weapon_special_nomadsScimitar: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
armor_special_nomadsCuirass: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
},
|
||||
},
|
||||
|
|
@ -488,7 +539,10 @@ export default function getLoginIncentives (api) {
|
|||
rewardKey: ['shop_head_special_spikedHelm'],
|
||||
reward: [api.gear.flat.head_special_spikedHelm],
|
||||
assignReward: function assignReward (user) {
|
||||
user.items.gear.owned.head_special_spikedHelm = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
head_special_spikedHelm: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
},
|
||||
},
|
||||
|
|
@ -557,7 +611,10 @@ export default function getLoginIncentives (api) {
|
|||
rewardKey: ['shop_head_special_dandyHat'],
|
||||
reward: [api.gear.flat.head_special_dandyHat],
|
||||
assignReward: function assignReward (user) {
|
||||
user.items.gear.owned.head_special_dandyHat = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
head_special_dandyHat: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
},
|
||||
},
|
||||
|
|
@ -565,8 +622,14 @@ export default function getLoginIncentives (api) {
|
|||
rewardKey: ['shop_weapon_special_fencingFoil', 'shop_armor_special_dandySuit'],
|
||||
reward: [api.gear.flat.weapon_special_fencingFoil, api.gear.flat.armor_special_dandySuit],
|
||||
assignReward: function assignReward (user) {
|
||||
user.items.gear.owned.weapon_special_fencingFoil = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned.armor_special_dandySuit = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
weapon_special_fencingFoil: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
armor_special_dandySuit: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
},
|
||||
},
|
||||
|
|
@ -655,8 +718,14 @@ export default function getLoginIncentives (api) {
|
|||
rewardKey: ['shop_weapon_special_tachi', 'shop_armor_special_samuraiArmor'],
|
||||
reward: [api.gear.flat.weapon_special_tachi, api.gear.flat.armor_special_samuraiArmor],
|
||||
assignReward: function assignReward (user) {
|
||||
user.items.gear.owned.weapon_special_tachi = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned.armor_special_samuraiArmor = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
weapon_special_tachi: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
armor_special_samuraiArmor: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
},
|
||||
},
|
||||
|
|
@ -664,8 +733,14 @@ export default function getLoginIncentives (api) {
|
|||
rewardKey: ['shop_head_special_kabuto', 'shop_shield_special_wakizashi'],
|
||||
reward: [api.gear.flat.head_special_kabuto, api.gear.flat.shield_special_wakizashi],
|
||||
assignReward: function assignReward (user) {
|
||||
user.items.gear.owned.head_special_kabuto = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned.shield_special_wakizashi = true; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
head_special_kabuto: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
shield_special_wakizashi: true,
|
||||
}; // eslint-disable-line camelcase
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -16,7 +16,10 @@ export default function resetGear (user) {
|
|||
// The content.gear.flat[k] check should prevent this causing an error
|
||||
each(gear.owned, (v, k) => {
|
||||
if (gear.owned[k] && content.gear.flat[k] && content.gear.flat[k].value) {
|
||||
gear.owned[k] = false;
|
||||
gear.owned = {
|
||||
...gear.owned,
|
||||
[k]: false,
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -90,7 +90,10 @@ export class BuyArmoireOperation extends AbstractGoldItemOperation { // eslint-d
|
|||
throw new NotAuthorized(this.i18n('equipmentAlreadyOwned'));
|
||||
}
|
||||
|
||||
user.items.gear.owned[drop.key] = true;
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
[drop.key]: true,
|
||||
};
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
|
||||
user.flags.armoireOpened = true;
|
||||
|
|
|
|||
|
|
@ -25,7 +25,10 @@ export default function buyMysterySet (user, req = {}, analytics) {
|
|||
}
|
||||
|
||||
each(mysterySet.items, item => {
|
||||
user.items.gear.owned[item.key] = true;
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
[item.key]: true,
|
||||
};
|
||||
if (analytics) {
|
||||
analytics.track('acquire item', {
|
||||
uuid: user._id,
|
||||
|
|
|
|||
|
|
@ -46,7 +46,10 @@ function purchaseItem (user, item, price, type, key) {
|
|||
user.balance -= price;
|
||||
|
||||
if (type === 'gear') {
|
||||
user.items.gear.owned[key] = true;
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
[key]: true,
|
||||
};
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
} else if (type === 'bundles') {
|
||||
const subType = item.type;
|
||||
|
|
|
|||
|
|
@ -53,8 +53,16 @@ export default function changeClass (user, req = {}, analytics) {
|
|||
|
||||
addPinnedGearByClass(user);
|
||||
|
||||
user.items.gear.owned[`weapon_${klass}_0`] = true;
|
||||
if (klass === 'rogue') user.items.gear.owned[`shield_${klass}_0`] = true;
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
[`weapon_${klass}_0`]: true,
|
||||
};
|
||||
if (klass === 'rogue') {
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
[`shield_${klass}_0`]: true,
|
||||
};
|
||||
}
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
|
||||
removePinnedItemsByOwnedGear(user);
|
||||
|
|
|
|||
|
|
@ -23,7 +23,10 @@ export default function openMysteryItem (user, req = {}, analytics) {
|
|||
|
||||
item = cloneDeep(content.gear.flat[item]);
|
||||
item.text = content.gear.flat[item.key].text(user.preferences.language);
|
||||
user.items.gear.owned[item.key] = true;
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
[item.key]: true,
|
||||
};
|
||||
|
||||
if (user.markModified) {
|
||||
user.markModified('purchased.plan.mysteryItems');
|
||||
|
|
|
|||
|
|
@ -95,7 +95,10 @@ export function removePinnedGearAddPossibleNewOnes (user, itemPath, newItemKey)
|
|||
// remove the old pinned gear items and add the new gear back
|
||||
removePinnedGearByClass(user);
|
||||
|
||||
user.items.gear.owned[newItemKey] = true;
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
[newItemKey]: true,
|
||||
};
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
|
||||
addPinnedGearByClass(user);
|
||||
|
|
|
|||
|
|
@ -89,7 +89,10 @@ export default function revive (user, req = {}, analytics) {
|
|||
if (item) {
|
||||
removePinnedGearByClass(user);
|
||||
|
||||
user.items.gear.owned[lostItem] = false;
|
||||
user.items.gear.owned = {
|
||||
...user.items.gear.owned,
|
||||
[lostItem]: false,
|
||||
};
|
||||
if (user.markModified) user.markModified('items.gear.owned');
|
||||
|
||||
addPinnedGearByClass(user);
|
||||
|
|
|
|||
Loading…
Reference in a new issue