diff --git a/website/assets/sprites/spritesmith/achievements/achievement-royally-loyal2x.png b/website/assets/sprites/spritesmith/achievements/achievement-royally-loyal2x.png new file mode 100644 index 0000000000..427b636027 Binary files /dev/null and b/website/assets/sprites/spritesmith/achievements/achievement-royally-loyal2x.png differ diff --git a/website/assets/sprites/spritesmith/gear/armor/shop/shop_armor_special_dandySuit.png b/website/assets/sprites/spritesmith/gear/armor/shop/shop_armor_special_dandySuit.png new file mode 100644 index 0000000000..154b4db018 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/armor/shop/shop_armor_special_dandySuit.png differ diff --git a/website/assets/sprites/spritesmith/gear/armor/shop/shop_armor_special_nomadsCuirass.png b/website/assets/sprites/spritesmith/gear/armor/shop/shop_armor_special_nomadsCuirass.png new file mode 100644 index 0000000000..a923c5e200 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/armor/shop/shop_armor_special_nomadsCuirass.png differ diff --git a/website/assets/sprites/spritesmith/gear/armor/shop/shop_armor_special_samuraiArmor.png b/website/assets/sprites/spritesmith/gear/armor/shop/shop_armor_special_samuraiArmor.png new file mode 100644 index 0000000000..6318ca6cce Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/armor/shop/shop_armor_special_samuraiArmor.png differ diff --git a/website/assets/sprites/spritesmith/gear/armor/shop/shop_armor_special_sneakthiefRobes.png b/website/assets/sprites/spritesmith/gear/armor/shop/shop_armor_special_sneakthiefRobes.png new file mode 100644 index 0000000000..42195f71fe Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/armor/shop/shop_armor_special_sneakthiefRobes.png differ diff --git a/website/assets/sprites/spritesmith/gear/armor/shop/shop_armor_special_snowSovereignRobes.png b/website/assets/sprites/spritesmith/gear/armor/shop/shop_armor_special_snowSovereignRobes.png new file mode 100644 index 0000000000..48dd4fb6d8 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/armor/shop/shop_armor_special_snowSovereignRobes.png differ diff --git a/website/assets/sprites/spritesmith/gear/armor/slim_armor_special_dandySuit.png b/website/assets/sprites/spritesmith/gear/armor/slim_armor_special_dandySuit.png new file mode 100644 index 0000000000..fe69d66764 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/armor/slim_armor_special_dandySuit.png differ diff --git a/website/assets/sprites/spritesmith/gear/armor/slim_armor_special_nomadsCuirass.png b/website/assets/sprites/spritesmith/gear/armor/slim_armor_special_nomadsCuirass.png new file mode 100644 index 0000000000..0564f514d9 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/armor/slim_armor_special_nomadsCuirass.png differ diff --git a/website/assets/sprites/spritesmith/gear/armor/slim_armor_special_samuraiArmor.png b/website/assets/sprites/spritesmith/gear/armor/slim_armor_special_samuraiArmor.png new file mode 100644 index 0000000000..4d32ef09aa Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/armor/slim_armor_special_samuraiArmor.png differ diff --git a/website/assets/sprites/spritesmith/gear/armor/slim_armor_special_sneakthiefRobes.png b/website/assets/sprites/spritesmith/gear/armor/slim_armor_special_sneakthiefRobes.png new file mode 100644 index 0000000000..f642a1f717 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/armor/slim_armor_special_sneakthiefRobes.png differ diff --git a/website/assets/sprites/spritesmith/gear/armor/slim_armor_special_snowSovereignRobes.png b/website/assets/sprites/spritesmith/gear/armor/slim_armor_special_snowSovereignRobes.png new file mode 100644 index 0000000000..9470fd08d5 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/armor/slim_armor_special_snowSovereignRobes.png differ diff --git a/website/assets/sprites/spritesmith/gear/back/back_special_snowdriftVeil.png b/website/assets/sprites/spritesmith/gear/back/back_special_snowdriftVeil.png new file mode 100644 index 0000000000..322916628b Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/back/back_special_snowdriftVeil.png differ diff --git a/website/assets/sprites/spritesmith/gear/back/shop_back_special_snowdriftVeil.png b/website/assets/sprites/spritesmith/gear/back/shop_back_special_snowdriftVeil.png new file mode 100644 index 0000000000..9759533a47 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/back/shop_back_special_snowdriftVeil.png differ diff --git a/website/assets/sprites/spritesmith/gear/head/head_special_clandestineCowl.png b/website/assets/sprites/spritesmith/gear/head/head_special_clandestineCowl.png new file mode 100644 index 0000000000..8875192cfc Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/head/head_special_clandestineCowl.png differ diff --git a/website/assets/sprites/spritesmith/gear/head/head_special_dandyHat.png b/website/assets/sprites/spritesmith/gear/head/head_special_dandyHat.png new file mode 100644 index 0000000000..0a6bdeb938 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/head/head_special_dandyHat.png differ diff --git a/website/assets/sprites/spritesmith/gear/head/head_special_kabuto.png b/website/assets/sprites/spritesmith/gear/head/head_special_kabuto.png new file mode 100644 index 0000000000..1167e8c23b Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/head/head_special_kabuto.png differ diff --git a/website/assets/sprites/spritesmith/gear/head/head_special_snowSovereignCrown.png b/website/assets/sprites/spritesmith/gear/head/head_special_snowSovereignCrown.png new file mode 100644 index 0000000000..7a5fc95447 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/head/head_special_snowSovereignCrown.png differ diff --git a/website/assets/sprites/spritesmith/gear/head/head_special_spikedHelm.png b/website/assets/sprites/spritesmith/gear/head/head_special_spikedHelm.png new file mode 100644 index 0000000000..a1995e6cc8 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/head/head_special_spikedHelm.png differ diff --git a/website/assets/sprites/spritesmith/gear/head/shop/shop_head_special_clandestineCowl.png b/website/assets/sprites/spritesmith/gear/head/shop/shop_head_special_clandestineCowl.png new file mode 100644 index 0000000000..50c8980a3e Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/head/shop/shop_head_special_clandestineCowl.png differ diff --git a/website/assets/sprites/spritesmith/gear/head/shop/shop_head_special_dandyHat.png b/website/assets/sprites/spritesmith/gear/head/shop/shop_head_special_dandyHat.png new file mode 100644 index 0000000000..5c64dc1aa1 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/head/shop/shop_head_special_dandyHat.png differ diff --git a/website/assets/sprites/spritesmith/gear/head/shop/shop_head_special_kabuto.png b/website/assets/sprites/spritesmith/gear/head/shop/shop_head_special_kabuto.png new file mode 100644 index 0000000000..ca5f743955 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/head/shop/shop_head_special_kabuto.png differ diff --git a/website/assets/sprites/spritesmith/gear/head/shop/shop_head_special_snowSovereignCrown.png b/website/assets/sprites/spritesmith/gear/head/shop/shop_head_special_snowSovereignCrown.png new file mode 100644 index 0000000000..d4caa5c1a2 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/head/shop/shop_head_special_snowSovereignCrown.png differ diff --git a/website/assets/sprites/spritesmith/gear/head/shop/shop_head_special_spikedHelm.png b/website/assets/sprites/spritesmith/gear/head/shop/shop_head_special_spikedHelm.png new file mode 100644 index 0000000000..fa61a76179 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/head/shop/shop_head_special_spikedHelm.png differ diff --git a/website/assets/sprites/spritesmith/gear/shield/shield_special_lootBag.png b/website/assets/sprites/spritesmith/gear/shield/shield_special_lootBag.png new file mode 100644 index 0000000000..fecb5675bf Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/shield/shield_special_lootBag.png differ diff --git a/website/assets/sprites/spritesmith/gear/shield/shield_special_wakizashi.png b/website/assets/sprites/spritesmith/gear/shield/shield_special_wakizashi.png new file mode 100644 index 0000000000..c317f26f9d Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/shield/shield_special_wakizashi.png differ diff --git a/website/assets/sprites/spritesmith/gear/shield/shield_special_wintryMirror.png b/website/assets/sprites/spritesmith/gear/shield/shield_special_wintryMirror.png new file mode 100644 index 0000000000..f9193c2ed8 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/shield/shield_special_wintryMirror.png differ diff --git a/website/assets/sprites/spritesmith/gear/shield/shop/shop_shield_special_lootBag.png b/website/assets/sprites/spritesmith/gear/shield/shop/shop_shield_special_lootBag.png new file mode 100644 index 0000000000..b36598ef1a Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/shield/shop/shop_shield_special_lootBag.png differ diff --git a/website/assets/sprites/spritesmith/gear/shield/shop/shop_shield_special_wakizashi.png b/website/assets/sprites/spritesmith/gear/shield/shop/shop_shield_special_wakizashi.png new file mode 100644 index 0000000000..6cc05e98b2 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/shield/shop/shop_shield_special_wakizashi.png differ diff --git a/website/assets/sprites/spritesmith/gear/shield/shop/shop_shield_special_wintryMirror.png b/website/assets/sprites/spritesmith/gear/shield/shop/shop_shield_special_wintryMirror.png new file mode 100644 index 0000000000..867f19344d Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/shield/shop/shop_shield_special_wintryMirror.png differ diff --git a/website/assets/sprites/spritesmith/gear/weapon/shop/shop_weapon_special_fencingFoil.png b/website/assets/sprites/spritesmith/gear/weapon/shop/shop_weapon_special_fencingFoil.png new file mode 100644 index 0000000000..796a2214ec Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/weapon/shop/shop_weapon_special_fencingFoil.png differ diff --git a/website/assets/sprites/spritesmith/gear/weapon/shop/shop_weapon_special_nomadsScimitar.png b/website/assets/sprites/spritesmith/gear/weapon/shop/shop_weapon_special_nomadsScimitar.png new file mode 100644 index 0000000000..31ea4aa266 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/weapon/shop/shop_weapon_special_nomadsScimitar.png differ diff --git a/website/assets/sprites/spritesmith/gear/weapon/shop/shop_weapon_special_skeletonKey.png b/website/assets/sprites/spritesmith/gear/weapon/shop/shop_weapon_special_skeletonKey.png new file mode 100644 index 0000000000..82b2bfcb40 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/weapon/shop/shop_weapon_special_skeletonKey.png differ diff --git a/website/assets/sprites/spritesmith/gear/weapon/shop/shop_weapon_special_tachi.png b/website/assets/sprites/spritesmith/gear/weapon/shop/shop_weapon_special_tachi.png new file mode 100644 index 0000000000..ea36446025 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/weapon/shop/shop_weapon_special_tachi.png differ diff --git a/website/assets/sprites/spritesmith/gear/weapon/weapon_special_fencingFoil.png b/website/assets/sprites/spritesmith/gear/weapon/weapon_special_fencingFoil.png new file mode 100644 index 0000000000..d79a74f731 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/weapon/weapon_special_fencingFoil.png differ diff --git a/website/assets/sprites/spritesmith/gear/weapon/weapon_special_nomadsScimitar.png b/website/assets/sprites/spritesmith/gear/weapon/weapon_special_nomadsScimitar.png new file mode 100644 index 0000000000..30b7cb4235 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/weapon/weapon_special_nomadsScimitar.png differ diff --git a/website/assets/sprites/spritesmith/gear/weapon/weapon_special_skeletonKey.png b/website/assets/sprites/spritesmith/gear/weapon/weapon_special_skeletonKey.png new file mode 100644 index 0000000000..781d3768c2 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/weapon/weapon_special_skeletonKey.png differ diff --git a/website/assets/sprites/spritesmith/gear/weapon/weapon_special_tachi.png b/website/assets/sprites/spritesmith/gear/weapon/weapon_special_tachi.png new file mode 100644 index 0000000000..d2ef39886a Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/weapon/weapon_special_tachi.png differ diff --git a/website/assets/sprites/spritesmith_large/promo/promo_more_checkin_incentives.png b/website/assets/sprites/spritesmith_large/promo/promo_more_checkin_incentives.png new file mode 100644 index 0000000000..0a6225fc37 Binary files /dev/null and b/website/assets/sprites/spritesmith_large/promo/promo_more_checkin_incentives.png differ diff --git a/website/client-old/js/controllers/userCtrl.js b/website/client-old/js/controllers/userCtrl.js index a109db178b..243153d864 100644 --- a/website/client-old/js/controllers/userCtrl.js +++ b/website/client-old/js/controllers/userCtrl.js @@ -99,7 +99,7 @@ habitrpg.controller('UserCtrl', ['$rootScope', '$scope', '$location', 'User', '$ $scope.getProgressDisplay = function () { var currentLoginDay = Content.loginIncentives[$scope.profile.loginIncentives]; - if (!currentLoginDay) return env.t('moreIncentivesComingSoon'); + if (!currentLoginDay) return env.t('checkinReceivedAllRewardsMessage'); var nextRewardAt = currentLoginDay.nextRewardAt; if (!nextRewardAt) return env.t('moreIncentivesComingSoon'); // if we are on a reward day, let's show progress relative to this diff --git a/website/common/locales/en/loginIncentives.json b/website/common/locales/en/loginIncentives.json index 06b1774f6f..82059156ee 100644 --- a/website/common/locales/en/loginIncentives.json +++ b/website/common/locales/en/loginIncentives.json @@ -12,6 +12,13 @@ "totalCheckinsTitle": "Total Check-Ins", "checkinProgressTitle": "Progress until next", "incentiveBackgroundsUnlockedWithCheckins": "Locked Plain Backgrounds will unlock with Daily Check-Ins.", - "moreIncentivesComingSoon": "New check-in incentives will be added soon!", - "checkinReceivedAllRewardsMessage" : "You have received all the Check-In prizes currently available! More will be added in the future." + "checkinReceivedAllRewardsMessage": "You have received all the Check-In prizes available! Congratulations!", + "oneOfAllPetEggs": "one of each standard Pet Egg", + "twoOfAllPetEggs": "two of each standard Pet Egg", + "threeOfAllPetEggs": "three of each standard Pet Egg", + "oneOfAllHatchingPotions": "one of each standard Hatching Potion", + "threeOfEachFood": "three of each standard Pet Food", + "fourOfEachFood": "four of each standard Pet Food", + "twoSaddles": "two Saddles", + "threeSaddles": "three Saddles" } diff --git a/website/common/script/constants.js b/website/common/script/constants.js index 7381d2cf23..490bb8fb9c 100644 --- a/website/common/script/constants.js +++ b/website/common/script/constants.js @@ -2,7 +2,7 @@ export const MAX_HEALTH = 50; export const MAX_LEVEL = 100; export const MAX_STAT_POINTS = MAX_LEVEL; export const ATTRIBUTES = ['str', 'int', 'per', 'con']; -export const MAX_INCENTIVES = 100; +export const MAX_INCENTIVES = 500; export const TAVERN_ID = '00000000-0000-4000-A000-000000000000'; export const LARGE_GROUP_COUNT_MESSAGE_CUTOFF = 5000; diff --git a/website/common/script/content/achievements.js b/website/common/script/content/achievements.js index b110407270..3acb083174 100644 --- a/website/common/script/content/achievements.js +++ b/website/common/script/content/achievements.js @@ -97,6 +97,11 @@ let basicAchievs = { pluralTitleKey: 'perfectName', pluralTextKey: 'perfectText', }, + royallyLoyal: { + icon: 'achievement-royally-loyal', + titleKey: 'royallyLoyalName', + textKey: 'royallyLoyalText', + }, }; Object.assign(achievementsData, basicAchievs); diff --git a/website/common/script/content/gear/sets/special/index.js b/website/common/script/content/gear/sets/special/index.js index 8b1dbb2bd1..718e7ae4fc 100644 --- a/website/common/script/content/gear/sets/special/index.js +++ b/website/common/script/content/gear/sets/special/index.js @@ -63,6 +63,41 @@ let armor = { value: 0, canOwn: ownsItem('armor_special_pageArmor'), }, + sneakthiefRobes: { + text: t('armorSpecialSneakthiefRobesText'), + notes: t('armorSpecialSneakthiefRobesNotes', { int: 16 }), + int: 16, + value: 0, + canOwn: ownsItem('armor_special_sneakthiefRobes'), + }, + snowSovereignRobes: { + text: t('armorSpecialSnowSovereignRobesText'), + notes: t('armorSpecialSnowSovereignRobesNotes', { per: 17 }), + per: 17, + value: 0, + canOwn: ownsItem('armor_special_snowSovereignRobes'), + }, + dandySuit: { + text: t('armorSpecialDandySuitText'), + notes: t('armorSpecialDandySuitNotes', { per: 17 }), + per: 17, + value: 0, + canOwn: ownsItem('armor_special_dandySuit'), + }, + nomadsCuirass: { + text: t('armorSpecialNomadsCuirassText'), + notes: t('armorSpecialNomadsCuirassNotes', { con: 17 }), + con: 17, + value: 0, + canOwn: ownsItem('armor_special_nomadsCuirass'), + }, + samuraiArmor: { + text: t('armorSpecialSamuraiArmorText'), + notes: t('armorSpecialSamuraiArmorNotes', { per: 17 }), + per: 17, + value: 0, + canOwn: ownsItem('armor_special_samuraiArmor'), + }, yeti: { event: EVENTS.winter, specialClass: 'warrior', @@ -582,6 +617,11 @@ let back = { wondercon_red: wonderconGear.backSpecialWonderconRed, // eslint-disable-line camelcase wondercon_black: wonderconGear.backSpecialWonderconBlack, // eslint-disable-line camelcase takeThis: takeThisGear.backSpecialTakeThis, + snowdriftVeil: { + text: t('backSpecialSnowdriftVeilText'), + notes: t('backSpecialSnowdriftVeilNotes'), + value: 0, + }, }; let body = { @@ -756,6 +796,41 @@ let head = { value: 0, canOwn: ownsItem('head_special_pageHelm'), }, + clandestineCowl: { + text: t('headSpecialClandestineCowlText'), + notes: t('headSpecialClandestineCowlNotes', { per: 16 }), + per: 16, + value: 0, + canOwn: ownsItem('head_special_clandestineCowl'), + }, + snowSovereignCrown: { + text: t('headSpecialSnowSovereignCrownText'), + notes: t('headSpecialSnowSovereignCrownNotes', { con: 16 }), + con: 16, + value: 0, + canOwn: ownsItem('head_special_snowSovereignCrown'), + }, + spikedHelm: { + text: t('headSpecialSpikedHelmText'), + notes: t('headSpecialSpikedHelmNotes', { str: 16 }), + str: 16, + value: 0, + canOwn: ownsItem('head_special_spikedHelm'), + }, + dandyHat: { + text: t('headSpecialDandyHatText'), + notes: t('headSpecialDandyHatNotes', { con: 17 }), + con: 17, + value: 0, + canOwn: ownsItem('head_special_dandyHat'), + }, + kabuto: { + text: t('headSpecialKabutoText'), + notes: t('headSpecialKabutoNotes', { int: 17 }), + int: 17, + value: 0, + canOwn: ownsItem('head_special_kabuto'), + }, nye: { event: EVENTS.nye, text: t('headSpecialNyeText'), @@ -1544,6 +1619,27 @@ let shield = { value: 0, canOwn: ownsItem('shield_special_diamondStave'), }, + lootBag: { + text: t('shieldSpecialLootBagText'), + notes: t('shieldSpecialLootBagNotes', { str: 16 }), + str: 16, + value: 0, + canOwn: ownsItem('shield_special_lootBag'), + }, + wintryMirror: { + text: t('shieldSpecialWintryMirrorText'), + notes: t('shieldSpecialWintryMirrorNotes', { int: 16 }), + int: 16, + value: 0, + canOwn: ownsItem('shield_special_wintryMirror'), + }, + wakizashi: { + text: t('shieldSpecialWakizashiText'), + notes: t('shieldSpecialWakizashiNotes', { con: 17 }), + con: 17, + value: 0, + canOwn: ownsItem('shield_special_wakizashi'), + }, yeti: { event: EVENTS.winter, specialClass: 'warrior', @@ -1971,6 +2067,34 @@ let weapon = { value: 0, canOwn: ownsItem('weapon_special_pageBanner'), }, + skeletonKey: { + text: t('weaponSpecialSkeletonKeyText'), + notes: t('weaponSpecialSkeletonKeyNotes', { con: 16 }), + con: 16, + value: 0, + canOwn: ownsItem('weapon_special_skeletonKey'), + }, + nomadsScimitar: { + text: t('weaponSpecialNomadsScimitarText'), + notes: t('weaponSpecialNomadsScimitarNotes', { int: 16 }), + int: 16, + value: 0, + canOwn: ownsItem('weapon_special_nomadsScimitar'), + }, + fencingFoil: { + text: t('weaponSpecialFencingFoilText'), + notes: t('weaponSpecialFencingFoilNotes', { str: 16 }), + str: 16, + value: 0, + canOwn: ownsItem('weapon_special_fencingFoil'), + }, + tachi: { + text: t('weaponSpecialTachiText'), + notes: t('weaponSpecialTachiNotes', { str: 17 }), + str: 17, + value: 0, + canOwn: ownsItem('weapon_special_tachi'), + }, yeti: { event: EVENTS.winter, specialClass: 'warrior', diff --git a/website/common/script/content/loginIncentives.js b/website/common/script/content/loginIncentives.js index 39783702eb..a168830fe3 100644 --- a/website/common/script/content/loginIncentives.js +++ b/website/common/script/content/loginIncentives.js @@ -61,7 +61,7 @@ module.exports = function getLoginIncentives (api) { }, }, 10: { - rewardKey: ['Pet_HatchingPotion_Purple'], + rewardKey: ['Pet_HatchingPotion_RoyalPurple'], reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; @@ -96,7 +96,7 @@ module.exports = function getLoginIncentives (api) { }, }, 26: { - rewardKey: ['Pet_HatchingPotion_Purple'], + rewardKey: ['Pet_HatchingPotion_RoyalPurple'], reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; @@ -118,7 +118,7 @@ module.exports = function getLoginIncentives (api) { }, }, 35: { - rewardKey: ['Pet_HatchingPotion_Purple'], + rewardKey: ['Pet_HatchingPotion_RoyalPurple'], reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; @@ -134,7 +134,7 @@ module.exports = function getLoginIncentives (api) { }, }, 45: { - rewardKey: ['Pet_HatchingPotion_Purple'], + rewardKey: ['Pet_HatchingPotion_RoyalPurple'], reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; @@ -150,7 +150,7 @@ module.exports = function getLoginIncentives (api) { }, }, 55: { - rewardKey: ['Pet_HatchingPotion_Purple'], + rewardKey: ['Pet_HatchingPotion_RoyalPurple'], reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; @@ -165,7 +165,7 @@ module.exports = function getLoginIncentives (api) { }, }, 65: { - rewardKey: ['Pet_HatchingPotion_Purple'], + rewardKey: ['Pet_HatchingPotion_RoyalPurple'], reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; @@ -180,7 +180,7 @@ module.exports = function getLoginIncentives (api) { }, }, 75: { - rewardKey: ['Pet_HatchingPotion_Purple'], + rewardKey: ['Pet_HatchingPotion_RoyalPurple'], reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; @@ -195,7 +195,7 @@ module.exports = function getLoginIncentives (api) { }, }, 85: { - rewardKey: ['Pet_HatchingPotion_Purple'], + rewardKey: ['Pet_HatchingPotion_RoyalPurple'], reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; @@ -210,7 +210,7 @@ module.exports = function getLoginIncentives (api) { }, }, 95: { - rewardKey: ['Pet_HatchingPotion_Purple'], + rewardKey: ['Pet_HatchingPotion_RoyalPurple'], reward: [api.hatchingPotions.RoyalPurple], assignReward: function assignReward (user) { if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; @@ -225,6 +225,364 @@ module.exports = function getLoginIncentives (api) { user.items.food.Saddle += 1; }, }, + 105: { + rewardKey: ['Pet_HatchingPotion_RoyalPurple'], + reward: [api.hatchingPotions.RoyalPurple], + assignReward: function assignReward (user) { + if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; + user.items.hatchingPotions.RoyalPurple += 1; + }, + }, + 110: { + rewardKey: ['Pet_Egg_Cactus', 'Pet_Egg_Dragon', 'Pet_Egg_Wolf'], + reward: [api.eggs.BearCub, api.eggs.Cactus, api.eggs.Dragon, api.eggs.FlyingPig, api.eggs.Fox, api.eggs.LionCub, api.eggs.PandaCub, api.eggs.TigerCub, api.eggs.Wolf], + rewardName: 'oneOfAllPetEggs', + assignReward: function assignReward (user) { + if (!user.items.eggs.BearCub) user.items.eggs.BearCub = 0; + user.items.eggs.BearCub += 1; + if (!user.items.eggs.Cactus) user.items.eggs.Cactus = 0; + user.items.eggs.Cactus += 1; + if (!user.items.eggs.Dragon) user.items.eggs.Dragon = 0; + user.items.eggs.Dragon += 1; + if (!user.items.eggs.FlyingPig) user.items.eggs.FlyingPig = 0; + user.items.eggs.FlyingPig += 1; + if (!user.items.eggs.Fox) user.items.eggs.Fox = 0; + user.items.eggs.Fox += 1; + if (!user.items.eggs.LionCub) user.items.eggs.LionCub = 0; + user.items.eggs.LionCub += 1; + if (!user.items.eggs.PandaCub) user.items.eggs.PandaCub = 0; + user.items.eggs.PandaCub += 1; + if (!user.items.eggs.TigerCub) user.items.eggs.TigerCub = 0; + user.items.eggs.TigerCub += 1; + if (!user.items.eggs.Wolf) user.items.eggs.Wolf = 0; + user.items.eggs.Wolf += 1; + }, + }, + 115: { + rewardKey: ['Pet_HatchingPotion_RoyalPurple'], + reward: [api.hatchingPotions.RoyalPurple], + assignReward: function assignReward (user) { + if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; + user.items.hatchingPotions.RoyalPurple += 1; + }, + }, + 120: { + rewardKey: ['Pet_HatchingPotion_Base', 'Pet_HatchingPotion_Red', 'Pet_HatchingPotion_Golden'], + reward: [api.hatchingPotions.Base, api.hatchingPotions.CottonCandyBlue, api.hatchingPotions.CottonCandyPink, api.hatchingPotions.Desert, api.hatchingPotions.Golden, api.hatchingPotions.Red, api.hatchingPotions.Shade, api.hatchingPotions.Skeleton, api.hatchingPotions.White, api.hatchingPotions.Zombie], + rewardName: 'oneOfAllHatchingPotions', + assignReward: function assignReward (user) { + if (!user.items.hatchingPotions.Base) user.items.hatchingPotions.Base = 0; + user.items.hatchingPotions.Base += 1; + if (!user.items.hatchingPotions.CottonCandyBlue) user.items.hatchingPotions.CottonCandyBlue = 0; + user.items.hatchingPotions.CottonCandyBlue += 1; + if (!user.items.hatchingPotions.CottonCandyPink) user.items.hatchingPotions.CottonCandyPink = 0; + user.items.hatchingPotions.CottonCandyPink += 1; + if (!user.items.hatchingPotions.Desert) user.items.hatchingPotions.Desert = 0; + user.items.hatchingPotions.Desert += 1; + if (!user.items.hatchingPotions.Golden) user.items.hatchingPotions.Golden = 0; + user.items.hatchingPotions.Golden += 1; + if (!user.items.hatchingPotions.Red) user.items.hatchingPotions.Red = 0; + user.items.hatchingPotions.Red += 1; + if (!user.items.hatchingPotions.Shade) user.items.hatchingPotions.Shade = 0; + user.items.hatchingPotions.Shade += 1; + if (!user.items.hatchingPotions.Skeleton) user.items.hatchingPotions.Skeleton = 0; + user.items.hatchingPotions.Skeleton += 1; + if (!user.items.hatchingPotions.White) user.items.hatchingPotions.White = 0; + user.items.hatchingPotions.White += 1; + if (!user.items.hatchingPotions.Zombie) user.items.hatchingPotions.Zombie = 0; + user.items.hatchingPotions.Zombie += 1; + }, + }, + 125: { + rewardKey: ['Pet_HatchingPotion_RoyalPurple'], + reward: [api.hatchingPotions.RoyalPurple], + assignReward: function assignReward (user) { + if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; + user.items.hatchingPotions.RoyalPurple += 1; + }, + }, + 130: { + rewardKey: ['Pet_Food_Meat', 'Pet_Food_Potatoe', 'Pet_Food_Milk'], + reward: [api.food.Meat, api.food.CottonCandyBlue, api.food.CottonCandyPink, api.food.Potatoe, api.food.Honey, api.food.Strawberry, api.food.Chocolate, api.food.Fish, api.food.Milk, api.food.RottenMeat], + rewardName: 'threeOfEachFood', + assignReward: function assignReward (user) { + if (!user.items.food.Meat) user.items.food.Meat = 0; + user.items.food.Meat += 3; + if (!user.items.food.CottonCandyBlue) user.items.food.CottonCandyBlue = 0; + user.items.food.CottonCandyBlue += 3; + if (!user.items.food.CottonCandyPink) user.items.food.CottonCandyPink = 0; + user.items.food.CottonCandyPink += 3; + if (!user.items.food.Potatoe) user.items.food.Potatoe = 0; + user.items.food.Potatoe += 3; + if (!user.items.food.Honey) user.items.food.Honey = 0; + user.items.food.Honey += 3; + if (!user.items.food.Strawberry) user.items.food.Strawberry = 0; + user.items.food.Strawberry += 3; + if (!user.items.food.Chocolate) user.items.food.Chocolate = 0; + user.items.food.Chocolate += 3; + if (!user.items.food.Fish) user.items.food.Fish = 0; + user.items.food.Fish += 3; + if (!user.items.food.Milk) user.items.food.Milk = 0; + user.items.food.Milk += 3; + if (!user.items.food.RottenMeat) user.items.food.RottenMeat = 0; + user.items.food.RottenMeat += 3; + }, + }, + 135: { + rewardKey: ['Pet_HatchingPotion_RoyalPurple'], + reward: [api.hatchingPotions.RoyalPurple], + assignReward: function assignReward (user) { + if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; + user.items.hatchingPotions.RoyalPurple += 1; + }, + }, + 140: { + rewardKey: ['weapon_special_skeletonKey', '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 + }, + }, + 145: { + rewardKey: ['Pet_HatchingPotion_RoyalPurple'], + reward: [api.hatchingPotions.RoyalPurple], + assignReward: function assignReward (user) { + if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; + user.items.hatchingPotions.RoyalPurple += 1; + }, + }, + 150: { + rewardKey: ['head_special_clandestineCowl', 'broad_armor_special_sneakthiefRobes'], + reward: [api.gear.flat.head_special_clandestineCowl, 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 + }, + }, + 160: { + rewardKey: ['Pet_HatchingPotion_RoyalPurple'], + reward: [api.hatchingPotions.RoyalPurple], + assignReward: function assignReward (user) { + if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; + user.items.hatchingPotions.RoyalPurple += 1; + }, + }, + 170: { + rewardKey: ['head_special_snowSovereignCrown', 'broad_armor_special_snowSovereignRobes'], + reward: [api.gear.flat.head_special_snowSovereignCrown, api.gear.flat.armor_special_snowSovereignRobes], + assignReward: function assignReward (user) { + user.items.gear.owned.head_special_snowSovereignCrown = true; // eslint-disable-line camelcase + user.items.gear.owned.armor_special_snowSovereignRobes = true; // eslint-disable-line camelcase + }, + }, + 180: { + rewardKey: ['Pet_HatchingPotion_RoyalPurple'], + reward: [api.hatchingPotions.RoyalPurple], + assignReward: function assignReward (user) { + if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; + user.items.hatchingPotions.RoyalPurple += 1; + }, + }, + 190: { + rewardKey: ['shield_special_wintryMirror', 'back_special_snowdriftVeil'], + reward: [api.gear.flat.shield_special_wintryMirror, api.gear.flat.back_special_snowdriftVeil], + assignReward: function assignReward (user) { + user.items.gear.owned.head_special_wintryMirror = true; // eslint-disable-line camelcase + user.items.gear.owned.armor_special_snowdriftVeil = true; // eslint-disable-line camelcase + }, + }, + 200: { + rewardKey: ['Pet_HatchingPotion_RoyalPurple'], + reward: [api.hatchingPotions.RoyalPurple], + assignReward: function assignReward (user) { + if (!user.items.hatchingPotions.RoyalPurple) user.items.hatchingPotions.RoyalPurple = 0; + user.items.hatchingPotions.RoyalPurple += 1; + }, + }, + 220: { + rewardKey: ['Pet_Food_Saddle'], + reward: [api.food.Saddle], + assignReward: function assignReward (user) { + if (!user.items.food.Saddle) user.items.food.Saddle = 0; + user.items.food.Saddle += 1; + }, + }, + 240: { + rewardKey: ['weapon_special_nomadsScimitar', 'broad_armor_special_nomadsCuirass'], + reward: [api.gear.flat.weapon_special_nomadsScimitar, 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 + }, + }, + 260: { + rewardKey: ['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 + }, + }, + 280: { + rewardKey: ['Pet_Food_Meat', 'Pet_Food_Potatoe', 'Pet_Food_Milk'], + reward: [api.food.Meat, api.food.CottonCandyBlue, api.food.CottonCandyPink, api.food.Potatoe, api.food.Honey, api.food.Strawberry, api.food.Chocolate, api.food.Fish, api.food.Milk, api.food.RottenMeat], + rewardName: 'threeOfEachFood', + assignReward: function assignReward (user) { + if (!user.items.food.Meat) user.items.food.Meat = 0; + user.items.food.Meat += 3; + if (!user.items.food.CottonCandyBlue) user.items.food.CottonCandyBlue = 0; + user.items.food.CottonCandyBlue += 3; + if (!user.items.food.CottonCandyPink) user.items.food.CottonCandyPink = 0; + user.items.food.CottonCandyPink += 3; + if (!user.items.food.Potatoe) user.items.food.Potatoe = 0; + user.items.food.Potatoe += 3; + if (!user.items.food.Honey) user.items.food.Honey = 0; + user.items.food.Honey += 3; + if (!user.items.food.Strawberry) user.items.food.Strawberry = 0; + user.items.food.Strawberry += 3; + if (!user.items.food.Chocolate) user.items.food.Chocolate = 0; + user.items.food.Chocolate += 3; + if (!user.items.food.Fish) user.items.food.Fish = 0; + user.items.food.Fish += 3; + if (!user.items.food.Milk) user.items.food.Milk = 0; + user.items.food.Milk += 3; + if (!user.items.food.RottenMeat) user.items.food.RottenMeat = 0; + user.items.food.RottenMeat += 3; + }, + }, + 300: { + rewardKey: ['Pet_Egg_Cactus', 'Pet_Egg_Dragon', 'Pet_Egg_Wolf'], + reward: [api.eggs.BearCub, api.eggs.Cactus, api.eggs.Dragon, api.eggs.FlyingPig, api.eggs.Fox, api.eggs.LionCub, api.eggs.PandaCub, api.eggs.TigerCub, api.eggs.Wolf], + rewardName: 'twoOfAllPetEggs', + assignReward: function assignReward (user) { + if (!user.items.eggs.BearCub) user.items.eggs.BearCub = 0; + user.items.eggs.BearCub += 2; + if (!user.items.eggs.Cactus) user.items.eggs.Cactus = 0; + user.items.eggs.Cactus += 2; + if (!user.items.eggs.Dragon) user.items.eggs.Dragon = 0; + user.items.eggs.Dragon += 2; + if (!user.items.eggs.FlyingPig) user.items.eggs.FlyingPig = 0; + user.items.eggs.FlyingPig += 2; + if (!user.items.eggs.Fox) user.items.eggs.Fox = 0; + user.items.eggs.Fox += 2; + if (!user.items.eggs.LionCub) user.items.eggs.LionCub = 0; + user.items.eggs.LionCub += 2; + if (!user.items.eggs.PandaCub) user.items.eggs.PandaCub = 0; + user.items.eggs.PandaCub += 2; + if (!user.items.eggs.TigerCub) user.items.eggs.TigerCub = 0; + user.items.eggs.TigerCub += 2; + if (!user.items.eggs.Wolf) user.items.eggs.Wolf = 0; + user.items.eggs.Wolf += 2; + }, + }, + 320: { + rewardKey: ['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 + }, + }, + 340: { + rewardKey: ['weapon_special_fencingFoil', 'broad_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 + }, + }, + 360: { + rewardKey: ['Pet_Food_Saddle'], + reward: [api.food.Saddle], + rewardName: 'twoSaddles', + assignReward: function assignReward (user) { + if (!user.items.food.Saddle) user.items.food.Saddle = 0; + user.items.food.Saddle += 2; + }, + }, + 380: { + rewardKey: ['Pet_Egg_Cactus', 'Pet_Egg_Dragon', 'Pet_Egg_Wolf'], + reward: [api.eggs.BearCub, api.eggs.Cactus, api.eggs.Dragon, api.eggs.FlyingPig, api.eggs.Fox, api.eggs.LionCub, api.eggs.PandaCub, api.eggs.TigerCub, api.eggs.Wolf], + rewardName: 'threeOfAllPetEggs', + assignReward: function assignReward (user) { + if (!user.items.eggs.BearCub) user.items.eggs.BearCub = 0; + user.items.eggs.BearCub += 3; + if (!user.items.eggs.Cactus) user.items.eggs.Cactus = 0; + user.items.eggs.Cactus += 3; + if (!user.items.eggs.Dragon) user.items.eggs.Dragon = 0; + user.items.eggs.Dragon += 3; + if (!user.items.eggs.FlyingPig) user.items.eggs.FlyingPig = 0; + user.items.eggs.FlyingPig += 3; + if (!user.items.eggs.Fox) user.items.eggs.Fox = 0; + user.items.eggs.Fox += 3; + if (!user.items.eggs.LionCub) user.items.eggs.LionCub = 0; + user.items.eggs.LionCub += 3; + if (!user.items.eggs.PandaCub) user.items.eggs.PandaCub = 0; + user.items.eggs.PandaCub += 3; + if (!user.items.eggs.TigerCub) user.items.eggs.TigerCub = 0; + user.items.eggs.TigerCub += 3; + if (!user.items.eggs.Wolf) user.items.eggs.Wolf = 0; + user.items.eggs.Wolf += 3; + }, + }, + 400: { + rewardKey: ['Pet_Food_Meat', 'Pet_Food_Potatoe', 'Pet_Food_Milk'], + reward: [api.food.Meat, api.food.CottonCandyBlue, api.food.CottonCandyPink, api.food.Potatoe, api.food.Honey, api.food.Strawberry, api.food.Chocolate, api.food.Fish, api.food.Milk, api.food.RottenMeat], + rewardName: 'fourOfEachFood', + assignReward: function assignReward (user) { + if (!user.items.food.Meat) user.items.food.Meat = 0; + user.items.food.Meat += 4; + if (!user.items.food.CottonCandyBlue) user.items.food.CottonCandyBlue = 0; + user.items.food.CottonCandyBlue += 4; + if (!user.items.food.CottonCandyPink) user.items.food.CottonCandyPink = 0; + user.items.food.CottonCandyPink += 4; + if (!user.items.food.Potatoe) user.items.food.Potatoe = 0; + user.items.food.Potatoe += 4; + if (!user.items.food.Honey) user.items.food.Honey = 0; + user.items.food.Honey += 4; + if (!user.items.food.Strawberry) user.items.food.Strawberry = 0; + user.items.food.Strawberry += 4; + if (!user.items.food.Chocolate) user.items.food.Chocolate = 0; + user.items.food.Chocolate += 4; + if (!user.items.food.Fish) user.items.food.Fish = 0; + user.items.food.Fish += 4; + if (!user.items.food.Milk) user.items.food.Milk = 0; + user.items.food.Milk += 4; + if (!user.items.food.RottenMeat) user.items.food.RottenMeat = 0; + user.items.food.RottenMeat += 4; + }, + }, + 425: { + rewardKey: ['Pet_Food_Saddle'], + reward: [api.food.Saddle], + rewardName: 'threeSaddles', + assignReward: function assignReward (user) { + if (!user.items.food.Saddle) user.items.food.Saddle = 0; + user.items.food.Saddle += 3; + }, + }, + 450: { + rewardKey: ['weapon_special_tachi', 'broad_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 + }, + }, + 475: { + rewardKey: ['head_special_kabuto', '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 + }, + }, + 500: { + rewardKey: ['achievement-royally-loyal2x'], + reward: [api.achievements.royallyLoyal], + assignReward: function assignReward (user) { + user.achievements.royallyLoyal = true; // eslint-disable-line camelcase + }, + }, }; // When the final check-in prize is added here, change checkinReceivedAllRewardsMessage in website/common/locales/en/loginIncentives.json // to say "You have received the final Check-In prize!". Confirm the message with Lemoness first. diff --git a/website/server/models/user/schema.js b/website/server/models/user/schema.js index 364d4d1958..91dd506067 100644 --- a/website/server/models/user/schema.js +++ b/website/server/models/user/schema.js @@ -111,6 +111,7 @@ let schema = new Schema({ birthday: Number, partyUp: Boolean, partyOn: Boolean, + royallyLoyal: Boolean, }, backer: {