Compare commits

...

24 Commits

Author SHA1 Message Date
Hafiz
867a5caa17 task stat selection UI updates 2025-12-02 09:05:46 -06:00
Hafiz
c1faac5385 show selected attribute on component itself 2025-12-01 13:52:44 -06:00
Hafiz
451da628a0 remove empty lines 2025-12-01 13:25:56 -06:00
Hafiz
13cea0fad4 Stat allocation by task dropdown 2025-12-01 13:17:46 -06:00
Hafiz
fa44b7e915 Remove bold text on hover 2025-11-26 13:10:40 -06:00
Hafiz
c3c04dc109 Update stat allocation dropdown styling 2025-11-26 11:31:19 -06:00
Hafiz
2553cc3435 Fix hover dropdown padding & stat allocation chip always showing 2025-11-21 13:17:04 -06:00
Hafiz
eebb78a766 stat allocation UI tweaks
refactor allocation mode selection with selectList component & other UI tweaks
2025-11-19 12:48:56 -06:00
Hafiz
4648b8e60a tweak 2025-11-18 12:18:24 -06:00
Hafiz
d37faef5f8 stat feedback UI updates 2025-11-12 11:38:42 -06:00
Hafiz
6a8a9f7842 lint fixes 2025-11-07 14:09:41 -06:00
Hafiz
726c2c18b8 Assigned Stat 2025-11-07 14:07:43 -06:00
Hafiz
3a4f6363fe Stat allocation updates 2025-11-07 14:01:11 -06:00
Hafiz
9093dc4e20 Auto allocate UI fixes
- remove info icon in each dropdown option, and replace info below each option
- disable auto allocate dropdown instead of hiding it
- removed radio buttons drop auto allocate options dropdown
- Points available & auto allocate text share same baseline now
2025-10-27 13:22:02 -05:00
Hafiz
21fd83695a lint fixes 2025-10-21 14:59:16 -05:00
Hafiz
2c44c37a96 Fix auto allocation toggle alignment 2025-10-21 14:47:17 -05:00
Hafiz
f0adb85660 Remove duplicate string value, convert line endings 2025-10-21 14:43:03 -05:00
Hafiz
c80b94178b Merge branch 'fiz/stats-allocation' into qa/monkey 2025-10-21 14:29:38 -05:00
Hafiz
c85018a721 Live stat allocation & auto allocation implemented
- Update stat allocation UI/UX cont.
- Update stats live (versus pressing save)
- Dynamically show the distribute dropdown based on if auto allocate switch is enabled
2025-10-21 14:29:15 -05:00
Hafiz
26a65d778b Update styling of stat boxes & add stat allocation info 2025-10-21 13:13:36 -05:00
Hafiz
5bc4d7e99d Update order of views on Stats tab 2025-10-21 12:51:42 -05:00
Hafiz
20437c4188 Fixed cut off modal issues
- Fixed limited time banner being cut off on smaller devices
- Fixed Pin on purchase quest modal being cut off
2025-10-16 13:04:02 -05:00
Hafiz
e8c04e1109 Merge branch 'develop' into qa/monkey 2025-10-16 12:49:04 -05:00
Kalista Payne
65d5908898 fix(responsive): adjustments for small screens by @Hafizzle 2025-09-17 16:20:02 -05:00
10 changed files with 1238 additions and 466 deletions

View File

@@ -218,13 +218,19 @@
flex-direction: row;
flex-wrap: wrap;
gap: 0.5rem;
// somehow the browser felt like setting this 398px instead
// now its fixed to 400 :)
width: 400px;
max-width: 400px;
width: 100%;
margin-bottom: 1.5rem;
@media (max-width: 589px) {
max-width: 100%;
justify-content: center;
}
@media (max-width: 353px) {
gap: 0.25rem;
}
.quest-col {
::v-deep {
.item-wrapper {
@@ -251,6 +257,28 @@
::v-deep & {
.modal-dialog {
width: 448px !important;
max-width: calc(100vw - 20px);
margin: 0.5rem auto;
display: flex;
@media (max-width: 468px) {
width: 100% !important;
}
@media (max-width: 353px) {
width: 100% !important;
margin: 0.25rem auto;
}
}
.modal-content {
display: flex;
flex-direction: column;
width: 100%;
@media (max-width: 300px) {
border-radius: 0;
}
}
}

View File

@@ -12,6 +12,12 @@
box-shadow: 0 1px 2px 0 rgba($black, 0.2);
z-index: 9;
height: 3rem;
flex-wrap: wrap;
@media (max-width: 683px) {
height: auto;
min-height: 3rem;
}
}
.nav-link {
@@ -23,6 +29,19 @@
padding: 0.75rem;
color: $gray-50;
white-space: nowrap;
@media (max-width: 683px) {
padding: 0.5rem;
font-size: 13px;
flex: 1 1 auto;
min-width: fit-content;
}
@media (max-width: 576px) {
padding: 0.5rem 0.4rem;
font-size: 12px;
}
&.active {
color: $purple-300;

View File

@@ -269,7 +269,13 @@
.modal-dialog {
width: 448px;
max-width: calc(100vw - 20px);
box-sizing: border-box;
display: flex;
@media (max-width: 468px) {
width: 100%;
}
}
.badge-dialog {
@@ -346,7 +352,23 @@
.content {
text-align: center;
width: 448px;
width: 100%;
max-width: 448px;
margin: 0 auto;
@media (max-width: 468px) {
max-width: 100%;
}
}
.modal-content {
display: flex;
flex-direction: column;
width: 100%;
@media (max-width: 300px) {
border-radius: 0;
}
}
.item-wrapper {
@@ -564,7 +586,7 @@
.limitedTime {
height: 32px;
width: 446px;
width: 100%;
font-size: 0.75rem;
margin: 24px 0 0 0;
background-color: $purple-300;

View File

@@ -111,6 +111,22 @@
.modal-dialog {
width: 448px;
max-width: calc(100vw - 20px);
display: flex;
@media (max-width: 468px) {
width: 100%;
}
}
.modal-content {
display: flex;
flex-direction: column;
width: 100%;
@media (max-width: 300px) {
border-radius: 0;
}
}
.modal-body {

View File

@@ -163,8 +163,33 @@
}
.modal-dialog {
margin-top: 8%;
width: 448px !important;
max-width: calc(100vw - 20px);
display: flex;
@media (max-width: 468px) {
width: 100% !important;
margin: 3rem auto 0.5rem;
}
@media (max-width: 353px) {
margin: 2.5rem auto 0.25rem;
}
}
.badge-dialog {
left: -8px;
top: -8px;
}
.modal-content {
display: flex;
flex-direction: column;
width: 100%;
@media (max-width: 300px) {
border-radius: 0;
}
}
.content {

View File

@@ -382,6 +382,45 @@
</div>
</div>
</div>
<div
v-if="showStatAssignment"
class="stat-assignment option mt-3"
>
<div class="form-group row">
<label
v-once
class="col-12 mb-1"
>{{ $t('assignedStat') }}</label>
<div class="col-12">
<div class="stat-dropdown-container">
<select-list
:items="statOptions"
:value="task.attribute"
key-prop="key"
active-key-prop="key"
@select="task.attribute = $event.key"
>
<template #item="{ item, button }">
<div class="stat-option-content">
<span
class="stat-option-title"
:class="item.key"
>
{{ $t(item.label) }}
</span>
<span
v-if="!button"
class="stat-option-description"
>
{{ $t(item.description) }}
</span>
</div>
</template>
</select-list>
</div>
</div>
</div>
</div>
<div
v-if="task.type === 'habit' && !groupId"
class="option mt-3"
@@ -911,6 +950,87 @@
.streak-addon path {
fill: $gray-200;
}
.stat-dropdown-container {
.select-list {
.selectListItem {
margin-bottom: 0;
&:last-child {
margin-bottom: 0;
}
}
.selectListItem .dropdown-item {
padding: 8px 16px !important;
height: auto !important;
white-space: normal;
word-wrap: break-word;
&:hover,
&:focus {
background-color: rgba($purple-600, 0.25) !important;
}
}
.dropdown-toggle {
display: flex;
align-items: center;
.stat-option-content {
display: flex;
align-items: center;
.stat-option-title {
font-weight: normal;
color: $gray-50;
margin-bottom: 0;
}
}
}
}
.stat-option-content {
display: block;
width: 100%;
.stat-option-title {
display: block;
font-family: Roboto;
font-weight: 700;
font-size: 14px;
line-height: 1.71;
text-transform: capitalize;
margin-bottom: 4px;
&.str {
color: $maroon-100;
}
&.int {
color: $blue-50;
}
&.con {
color: $yellow-5;
}
&.per {
color: $purple-300;
}
}
.stat-option-description {
display: block;
font-family: Roboto;
font-weight: 400;
font-size: 12px;
line-height: 16px;
color: $gray-100;
margin-bottom: 0;
}
}
}
</style>
<style lang="scss" scoped>
@@ -1023,7 +1143,6 @@
.input-group-outer.disabled .input-group-text {
color: $gray-200;
}
</style>
<script>
@@ -1038,6 +1157,7 @@ import SelectMulti from './modal-controls/selectMulti';
import selectDifficulty from '@/components/tasks/modal-controls/selectDifficulty';
import selectTranslatedArray from '@/components/tasks/modal-controls/selectTranslatedArray';
import lockableLabel from '@/components/tasks/modal-controls/lockableLabel';
import selectList from '@/components/ui/selectList';
import syncTask from '../../mixins/syncTask';
@@ -1061,6 +1181,7 @@ export default {
selectTranslatedArray,
toggleCheckbox,
lockableLabel,
selectList,
},
directives: {
markdown: markdownDirective,
@@ -1094,6 +1215,12 @@ export default {
con: 'constitution',
per: 'perception',
},
statOptions: [
{ key: 'str', label: 'strength', description: 'strTaskText' },
{ key: 'int', label: 'intelligence', description: 'intTaskText' },
{ key: 'con', label: 'constitution', description: 'conTaskText' },
{ key: 'per', label: 'perception', description: 'perTaskText' },
],
calendarHighlights: { dates: [new Date()] },
};
},
@@ -1187,6 +1314,12 @@ export default {
selectedTags () {
return this.getTagsFor(this.task);
},
showStatAssignment () {
return this.task.type !== 'reward'
&& !this.groupId
&& this.user.preferences.automaticAllocation === true
&& this.user.preferences.allocationMode === 'taskbased';
},
},
watch: {
task () {

View File

@@ -12,7 +12,7 @@
<template #button-content>
<slot
name="item"
:item="selected || placeholder"
:item="selectedItem || placeholder"
:button="true"
>
<!-- Fallback content -->
@@ -134,6 +134,14 @@ export default {
}),
};
},
computed: {
selectedItem () {
if (this.activeKeyProp) {
return this.items.find(item => item[this.activeKeyProp] === this.selected);
}
return this.items.find(item => item === this.selected);
},
},
methods: {
getKeyProp (item) {
return this.keyProp ? item[this.keyProp] : item.key || item.identifier;

File diff suppressed because it is too large Load Diff

View File

@@ -1,195 +1,204 @@
{
"communityGuidelinesWarning": "Please keep in mind that your Display Name, profile photo, and blurb must comply with the <a href='https://habitica.com/static/community-guidelines' target='_blank'>Community Guidelines</a> (e.g. no profanity, no adult topics, no insults, etc). If you have any questions about whether or not something is appropriate, feel free to email <%= hrefBlankCommunityManagerEmail %>!",
"profile": "Profile",
"avatar": "Customize Avatar",
"editAvatar": "Customize Avatar",
"noDescription": "This Habitican hasn't added a description.",
"noPhoto": "This Habitican hasn't added a photo.",
"other": "Other",
"fullName": "Full Name",
"displayName": "Display name",
"changeDisplayName": "Change Display Name",
"newDisplayName": "New Display Name",
"displayBlurbPlaceholder": "Please introduce yourself",
"photoUrl": "Photo Url",
"imageUrl": "Image Url",
"inventory": "Inventory",
"social": "Social",
"lvl": "Lvl",
"buffed": "Buffed",
"bodyBody": "Body",
"size": "Size",
"locked": "locked",
"shirts": "Shirts",
"shirt": "Shirt",
"specialShirts": "Special Shirts",
"skin": "Skin",
"skins": "Skins",
"color": "Color",
"hair": "Hair",
"bangs": "Bangs",
"glasses": "Glasses",
"hairSet1": "Hairstyle Set 1",
"hairSet2": "Hairstyle Set 2",
"hairSet3": "Hairstyle Set 3",
"beard": "Beard",
"mustache": "Mustache",
"titleFacialHair": "Facial Hair",
"titleHaircolor": "Hair Colors",
"titleHairbase": "Hair Styles",
"flower": "Flower",
"accent": "Accent",
"headband": "Headband",
"wheelchair": "Wheelchair",
"extra": "Extra",
"rainbowSkins": "Rainbow Skins",
"pastelSkins": "Pastel Skins",
"spookySkins": "Spooky Skins",
"supernaturalSkins": "Supernatural Skins",
"splashySkins": "Splashy Skins",
"winterySkins": "Wintery Skins",
"rainbowColors": "Rainbow Colors",
"shimmerColors": "Shimmer Colors",
"hauntedColors": "Haunted Colors",
"winteryColors": "Wintery Colors",
"equipment": "Equipment",
"equipmentBonus": "Equipment",
"classEquipBonus": "Class Bonus",
"battleGear": "Battle Gear",
"gear": "Gear",
"autoEquipBattleGear": "Auto-equip new gear",
"costume": "Costume",
"useCostume": "Use Costume",
"costumePopoverText": "Select \"Use Costume\" to equip items to your avatar without affecting the Stats from your Battle Gear! This means that you can dress up your avatar in whatever outfit you like while still having your best Battle Gear equipped.",
"autoEquipPopoverText": "Select this option to automatically equip gear as soon as you purchase it.",
"costumeDisabled": "You have disabled your costume.",
"gearAchievement": "You have earned the \"Ultimate Gear\" Achievement for upgrading to the maximum gear set for a class! You have attained the following complete sets:",
"gearAchievementNotification": "You have earned the \"Ultimate Gear\" Achievement for upgrading to the maximum gear set for a class!",
"moreGearAchievements": "To attain more Ultimate Gear badges, change classes on <a href='/user/settings/site' target='_blank'>the Settings &gt; Site page</a> and buy your new class's gear!",
"armoireUnlocked": "For more equipment, check out the <strong>Enchanted Armoire!</strong> Click on the Enchanted Armoire Reward for a random chance at special Equipment! It may also give you random XP or food items.",
"ultimGearName": "Ultimate Gear - <%= ultClass %>",
"ultimGearText": "Has upgraded to the maximum weapon and armor set for the <%= ultClass %> class.",
"level": "Level",
"levelUp": "Level Up!",
"gainedLevel": "You gained a level!",
"leveledUp": "By accomplishing your real-life goals, you've grown to <strong>Level <%= level %>!</strong>",
"huzzah": "Huzzah!",
"mana": "Mana",
"hp": "HP",
"mp": "MP",
"xp": "XP",
"health": "Health",
"allocateStr": "Points allocated to Strength:",
"allocateStrPop": "Add a Point to Strength",
"allocateCon": "Points allocated to Constitution:",
"allocateConPop": "Add a Point to Constitution",
"allocatePer": "Points allocated to Perception:",
"allocatePerPop": "Add a Point to Perception",
"allocateInt": "Points allocated to Intelligence:",
"allocateIntPop": "Add a Point to Intelligence",
"noMoreAllocate": "Now that you've hit level 100, you won't gain any more Stat Points. You can continue leveling up, or start a new adventure at level 1 by using the <a href='/shops/market'>Orb of Rebirth</a>!",
"stats": "Stats",
"strength": "Strength",
"strText": "Strength increases the chance of random \"critical hits\" and the Gold, Experience, and drop chance boost from them. It also helps deal damage to boss monsters.",
"constitution": "Constitution",
"conText": "Constitution reduces the damage you take from negative Habits and missed Dailies.",
"perception": "Perception",
"perText": "Perception increases how much Gold you earn, and once you've unlocked the Market, increases the chance of finding items when scoring tasks.",
"intelligence": "Intelligence",
"intText": "Intelligence increases how much Experience you earn, and once you've unlocked Classes, determines your maximum Mana available for class abilities.",
"levelBonus": "Level Bonus",
"allocatedPoints": "Allocated Points",
"allocated": "Allocated",
"buffs": "Buffs",
"characterBuild": "Character Build",
"class": "Class",
"experience": "Experience",
"warrior": "Warrior",
"healer": "Healer",
"rogue": "Rogue",
"mage": "Mage",
"wizard": "Mage",
"mystery": "Mystery",
"changeClass": "Change Class, Refund Stat Points",
"lvl10ChangeClass": "To change class you must be at least level 10.",
"changeClassConfirmCost": "Are you sure you want to change your class for 3 Gems?",
"invalidClass": "Invalid class. Please specify 'warrior', 'rogue', 'wizard', or 'healer'.",
"levelPopover": "Each level earns you one Point to assign to a Stat of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options.",
"unallocated": "Unallocated Stat Points",
"autoAllocation": "Automatic Allocation",
"autoAllocationPop": "Places Points into Stats according to your preferences, when you level up.",
"evenAllocation": "Distribute Stat Points evenly",
"evenAllocationPop": "Assigns the same number of Points to each Stat.",
"classAllocation": "Distribute Points based on Class",
"classAllocationPop": "Assigns more Points to the Stats important to your Class.",
"taskAllocation": "Distribute Points based on task activity",
"taskAllocationPop": "Assigns Points based on the Strength, Intelligence, Constitution, and Perception categories associated with the tasks you complete.",
"distributePoints": "Distribute Unallocated Points",
"distributePointsPop": "Assigns all unallocated Stat Points according to the selected allocation scheme.",
"warriorText": "Warriors score more and better \"critical hits\", which randomly give bonus Gold, Experience, and drop chance for scoring a task. They also deal heavy damage to boss monsters. Play a Warrior if you find motivation from unpredictable jackpot-style rewards, or want to dish out the hurt in boss Quests!",
"wizardText": "Mages learn swiftly, gaining Experience and Levels faster than other classes. They also get a great deal of Mana for using special abilities. Play a Mage if you enjoy the tactical game aspects of Habitica, or if you are strongly motivated by leveling up and unlocking advanced features!",
"mageText": "Mages learn swiftly, gaining Experience and Levels faster than other classes. They also get a great deal of Mana for using special abilities. Play a Mage if you enjoy the tactical game aspects of Habitica, or if you are strongly motivated by leveling up and unlocking advanced features!",
"rogueText": "Rogues love to accumulate wealth, gaining more Gold than anyone else, and are adept at finding random items. Their iconic Stealth ability lets them duck the consequences of missed Dailies. Play a Rogue if you find strong motivation from Rewards and Achievements, striving for loot and badges!",
"healerText": "Healers stand impervious against harm, and extend that protection to others. Missed Dailies and bad Habits don't faze them much, and they have ways to recover Health from failure. Play a Healer if you enjoy assisting others in your Party, or if the idea of cheating Death through hard work inspires you!",
"optOutOfClasses": "Opt Out",
"chooseClass": "Choose your Class",
"chooseClassLearnMarkdown": "[Learn more about Habitica's class system](/static/faq#what-classes)",
"optOutOfClassesText": "Not ready to choose? There's no rush! If you opt out, you can read about each Class in <a href='/static/faq#what-classes' target='_blank'>our FAQ</a> and visit Settings to enable the Class System when you're ready.",
"selectClass": "Select <%= heroClass %>",
"select": "Select",
"stealth": "Stealth",
"stealthNewDay": "When a new day begins, you will avoid damage from this many missed Dailies.",
"streaksFrozen": "Streaks Frozen",
"streaksFrozenText": "Streaks on missed Dailies will not reset at the end of the day.",
"purchaseFor": "Purchase for <%= cost %> Gems?",
"purchaseForGold": "Purchase for <%= cost %> Gold?",
"purchaseForHourglasses": "Purchase for <%= cost %> Hourglasses?",
"purchasePetItemConfirm": "This purchase would exceed the number of items you need to hatch all possible <%= itemText %> pets. Are you sure?",
"notEnoughMana": "Not enough mana.",
"notEnoughGold": "Not enough gold.",
"invalidTarget": "You can't cast a skill on that.",
"youCast": "You cast <%= spell %>.",
"youCastTarget": "You cast <%= spell %> on <%= target %>.",
"youCastParty": "You cast <%= spell %> for the party.",
"chatCastSpellParty": "<%= username %> casts <%= spell %> for the party.",
"chatCastSpellUser": "<%= username %> casts <%= spell %> on <%= target %>.",
"chatCastSpellPartyTimes": "<%= username %> casts <%= spell %> for the party <%= times %> times.",
"chatCastSpellUserTimes": "<%= username %> casts <%= spell %> on <%= target %> <%= times %> times.",
"critBonus": "Critical Hit! Bonus: ",
"gainedGold": "You gained some Gold",
"gainedMana": "You gained some Mana",
"gainedHealth": "You gained some Health",
"gainedExperience": "You gained some Experience",
"lostGold": "You spent some Gold",
"lostMana": "You used some Mana",
"lostHealth": "You lost some Health",
"lostExperience": "You lost some Experience",
"equip": "Equip",
"unequip": "Unequip",
"animalSkins": "Animal Skins",
"str": "STR",
"con": "CON",
"per": "PER",
"int": "INT",
"notEnoughAttrPoints": "You don't have enough Stat Points.",
"classNotSelected": "You must select Class before you can assign Stat Points.",
"style": "Style",
"facialhair": "Facial",
"photo": "Photo",
"info": "Info",
"joined": "Joined",
"totalLogins": "Total Log Ins",
"latestCheckin": "Latest Log In",
"nextReward": "Next Log In Reward",
"editProfile": "Edit Profile",
"challengesWon": "Challenges Won",
"questsCompleted": "Quests Completed",
"headAccess": "Head Access.",
"backAccess": "Back Access.",
"bodyAccess": "Body Access.",
"mainHand": "Main-Hand",
"offHand": "Off-Hand",
"statPoints": "Stat Points",
"pts": "pts",
"customizations": "Customizations"
}
{
"communityGuidelinesWarning": "Please keep in mind that your Display Name, profile photo, and blurb must comply with the <a href='https://habitica.com/static/community-guidelines' target='_blank'>Community Guidelines</a> (e.g. no profanity, no adult topics, no insults, etc). If you have any questions about whether or not something is appropriate, feel free to email <%= hrefBlankCommunityManagerEmail %>!",
"profile": "Profile",
"avatar": "Customize Avatar",
"editAvatar": "Customize Avatar",
"noDescription": "This Habitican hasn't added a description.",
"noPhoto": "This Habitican hasn't added a photo.",
"other": "Other",
"fullName": "Full Name",
"displayName": "Display name",
"changeDisplayName": "Change Display Name",
"newDisplayName": "New Display Name",
"displayBlurbPlaceholder": "Please introduce yourself",
"photoUrl": "Photo Url",
"imageUrl": "Image Url",
"inventory": "Inventory",
"social": "Social",
"lvl": "Lvl",
"buffed": "Buffed",
"bodyBody": "Body",
"size": "Size",
"locked": "locked",
"shirts": "Shirts",
"shirt": "Shirt",
"specialShirts": "Special Shirts",
"skin": "Skin",
"skins": "Skins",
"color": "Color",
"hair": "Hair",
"bangs": "Bangs",
"glasses": "Glasses",
"hairSet1": "Hairstyle Set 1",
"hairSet2": "Hairstyle Set 2",
"hairSet3": "Hairstyle Set 3",
"beard": "Beard",
"mustache": "Mustache",
"titleFacialHair": "Facial Hair",
"titleHaircolor": "Hair Colors",
"titleHairbase": "Hair Styles",
"flower": "Flower",
"accent": "Accent",
"headband": "Headband",
"wheelchair": "Wheelchair",
"extra": "Extra",
"rainbowSkins": "Rainbow Skins",
"pastelSkins": "Pastel Skins",
"spookySkins": "Spooky Skins",
"supernaturalSkins": "Supernatural Skins",
"splashySkins": "Splashy Skins",
"winterySkins": "Wintery Skins",
"rainbowColors": "Rainbow Colors",
"shimmerColors": "Shimmer Colors",
"hauntedColors": "Haunted Colors",
"winteryColors": "Wintery Colors",
"equipment": "Equipment",
"equipmentBonus": "Equipment",
"classEquipBonus": "Class Bonus",
"battleGear": "Battle Gear",
"gear": "Gear",
"autoEquipBattleGear": "Auto-equip new gear",
"costume": "Costume",
"useCostume": "Use Costume",
"costumePopoverText": "Select \"Use Costume\" to equip items to your avatar without affecting the Stats from your Battle Gear! This means that you can dress up your avatar in whatever outfit you like while still having your best Battle Gear equipped.",
"autoEquipPopoverText": "Select this option to automatically equip gear as soon as you purchase it.",
"costumeDisabled": "You have disabled your costume.",
"gearAchievement": "You have earned the \"Ultimate Gear\" Achievement for upgrading to the maximum gear set for a class! You have attained the following complete sets:",
"gearAchievementNotification": "You have earned the \"Ultimate Gear\" Achievement for upgrading to the maximum gear set for a class!",
"moreGearAchievements": "To attain more Ultimate Gear badges, change classes on <a href='/user/settings/site' target='_blank'>the Settings &gt; Site page</a> and buy your new class's gear!",
"armoireUnlocked": "For more equipment, check out the <strong>Enchanted Armoire!</strong> Click on the Enchanted Armoire Reward for a random chance at special Equipment! It may also give you random XP or food items.",
"ultimGearName": "Ultimate Gear - <%= ultClass %>",
"ultimGearText": "Has upgraded to the maximum weapon and armor set for the <%= ultClass %> class.",
"level": "Level",
"levelUp": "Level Up!",
"gainedLevel": "You gained a level!",
"leveledUp": "By accomplishing your real-life goals, you've grown to <strong>Level <%= level %>!</strong>",
"huzzah": "Huzzah!",
"mana": "Mana",
"hp": "HP",
"mp": "MP",
"xp": "XP",
"health": "Health",
"allocateStr": "Points allocated to Strength:",
"allocateStrPop": "Add a Point to Strength",
"allocateCon": "Points allocated to Constitution:",
"allocateConPop": "Add a Point to Constitution",
"allocatePer": "Points allocated to Perception:",
"allocatePerPop": "Add a Point to Perception",
"allocateInt": "Points allocated to Intelligence:",
"allocateIntPop": "Add a Point to Intelligence",
"noMoreAllocate": "Now that you've hit level 100, you won't gain any more Stat Points. You can continue leveling up, or start a new adventure at level 1 by using the <a href='/shops/market'>Orb of Rebirth</a>.",
"stats": "Stats",
"strength": "Strength",
"strText": "Strength increases the chance of random \"critical hits\" and the Gold, Experience, and drop chance boost from them. It also helps deal damage to boss monsters.",
"strTaskText": "Increases critical hit chance and damage when scoring tasks. Also increases damage dealt to bosses.",
"constitution": "Constitution",
"conText": "Constitution reduces the damage you take from negative Habits and missed Dailies.",
"conTaskText": "Reduces damage taken from missed Dailies and negative Habits. Does not reduce damage from bosses.",
"perception": "Perception",
"perText": "Perception increases how much Gold you earn, and once you've unlocked the Market, increases the chance of finding items when scoring tasks.",
"perTaskText": "Increases item drop chance, daily item drop cap, task streak bonuses, and Gold earned when completing tasks.",
"intelligence": "Intelligence",
"intText": "Intelligence increases how much Experience you earn, and once you've unlocked Classes, determines your maximum Mana available for class abilities.",
"intTaskText": "Increases Exp earned from tasks. Also increases your mana cap and mana regeneration rate.",
"levelBonus": "Level Bonus",
"allocatedPoints": "Allocated Points",
"allocated": "Allocated",
"buffs": "Buffs",
"characterBuild": "Character Build",
"class": "Class",
"experience": "Experience",
"warrior": "Warrior",
"healer": "Healer",
"rogue": "Rogue",
"mage": "Mage",
"wizard": "Mage",
"mystery": "Mystery",
"changeClass": "Change Class, Refund Stat Points",
"lvl10ChangeClass": "To change class you must be at least level 10.",
"changeClassConfirmCost": "Are you sure you want to change your class for 3 Gems?",
"invalidClass": "Invalid class. Please specify 'warrior', 'rogue', 'wizard', or 'healer'.",
"levelPopover": "Each level earns you one Point to assign to a Stat of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options.",
"unallocated": "Unallocated Stat Points",
"autoAllocation": "Automatic Allocation",
"autoAllocate": "Auto Allocate",
"autoAllocationPop": "Places Points into Stats according to your preferences, when you level up.",
"evenAllocation": "Distribute Evenly",
"evenAllocationPop": "Assigns the same number of points to each attribute.",
"classAllocation": "Distribute based on Class",
"classAllocationPop": "Assigns more points to the attributes important to your Class.",
"taskAllocation": "Distribute Points based on task activity",
"taskAllocationPop": "Assigns Points based on the Strength, Intelligence, Constitution, and Perception categories associated with the tasks you complete.",
"distributePoints": "Distribute Unallocated Points",
"distributePointsPop": "Assigns all unallocated Stat Points according to the selected allocation scheme.",
"warriorText": "Warriors score more and better \"critical hits\", which randomly give bonus Gold, Experience, and drop chance for scoring a task. They also deal heavy damage to boss monsters. Play a Warrior if you find motivation from unpredictable jackpot-style rewards, or want to dish out the hurt in boss Quests!",
"wizardText": "Mages learn swiftly, gaining Experience and Levels faster than other classes. They also get a great deal of Mana for using special abilities. Play a Mage if you enjoy the tactical game aspects of Habitica, or if you are strongly motivated by leveling up and unlocking advanced features!",
"mageText": "Mages learn swiftly, gaining Experience and Levels faster than other classes. They also get a great deal of Mana for using special abilities. Play a Mage if you enjoy the tactical game aspects of Habitica, or if you are strongly motivated by leveling up and unlocking advanced features!",
"rogueText": "Rogues love to accumulate wealth, gaining more Gold than anyone else, and are adept at finding random items. Their iconic Stealth ability lets them duck the consequences of missed Dailies. Play a Rogue if you find strong motivation from Rewards and Achievements, striving for loot and badges!",
"healerText": "Healers stand impervious against harm, and extend that protection to others. Missed Dailies and bad Habits don't faze them much, and they have ways to recover Health from failure. Play a Healer if you enjoy assisting others in your Party, or if the idea of cheating Death through hard work inspires you!",
"optOutOfClasses": "Opt Out",
"chooseClass": "Choose your Class",
"chooseClassLearnMarkdown": "[Learn more about Habitica's class system](/static/faq#what-classes)",
"optOutOfClassesText": "Not ready to choose? There's no rush! If you opt out, you can read about each Class in <a href='/static/faq#what-classes' target='_blank'>our FAQ</a> and visit Settings to enable the Class System when you're ready.",
"selectClass": "Select <%= heroClass %>",
"select": "Select",
"stealth": "Stealth",
"stealthNewDay": "When a new day begins, you will avoid damage from this many missed Dailies.",
"streaksFrozen": "Streaks Frozen",
"streaksFrozenText": "Streaks on missed Dailies will not reset at the end of the day.",
"purchaseFor": "Purchase for <%= cost %> Gems?",
"purchaseForGold": "Purchase for <%= cost %> Gold?",
"purchaseForHourglasses": "Purchase for <%= cost %> Hourglasses?",
"purchasePetItemConfirm": "This purchase would exceed the number of items you need to hatch all possible <%= itemText %> pets. Are you sure?",
"notEnoughMana": "Not enough mana.",
"notEnoughGold": "Not enough gold.",
"invalidTarget": "You can't cast a skill on that.",
"youCast": "You cast <%= spell %>.",
"youCastTarget": "You cast <%= spell %> on <%= target %>.",
"youCastParty": "You cast <%= spell %> for the party.",
"chatCastSpellParty": "<%= username %> casts <%= spell %> for the party.",
"chatCastSpellUser": "<%= username %> casts <%= spell %> on <%= target %>.",
"chatCastSpellPartyTimes": "<%= username %> casts <%= spell %> for the party <%= times %> times.",
"chatCastSpellUserTimes": "<%= username %> casts <%= spell %> on <%= target %> <%= times %> times.",
"critBonus": "Critical Hit! Bonus: ",
"gainedGold": "You gained some Gold",
"gainedMana": "You gained some Mana",
"gainedHealth": "You gained some Health",
"gainedExperience": "You gained some Experience",
"lostGold": "You spent some Gold",
"lostMana": "You used some Mana",
"lostHealth": "You lost some Health",
"lostExperience": "You lost some Experience",
"equip": "Equip",
"unequip": "Unequip",
"animalSkins": "Animal Skins",
"str": "STR",
"con": "CON",
"per": "PER",
"int": "INT",
"notEnoughAttrPoints": "You don't have enough Stat Points.",
"classNotSelected": "You must select Class before you can assign Stat Points.",
"style": "Style",
"facialhair": "Facial",
"photo": "Photo",
"info": "Info",
"joined": "Joined",
"totalLogins": "Total Log Ins",
"latestCheckin": "Latest Log In",
"nextReward": "Next Log In Reward",
"editProfile": "Edit Profile",
"challengesWon": "Challenges Won",
"questsCompleted": "Quests Completed",
"headAccess": "Head Access.",
"backAccess": "Back Access.",
"bodyAccess": "Body Access.",
"mainHand": "Main-Hand",
"offHand": "Off-Hand",
"statPoints": "Stat Points",
"pointsAvailable": "Points Available",
"allocationMethod": "Allocation Method",
"statAllocationInfo": "Each level earns you one point to assign to a Stat of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options.",
"pts": "PTS",
"customizations": "Customizations",
"assignedStat": "Assigned Stat"
}

View File

@@ -104,7 +104,6 @@
"success": "Success!",
"classGear": "Class Gear",
"classGearText": "Congratulations on choosing a class! I've added your new basic weapon to your inventory. Take a look below to equip it!",
"autoAllocate": "Auto Allocate",
"spells": "Skills",
"skillsTitle": "<%= classStr %> Skills",
"toDo": "To Do",