Merge branch 'master' into production
After Width: | Height: | Size: 1.2 KiB |
BIN
app/assets/images/common/button-background-success-active.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.3 KiB |
BIN
app/assets/images/common/button-background-success-inactive.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.3 KiB |
BIN
app/assets/images/common/button-background-success-pressed.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
app/assets/images/pages/play/level-banner-complete.png
Normal file
After Width: | Height: | Size: 5.1 KiB |
BIN
app/assets/images/pages/play/level-banner-started.png
Normal file
After Width: | Height: | Size: 5 KiB |
Before Width: | Height: | Size: 9.1 KiB |
BIN
app/assets/images/pages/play/level/modal/victory_hero.png
Normal file
After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 76 KiB |
BIN
app/assets/images/pages/play/level/modal/victory_modal_shelf.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 9 KiB After Width: | Height: | Size: 17 KiB |
BIN
app/assets/images/pages/play/level/modal/xp_gems_parchment.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
app/assets/images/pages/play/star.png
Normal file
After Width: | Height: | Size: 4.9 KiB |
|
@ -376,7 +376,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
|
|||
|
||||
skill_docs:
|
||||
# writable: "writable" # Hover over "attack" in Your Skills while playing a level to see most of this
|
||||
# read_only: "read-only"
|
||||
read_only: "schreibgeschützt"
|
||||
action_name: "Name"
|
||||
action_cooldown: "Benötigt"
|
||||
action_specific_cooldown: "Cooldown"
|
||||
|
@ -647,7 +647,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
|
|||
archmage_attribute_1_pref: "Kentnisse in "
|
||||
archmage_attribute_1_suf: ", oder ein intensiver Lernwille. Der größte Teil unseres Codes ist in dieser Sprache geschrieben. Wenn du bereits mit Ruby oder Python vertraut bist, wirst du dich gleich zu hause fühlen. Es ist wie JavaScript, aber mit einer angenehmeren Syntax."
|
||||
archmage_attribute_2: "Vorhandene Erfahrung im Programmieren, und wichtig, Eigeninitiative. Wir werden dir helfen dich zurecht zu finden, aber wir haben leider nicht die Zeit dich intensiv anzulernen."
|
||||
# how_to_join: "How To Join"
|
||||
how_to_join: "Wie du mitmachen kannst"
|
||||
join_desc_1: "Jeder kann mithelfen! Schau dir unseren "
|
||||
join_desc_2: "um anzufangen, und hake die Checkbox unten an um dich als mutiger Erzmagier einzutragen und über die neuesten Nachrichten per Email zu erhalten. Möchtest du dich darüber unterhalten was zu tun ist oder wie du dich besser beteiligen kannst? "
|
||||
join_desc_3: ", oder finde uns in unserem "
|
||||
|
@ -809,10 +809,10 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
|
|||
recently_played: "Kürzlich gespielt"
|
||||
no_recent_games: "Keine Spiele in den letzten zwei Wochen gespielt."
|
||||
payments: "Zahlungen"
|
||||
# service_apple: "Apple"
|
||||
# service_web: "Web"
|
||||
service_apple: "Apple"
|
||||
service_web: "Web"
|
||||
paid_on: "Gezahlt am"
|
||||
# service: "Service"
|
||||
service: "Service"
|
||||
price: "Preis"
|
||||
gems: "Edelsteine"
|
||||
status_subscribed: "Du hast momentan ein Abo für $9.99 USD pro Monat. Danke für deine unterstützung!"
|
||||
|
@ -932,17 +932,17 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
|
|||
art_title: "Grafiken/Musik - Creative Commons "
|
||||
art_description_prefix: "Gemeinsamer Inhalt ist verfügbar unter"
|
||||
cc_license_url: "Creative Commons Attribution 4.0 International License"
|
||||
# art_description_suffix: "Common content is anything made generally available by CodeCombat for the purpose of creating Levels. This includes:"
|
||||
art_description_suffix: "Gemeinsamer Inhalt ist alles, was durch CodeCombat für den Zweck der Erstellung von Levels allgemein verfügbar gemacht wird. Dies beinhaltet:"
|
||||
art_music: "Musik"
|
||||
art_sound: "Sound"
|
||||
art_artwork: "Grafiken"
|
||||
art_sprites: "Sprites"
|
||||
# art_other: "Any and all other non-code creative works that are made available when creating Levels."
|
||||
art_other: "Jegliche oder alle kreative nicht-Code Arbeit, die zur Verfügung gestellt wird, wenn Level erstellt werden."
|
||||
# art_access: "Currently there is no universal, easy system for fetching these assets. In general, fetch them from the URLs as used by the site, contact us for assistance, or help us in extending the site to make these assets more easily accessible."
|
||||
# art_paragraph_1: "For attribution, please name and link to codecombat.com near where the source is used or where appropriate for the medium. For example:"
|
||||
use_list_1: "Wenn in einem Film verwendet, nenne codecombat.com in den Credits/Abspann"
|
||||
# use_list_2: "If used on a website, include a link near the usage, for example underneath an image, or in a general attributions page where you might also mention other Creative Commons works and open source software being used on the site. Something that's already clearly referencing CodeCombat, such as a blog post mentioning CodeCombat, does not need some separate attribution."
|
||||
# art_paragraph_2: "If the content being used is created not by CodeCombat but instead by a user of codecombat.com, attribute them instead, and follow attribution directions provided in that resource's description if there are any."
|
||||
use_list_1: "Wenn in einem Film verwendet, nenne codecombat.com in den Credits/Abspann"
|
||||
use_list_2: "Wenn auf einer Webseite verwendet, füge einen Link nahe bei der Verwendung ein, z.B. unter einem Bild oder in der generellen Beitragsseite, wo auch andere Creative Commons Werke und Open Source Software genannt wird, die auf der Seite verwendet wird. Wenn deutlich auf CodeCombat Bezug genommen wird, wie z.B. in einem Blogeintrag, in dem CodeCombat erwähnt wird, dann muss CodeCombat nicht separat belegt werden."
|
||||
rights_title: "Rechte vorbehalten"
|
||||
rights_desc: "Alle Rechte vorbehalten für die Level selbst. Dies beinhaltet"
|
||||
rights_scripts: "Skripte"
|
||||
|
|
|
@ -222,6 +222,7 @@
|
|||
reload_title: "Reload All Code?"
|
||||
reload_really: "Are you sure you want to reload this level back to the beginning?"
|
||||
reload_confirm: "Reload All"
|
||||
victory: "Victory"
|
||||
victory_title_prefix: ""
|
||||
victory_title_suffix: " Complete"
|
||||
victory_sign_up: "Sign Up to Save Progress"
|
||||
|
@ -234,6 +235,8 @@
|
|||
victory_review: "Tell us more!" # Only in old-style levels.
|
||||
victory_hour_of_code_done: "Are You Done?"
|
||||
victory_hour_of_code_done_yes: "Yes, I'm finished with my Hour of Code™!"
|
||||
victory_experience_gained: "XP Gained"
|
||||
victory_gems_gained: "Gems Gained"
|
||||
guide_title: "Guide"
|
||||
tome_minion_spells: "Your Minions' Spells" # Only in old-style levels.
|
||||
tome_read_only_spells: "Read-Only Spells" # Only in old-style levels.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
module.exports = nativeDescription: "українська мова", englishDescription: "Ukrainian", translation:
|
||||
module.exports = nativeDescription: "Українська", englishDescription: "Ukrainian", translation:
|
||||
home:
|
||||
slogan: "Навчіться програмувати, граючи у гру"
|
||||
no_ie: "На жаль, CodeCombat не працює в IE8 та старіших версіях!" # Warning that only shows up in IE8 and older
|
||||
|
@ -31,7 +31,7 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
about: "Про нас"
|
||||
contact: "Контакти"
|
||||
twitter_follow: "Фоловити"
|
||||
teachers: "Учителі"
|
||||
teachers: "Учителям"
|
||||
|
||||
modal:
|
||||
close: "Закрити"
|
||||
|
@ -54,7 +54,7 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
players: "гравці" # Hover over a level on /play
|
||||
hours_played: "годин зіграно" # Hover over a level on /play
|
||||
items: "Предмети" # Tooltip on item shop button from /play
|
||||
unlock: "Розблокувати" # For purchasing items and heroes
|
||||
unlock: "Відкрити" # For purchasing items and heroes
|
||||
confirm: "Підтвердити"
|
||||
owned: "у власності" # For items you own
|
||||
locked: "Заблоковано"
|
||||
|
@ -97,7 +97,7 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
campaign_classic_algorithms_description: "... у якій ви вивчите найпопулярніші алгоритми комп’ютерних наук."
|
||||
|
||||
login:
|
||||
sign_up: "створити акаунт"
|
||||
sign_up: "створення акаунту"
|
||||
log_in: "Увійти"
|
||||
logging_in: "Вхід в акаунт"
|
||||
log_out: "Вийти"
|
||||
|
@ -171,7 +171,7 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
when: "Коли"
|
||||
opponent: "Противник"
|
||||
rank: "Звання"
|
||||
score: "Рахунок"
|
||||
score: "Результат"
|
||||
win: "Перемога"
|
||||
loss: "Поразка"
|
||||
tie: "Нічия"
|
||||
|
@ -260,7 +260,7 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
keyboard_shortcuts: "Клавіатурні скорочення"
|
||||
loading_ready: "Готово!"
|
||||
loading_start: "Розпочати рівень"
|
||||
problem_alert_title: "Виправте свій код"
|
||||
problem_alert_title: "Виправте код"
|
||||
time_current: "Зараз:"
|
||||
time_total: "Найбільше:"
|
||||
time_goto: "Перейти до:"
|
||||
|
@ -293,7 +293,7 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
tip_talk_is_cheap: "Розмови – ніщо. Покажи мені код. - Лінус Торвальдс"
|
||||
tip_first_language: "Найбільш катастрофічною річчю яку ви коли-небудь вчили є Ваша перша мова програмування. - Алан Кей"
|
||||
tip_hardware_problem: "П: Скільки програмістів треба аби замінити лампочку? В: Жодного, це апаратна проблема."
|
||||
# tip_hofstadters_law: "Hofstadter's Law: It always takes longer than you expect, even when you take into account Hofstadter's Law."
|
||||
tip_hofstadters_law: "Закон Гофштадтера: Це в будь-якому разі займе більше часу, навіть якщо ви берете до уваги закон Гофштадтера."
|
||||
tip_premature_optimization: "Передчасна оптимізація – корінь усього зла. - Дональд Кнут"
|
||||
tip_brute_force: "Якщо ви сумніваєтесь, використовуйте перебір - Кен Томсон"
|
||||
tip_extrapolation: "Існує 2 типи людей: які можуть екстраполюватись від неповних даних..."
|
||||
|
@ -319,11 +319,11 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
equipped_item: "Екіпіровано"
|
||||
available_item: "Доступно"
|
||||
restricted_title: "Обмежено"
|
||||
should_equip: "(екіпірування подвійним кліком)"
|
||||
should_equip: "(предмети одягаються подвійним кліком)"
|
||||
equipped: "(екіпіровано)"
|
||||
locked: "(заблоковано)"
|
||||
restricted: "(обмежено для цього рівні)"
|
||||
equip: "Екіпірувати"
|
||||
restricted: "(обмежено для цього рівня)"
|
||||
equip: "Одягнути"
|
||||
unequip: "Зняти"
|
||||
|
||||
buy_gems:
|
||||
|
@ -345,8 +345,8 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
items: "Більше 250-ти бонусних предметів!"
|
||||
parents: "Батькам"
|
||||
parents_title: "Ваша дитина вчитиметься програмувати."
|
||||
# parents_blurb1: "With CodeCombat, your child learns by writing real code. They start by learning simple commands, and progress to more advanced topics."
|
||||
# parents_blurb2: "For $9.99 USD/mo, they get new challenges every week and personal email support from professional programmers."
|
||||
parents_blurb1: "Разом з CodeCombat ваша дитина писатиме реальний код. Почне з простих команд та поступово буде розвиватись до складніших тем."
|
||||
parents_blurb2: "За 9.99$ на місяць, вона отримуватиме нові завдання щотижня та персональні листи підтримки від професійних програмістів."
|
||||
parents_blurb3: "Жодного ризику: 100% гарантія повернення грошей, легке скасування абонементу одним кліком."
|
||||
subscribe_button: "Взяти абонемент"
|
||||
stripe_description: "Щомісячний абонемент"
|
||||
|
@ -366,9 +366,9 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
io_blurb: "Проста але дивна."
|
||||
status: "Статус"
|
||||
weapons: "Зброя"
|
||||
weapons_warrior: "Мечі - ближній бій, жодної магії"
|
||||
weapons_ranger: "Арбалети, стрілецька зброя - дистанційна атака, жодної магії"
|
||||
weapons_wizard: "Жезли, чарівні палички - дистанційна атака, магія"
|
||||
weapons_warrior: "Мечі – ближній бій, жодної магії"
|
||||
weapons_ranger: "Стрілецька зброя – дистанційна атака, жодної магії"
|
||||
weapons_wizard: "Жезли – дистанційна атака, магія"
|
||||
attack: "Ушкодження" # Can also translate as "Attack"
|
||||
health: "Здоров’я"
|
||||
speed: "Швидкість"
|
||||
|
@ -391,12 +391,12 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
action_radius: "Радіус"
|
||||
action_duration: "Тривалість"
|
||||
example: "Приклад"
|
||||
ex: "пр" # Abbreviation of "example"
|
||||
ex: "типу" # Abbreviation of "example"
|
||||
current_value: "Поточне значення"
|
||||
default_value: "Типове значення"
|
||||
parameters: "Параметри"
|
||||
returns: "Повертає"
|
||||
granted_by: "Забезпечується"
|
||||
granted_by: "Забезпечує"
|
||||
|
||||
save_load:
|
||||
granularity_saved_games: "Збережено"
|
||||
|
@ -412,20 +412,20 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
editor_config: "Редактор налашт."
|
||||
editor_config_title: "Редактор налаштувань"
|
||||
editor_config_level_language_label: "Мова цього рівня"
|
||||
# editor_config_level_language_description: "Define the programming language for this particular level."
|
||||
editor_config_level_language_description: "Вкажіть мову програмування конкретно для цього рівня."
|
||||
editor_config_default_language_label: "Типова мова програмування"
|
||||
# editor_config_default_language_description: "Define the programming language you want to code in when starting new levels."
|
||||
editor_config_default_language_description: "Вкажіть мову яку хочете використовувати під час програмування нових рівнів."
|
||||
editor_config_keybindings_label: "Комбінації клавіш"
|
||||
editor_config_keybindings_default: "Типове (Ace)"
|
||||
editor_config_keybindings_description: "Додайте додаткові скорочення відомі Вам із загальних редакторів."
|
||||
editor_config_keybindings_default: "Типові (Ace)"
|
||||
editor_config_keybindings_description: "Додайте додаткові скорочення відомі Вам із інших редакторів."
|
||||
editor_config_livecompletion_label: "Автодоповнення в реальному часі"
|
||||
editor_config_livecompletion_description: "Показує поради автодоповнення під час друку."
|
||||
editor_config_invisibles_label: "Показати приховане"
|
||||
editor_config_invisibles_description: "Відображення прихованого, такого як відступи та знаки табуляції."
|
||||
editor_config_indentguides_label: "Показати відступи провідників"
|
||||
editor_config_indentguides_description: "Відображення вертикальних ліній, щоб краще бачити відстань."
|
||||
editor_config_behaviors_label: "Розумні привички"
|
||||
editor_config_behaviors_description: "Автозаповнення дужок, фігурних дужок, та лапок."
|
||||
editor_config_invisibles_label: "Показувати приховане"
|
||||
editor_config_invisibles_description: "Відображення прихованого, кшталту відступів та знаків табуляції."
|
||||
editor_config_indentguides_label: "Показувати лінії відступів"
|
||||
editor_config_indentguides_description: "Відображення вертикальних ліній відступів, щоби краще бачити відстань."
|
||||
editor_config_behaviors_label: "Розумні кавички"
|
||||
editor_config_behaviors_description: "Автоматичне закриття дужок та лапок."
|
||||
|
||||
about:
|
||||
why_codecombat: "Чому CodeCombat?"
|
||||
|
@ -437,12 +437,12 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
why_paragraph_2_suffix: "Ось чому CodeCombat - мультиплеєрна гра, а не гейміфікований курс уроків. Ми не зупинимося, доки ви не включитеся на повну, і це чудово. "
|
||||
why_paragraph_3: "Якщо ви плануєте бути залежним від якоїсь гри, оберіть цю - і перетворіться на одного з чарівників ери інформаційних технологій."
|
||||
press_title: "Блоґерам/Пресі"
|
||||
# press_paragraph_1_prefix: "Want to write about us? Feel free to download and use all of the resources included in our"
|
||||
# press_paragraph_1_link: "press packet"
|
||||
press_paragraph_1_prefix: "Хочете написати про нас? Не соромтесь завантажувати всі наші ресурси які включено до нашого "
|
||||
press_paragraph_1_link: "набору-для-преси"
|
||||
press_paragraph_1_suffix: ". Всі логотипи та зображення можна використовувати не зв’язуючись з нами напряму."
|
||||
team: "Команда"
|
||||
george_title: "Виконавчий директор"
|
||||
# george_blurb: "Businesser"
|
||||
george_blurb: "Бізнесмен"
|
||||
scott_title: "Програміст"
|
||||
scott_blurb: "Розумник"
|
||||
nick_title: "Програміст"
|
||||
|
@ -450,7 +450,7 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
michael_title: "Програміст"
|
||||
michael_blurb: "Сисадмін"
|
||||
matt_title: "Програміст"
|
||||
# matt_blurb: "Bicyclist"
|
||||
matt_blurb: "Dелосипедист"
|
||||
|
||||
versions:
|
||||
save_version_title: "Зберегти нову версію"
|
||||
|
@ -486,13 +486,13 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
new_password: "Новий пароль"
|
||||
new_password_verify: "Підтвердження паролю"
|
||||
email_subscriptions: "Email-підписки"
|
||||
# email_subscriptions_none: "No Email Subscriptions."
|
||||
email_subscriptions_none: "Жодних підписок."
|
||||
email_announcements: "Оголошення"
|
||||
email_announcements_description: "Отримувати електронні листи про останні новини CodeCombat."
|
||||
email_notifications: "Сповіщення"
|
||||
# email_notifications_summary: "Controls for personalized, automatic email notifications related to your CodeCombat activity."
|
||||
email_any_notes: "Будь-які сповіщення"
|
||||
# email_any_notes_description: "Disable to stop all activity notification emails."
|
||||
email_any_notes_description: "Вимкніть аби заборонити сповіщення на email."
|
||||
email_news: "Новини"
|
||||
email_recruit_notes: "Ваканція роботи"
|
||||
# email_recruit_notes_description: "If you play really well, we may contact you about getting you a (better) job."
|
||||
|
@ -544,11 +544,11 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
# article_editor_prefix: "See a mistake in some of our docs? Want to make some instructions for your own creations? Check out the"
|
||||
# article_editor_suffix: "and help CodeCombat players get the most out of their playtime."
|
||||
find_us: "Шукайте нас на цих сайтах"
|
||||
# social_blog: "Read the CodeCombat blog on Sett"
|
||||
# social_discource: "Join the discussion on our Discourse forum"
|
||||
# social_facebook: "Like CodeCombat on Facebook"
|
||||
social_twitter: "Слідкувати за CodeCombat у Twitter"
|
||||
social_gplus: "Приєднатись до CodeCombat у Google+"
|
||||
social_blog: "Читайте наш блоґ на Sett"
|
||||
social_discource: "Приєднайте до обговорення на форумі"
|
||||
social_facebook: "Поставте лайк CodeCombat на Facebook"
|
||||
social_twitter: "Слідкуйте за CodeCombat у Twitter"
|
||||
social_gplus: "Приєднайтесь до CodeCombat у Google+"
|
||||
# social_hipchat: "Chat with us in the public CodeCombat HipChat room"
|
||||
contribute_to_the_project: "Прийняти участь в розробці"
|
||||
|
||||
|
@ -700,12 +700,12 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
# diplomat_launch_url: "launch in October"
|
||||
# diplomat_introduction_suf: "it's that there is sizeable interest in CodeCombat in other countries! We're building a corps of translators eager to turn one set of words into another set of words to get CodeCombat as accessible across the world as possible. If you like getting sneak peeks at upcoming content and getting these levels to your fellow nationals ASAP, then this class might be for you."
|
||||
# diplomat_attribute_1: "Fluency in English and the language you would like to translate to. When conveying complicated ideas, it's important to have a strong grasp in both!"
|
||||
# diplomat_i18n_page_prefix: "You can start translating our levels by going to our"
|
||||
# diplomat_i18n_page: "translations page"
|
||||
# diplomat_i18n_page_suffix: ", or our interface and website on GitHub."
|
||||
diplomat_i18n_page_prefix: "Ви можете почати переклад рівнів перейшовши на нашу "
|
||||
diplomat_i18n_page: "сторінку перекладу"
|
||||
diplomat_i18n_page_suffix: ", або інтерфейсу та сайту перейшовши на GitHub."
|
||||
diplomat_join_pref_github: "Знайдіть файл своєї мови "
|
||||
diplomat_github_url: "на GitHub"
|
||||
# diplomat_join_suf_github: ", edit it online, and submit a pull request. Also, check this box below to keep up-to-date on new internationalization developments!"
|
||||
diplomat_join_suf_github: ", відредагуйте його, на надішліть запит злиття (pull request). Також, також поставте прапорець нижче аби слідкувати за новинами локаліазції!"
|
||||
more_about_diplomat: "Дізнатися, як стати Дипломатом"
|
||||
diplomat_subscribe_desc: "Отримувати листи про розробки i18n та нові рівні для перекладу."
|
||||
# ambassador_summary: "We are trying to build a community, and every community needs a support team when there are troubles. We have got chats, emails, and social networks so that our users can get acquainted with the game. If you want to help people get involved, have fun, and learn some programming, then this class is for you."
|
||||
|
@ -724,9 +724,9 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
translating_diplomats: "Наші перекладачі - Дипломати:"
|
||||
helpful_ambassadors: "Наші незамінні Посланці:"
|
||||
|
||||
# ladder:
|
||||
ladder:
|
||||
# please_login: "Please log in first before playing a ladder game."
|
||||
# my_matches: "My Matches"
|
||||
my_matches: "Мої поєдинки"
|
||||
# simulate: "Simulate"
|
||||
# simulation_explanation: "By simulating games you can get your game ranked faster!"
|
||||
# simulate_games: "Simulate Games!"
|
||||
|
@ -734,17 +734,17 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
# games_simulated_by: "Games simulated by you:"
|
||||
# games_simulated_for: "Games simulated for you:"
|
||||
# games_simulated: "Games simulated"
|
||||
# games_played: "Games played"
|
||||
# ratio: "Ratio"
|
||||
# leaderboard: "Leaderboard"
|
||||
# battle_as: "Battle as "
|
||||
# summary_your: "Your "
|
||||
# summary_matches: "Matches - "
|
||||
# summary_wins: " Wins, "
|
||||
# summary_losses: " Losses"
|
||||
games_played: "Ігор зіграно"
|
||||
ratio: "Співвідношення"
|
||||
leaderboard: "Таблиця лідерів"
|
||||
battle_as: "Бій за "
|
||||
summary_your: "Твої "
|
||||
summary_matches: "Поєдинки - "
|
||||
summary_wins: " Перемоги, "
|
||||
summary_losses: " Поразки"
|
||||
# rank_no_code: "No New Code to Rank"
|
||||
# rank_my_game: "Rank My Game!"
|
||||
# rank_submitting: "Submitting..."
|
||||
rank_submitting: "Відправлення..."
|
||||
# rank_submitted: "Submitted for Ranking"
|
||||
# rank_failed: "Failed to Rank"
|
||||
# rank_being_ranked: "Game Being Ranked"
|
||||
|
@ -753,20 +753,20 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
# code_being_simulated: "Your new code is being simulated by other players for ranking. This will refresh as new matches come in."
|
||||
# no_ranked_matches_pre: "No ranked matches for the "
|
||||
# no_ranked_matches_post: " team! Play against some competitors and then come back here to get your game ranked."
|
||||
# choose_opponent: "Choose an Opponent"
|
||||
# select_your_language: "Select your language!"
|
||||
choose_opponent: "Оберіть противника"
|
||||
select_your_language: "Оберіть мову!"
|
||||
# tutorial_play: "Play Tutorial"
|
||||
# tutorial_recommended: "Recommended if you've never played before"
|
||||
tutorial_recommended: "Рекомендовано, якщо ви взагалі раніше не грали"
|
||||
# tutorial_skip: "Skip Tutorial"
|
||||
# tutorial_not_sure: "Not sure what's going on?"
|
||||
# tutorial_play_first: "Play the Tutorial first."
|
||||
# simple_ai: "Simple AI"
|
||||
simple_ai: "Простий ШІ"
|
||||
# warmup: "Warmup"
|
||||
# friends_playing: "Friends Playing"
|
||||
# log_in_for_friends: "Log in to play with your friends!"
|
||||
# social_connect_blurb: "Connect and play against your friends!"
|
||||
# invite_friends_to_battle: "Invite your friends to join you in battle!"
|
||||
# fight: "Fight!"
|
||||
fight: "В бій!"
|
||||
# watch_victory: "Watch your victory"
|
||||
# defeat_the: "Defeat the"
|
||||
# tournament_ends: "Tournament ends"
|
||||
|
@ -776,7 +776,7 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
# tournament_blurb_criss_cross: "Win bids, construct paths, outwit opponents, grab gems, and upgrade your career in our Criss-Cross tournament! Check out the details"
|
||||
# tournament_blurb_blog: "on our blog"
|
||||
# rules: "Rules"
|
||||
# winners: "Winners"
|
||||
winners: "Переможці"
|
||||
|
||||
user:
|
||||
stats: "Статистика"
|
||||
|
@ -794,42 +794,42 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
favorite_postfix: "."
|
||||
|
||||
achievements:
|
||||
# last_earned: "Last Earned"
|
||||
# amount_achieved: "Amount"
|
||||
last_earned: "Останні отримані"
|
||||
amount_achieved: "Кількість"
|
||||
achievement: "Досягнення"
|
||||
# category_contributor: "Contributor"
|
||||
# category_ladder: "Ladder"
|
||||
category_contributor: "Співучасник"
|
||||
category_ladder: "Драбина"
|
||||
category_level: "Рівень"
|
||||
# category_miscellaneous: "Miscellaneous"
|
||||
category_miscellaneous: "Різне"
|
||||
category_levels: "Рівні"
|
||||
# category_undefined: "Uncategorized"
|
||||
# current_xp_prefix: ""
|
||||
category_undefined: "без категорії"
|
||||
current_xp_prefix: ""
|
||||
current_xp_postfix: " загалом"
|
||||
# new_xp_prefix: ""
|
||||
# new_xp_postfix: " earned"
|
||||
# left_xp_prefix: ""
|
||||
# left_xp_infix: " until level "
|
||||
# left_xp_postfix: ""
|
||||
new_xp_prefix: ""
|
||||
new_xp_postfix: " зароблено"
|
||||
left_xp_prefix: ""
|
||||
left_xp_infix: " до рівня "
|
||||
left_xp_postfix: ""
|
||||
|
||||
account:
|
||||
recently_played: "Нещодавні ігри"
|
||||
# no_recent_games: "No games played during the past two weeks."
|
||||
# payments: "Payments"
|
||||
no_recent_games: "На протязі останніх двох тижнів не зіграно жодної гри."
|
||||
payments: "Платежі"
|
||||
service_apple: "Apple"
|
||||
service_web: "Веб"
|
||||
# paid_on: "Paid On"
|
||||
paid_on: "Сплачено"
|
||||
service: "Сервіс"
|
||||
price: "Ціна"
|
||||
gems: "Cамоцвіти"
|
||||
# status_subscribed: "You're currently subscribed at $9.99 USD/mo. Thanks for your support!"
|
||||
# status_unsubscribed_active: "You're not subscribed and won't be billed, but your account is still active for now."
|
||||
# status_unsubscribed: "Get access to new levels, heroes, items, and bonus gems with a CodeCombat subscription!"
|
||||
status_unsubscribed: "Отримайте доступ до новних рівнів, героїв та бонусів з абонементом CodeCombat!"
|
||||
|
||||
loading_error:
|
||||
could_not_load: "Помилка завантаження з сервера"
|
||||
connection_failure: "Помилка з’єднання."
|
||||
unauthorized: "Вам потрібно увійти. Ви вимкнули куки?"
|
||||
forbidden: "Недостатнь прав."
|
||||
forbidden: "Недостатньо прав."
|
||||
not_found: "Не знайдено."
|
||||
not_allowed: "Недозволений метод."
|
||||
timeout: "Час очікування сервера минув."
|
||||
|
@ -876,10 +876,10 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
# user_remark: "User Remark"
|
||||
# user_remarks: "User Remarks"
|
||||
versions: "Версії"
|
||||
# items: "Items"
|
||||
items: "Предмети"
|
||||
heroes: "Герої"
|
||||
# wizard: "Wizard"
|
||||
# achievement: "Achievement"
|
||||
achievement: "Досягнення"
|
||||
# clas: "CLAs"
|
||||
# play_counts: "Play Counts"
|
||||
feedback: "Відгук"
|
||||
|
@ -898,13 +898,13 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
|
||||
multiplayer:
|
||||
multiplayer_title: "Налаштування мультиплеєра" # We'll be changing this around significantly soon. Until then, it's not important to translate.
|
||||
# multiplayer_toggle: "Enable multiplayer"
|
||||
# multiplayer_toggle_description: "Allow others to join your game."
|
||||
multiplayer_toggle: "Увімкнути мультиплеєр"
|
||||
multiplayer_toggle_description: "Дозволити іншим приєднуватись до гри."
|
||||
multiplayer_link_description: "Поділіться цим посиланням з будь-ким, щоб вони приєдналися до вас."
|
||||
multiplayer_hint_label: "Підказка:"
|
||||
multiplayer_hint: "Натисніть на посилання, щоб обрати всіх, та натисніть Apple-C або Ctrl-C, щоб скопіювати посилання."
|
||||
multiplayer_coming_soon: "Скоро - більше можливостей у мультиплеєрі!"
|
||||
# multiplayer_sign_in_leaderboard: "Sign in or create an account and get your solution on the leaderboard."
|
||||
multiplayer_coming_soon: "Незабаром - більше можливостей у мультиплеєрі!"
|
||||
multiplayer_sign_in_leaderboard: "Увійдіть або створіть екаунт, аби помістити своє рішення до таблиці лідерів."
|
||||
|
||||
legal:
|
||||
page_title: "Юридична інформація"
|
||||
|
@ -915,7 +915,7 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
archmage_wiki_url: "нашу wiki для Архімагів,"
|
||||
opensource_description_suffix: "щоб побачити списки ПЗ, яке робить цю гру можливою."
|
||||
practices_title: "Шановні найкращі гравці"
|
||||
# practices_description: "These are our promises to you, the player, in slightly less legalese."
|
||||
practices_description: "Це наші обіцянки до тебе, гравцю, дещо менш юридичною мовою."
|
||||
privacy_title: "Конфіденційність"
|
||||
privacy_description: "Ми не розповсюджуємо вашу персональну інформацію."
|
||||
security_title: "Безпека"
|
||||
|
@ -961,24 +961,24 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
nutshell_description: "Будь-які ресурси котрі ми надаємо в редакторі рівнів є безкоштовними для використання за вашим бажанням для створення рівнів. Але ми залишаємо за собою право обмежувати розповсюдження самих рівнів(котрі були створені на codecombat.com), тому вони зможуть заплатити в майбутньому, якщо в кінцевому результаті таке станеться."
|
||||
canonical: "Англійська версія цього документа є остаточною та канонічною версією. Якщо тут є будь-які невідповідності в перекладі, англійська версія документа є пріоритетною."
|
||||
|
||||
# ladder_prizes:
|
||||
# title: "Tournament Prizes" # This section was for an old tournament and doesn't need new translations now.
|
||||
# blurb_1: "These prizes will be awarded according to"
|
||||
# blurb_2: "the tournament rules"
|
||||
# blurb_3: "to the top human and ogre players."
|
||||
# blurb_4: "Two teams means double the prizes!"
|
||||
# blurb_5: "(There will be two first place winners, two second-place winners, etc.)"
|
||||
# rank: "Rank"
|
||||
# prizes: "Prizes"
|
||||
# total_value: "Total Value"
|
||||
ladder_prizes:
|
||||
title: "Нагороди за турнір" # This section was for an old tournament and doesn't need new translations now.
|
||||
blurb_1: "Цими призами буде нагороджено залежно від"
|
||||
blurb_2: "правил турніру"
|
||||
blurb_3: "першості серед людей або оґрів."
|
||||
blurb_4: "Дві команди – подвоєння призів!"
|
||||
blurb_5: "(Два переможня на першому місці, два на другому, тощо.)"
|
||||
rank: "Ранг"
|
||||
prizes: "Призи"
|
||||
total_value: "Загалом"
|
||||
# in_cash: "in cash"
|
||||
# custom_wizard: "Custom CodeCombat Wizard"
|
||||
# custom_avatar: "Custom CodeCombat avatar"
|
||||
custom_wizard: "Власний чарівник CodeCombat"
|
||||
custom_avatar: "Власний аватар CodeCombat"
|
||||
# heap: "for six months of \"Startup\" access"
|
||||
# credits: "credits"
|
||||
# one_month_coupon: "coupon: choose either Rails or HTML"
|
||||
# one_month_discount: "discount, 30% off: choose either Rails or HTML"
|
||||
# license: "license"
|
||||
license: "ліцензія"
|
||||
# oreilly: "ebook of your choice"
|
||||
|
||||
wizard_settings:
|
||||
|
@ -1121,7 +1121,7 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
# filter_experience_senior: "Senior"
|
||||
# filter_experience_junior: "Junior"
|
||||
# filter_experience_recent_grad: "Recent Grad"
|
||||
# filter_experience_student: "College Student"
|
||||
filter_experience_student: "Студент коледжу"
|
||||
# filter_results: "results"
|
||||
# start_hiring: "Start hiring."
|
||||
# reasons: "Three reasons you should hire through us:"
|
||||
|
|
|
@ -4,10 +4,10 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
|
|||
no_ie: "抱歉! Internet Explorer 8 等旧式预览器无法使用本网站。" # Warning that only shows up in IE8 and older
|
||||
no_mobile: "CodeCombat 不是针对手机设备设计的,所以可能无法达到最好的体验!" # Warning that shows up on mobile devices
|
||||
play: "开始游戏" # The big play button that just starts playing a level
|
||||
# try_it: "Try It" # Alternate wording for Play button
|
||||
try_it: "尝试一下" # Alternate wording for Play button
|
||||
old_browser: "噢, 你的浏览器太老了, 不能运行CodeCombat. 抱歉!" # Warning that shows up on really old Firefox/Chrome/Safari
|
||||
old_browser_suffix: "你可以继续重试下去,但八成不起作用,更新浏览器吧亲~"
|
||||
# ipad_browser: "Bad news: CodeCombat doesn't run on iPad in the browser. Good news: our native iPad app is awaiting Apple approval."
|
||||
ipad_browser: "坏消息: CodeCombat 无法在iPad的浏览器中运行。好消息:我们的iPad应用正在等待苹果公司审批。"
|
||||
campaign: "战役模式"
|
||||
for_beginners: "适合初学者"
|
||||
multiplayer: "多人游戏" # Not currently shown on home page
|
||||
|
@ -58,7 +58,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
|
|||
confirm: "确认"
|
||||
owned: "已拥有" # For items you own
|
||||
locked: "需解锁"
|
||||
# purchasable: "Purchasable" # For a hero you unlocked but haven't purchased
|
||||
purchasable: "可购买" # For a hero you unlocked but haven't purchased
|
||||
available: "可用"
|
||||
skills_granted: "获得技能" # Property documentation details
|
||||
heroes: "英雄" # Tooltip on hero shop button from /play
|
||||
|
@ -71,9 +71,9 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
|
|||
buy_gems: "购买宝石"
|
||||
campaign_forest: "森林战役"
|
||||
campaign_dungeon: "地牢战役"
|
||||
# subscription_required: "Subscription Required"
|
||||
# free: "Free"
|
||||
# subscribed: "Subscribed"
|
||||
subscription_required: "需订阅"
|
||||
free: "免费"
|
||||
subscribed: "已订阅"
|
||||
older_campaigns: "旧的战役"
|
||||
anonymous: "匿名玩家"
|
||||
level_difficulty: "难度:"
|
||||
|
@ -236,9 +236,9 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
|
|||
tome_minion_spells: "助手的咒语" # Only in old-style levels.
|
||||
tome_read_only_spells: "只读的咒语" # Only in old-style levels.
|
||||
tome_other_units: "其他单元" # Only in old-style levels.
|
||||
# tome_cast_button_run: "Run"
|
||||
# tome_cast_button_running: "Running"
|
||||
# tome_cast_button_ran: "Ran"
|
||||
tome_cast_button_run: "运行"
|
||||
tome_cast_button_running: "正在运行"
|
||||
tome_cast_button_ran: "运行过"
|
||||
tome_submit_button: "提交"
|
||||
tome_reload_method: "重载该方法的原始代码" # Title text for individual method reload button.
|
||||
tome_select_method: "选择方法"
|
||||
|
@ -246,7 +246,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
|
|||
tome_select_a_thang: "选择人物来 "
|
||||
tome_available_spells: "可用的法术"
|
||||
tome_your_skills: "你的技能"
|
||||
# tome_help: "Help"
|
||||
tome_help: "帮助"
|
||||
tome_current_method: "当前方法"
|
||||
hud_continue_short: "继续"
|
||||
code_saved: "代码已保存"
|
||||
|
@ -324,27 +324,27 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
|
|||
few_gems: "几个宝石"
|
||||
pile_gems: "一堆宝石"
|
||||
chest_gems: "一箱宝石"
|
||||
# purchasing: "Purchasing..."
|
||||
# declined: "Your card was declined"
|
||||
# retrying: "Server error, retrying."
|
||||
# prompt_title: "Not Enough Gems"
|
||||
# prompt_body: "Do you want to get more?"
|
||||
# prompt_button: "Enter Shop"
|
||||
purchasing: "正在付款..."
|
||||
declined: "您的卡片被拒绝"
|
||||
retrying: "服务器错误,请重试"
|
||||
prompt_title: "没有足够数量的宝石"
|
||||
prompt_body: "还需要更多吗?"
|
||||
prompt_button: "进入商店"
|
||||
|
||||
# subscribe:
|
||||
# subscribe_title: "Subscribe"
|
||||
# levels: "Unlock 17 extra levels! With 5 new ones every week!"
|
||||
# heroes: "More powerful heroes!"
|
||||
# gems: "3500 bonus gems every month!"
|
||||
# items: "Over 250 bonus items!"
|
||||
# parents: "For Parents"
|
||||
# parents_title: "Your child will learn to code."
|
||||
# parents_blurb1: "With CodeCombat, your child learns by writing real code. They start by learning simple commands, and progress to more advanced topics."
|
||||
# parents_blurb2: "For $9.99 USD/mo, they get new challenges every week and personal email support from professional programmers."
|
||||
# parents_blurb3: "No Risk: 100% money back guarantee, easy 1-click unsubscribe."
|
||||
# subscribe_button: "Subscribe Now"
|
||||
# stripe_description: "Monthly Subscription"
|
||||
# subscription_required_to_play: "You'll need a subscription to play this level."
|
||||
subscribe:
|
||||
subscribe_title: "订阅"
|
||||
levels: "多解锁17个关卡!每周解锁5个新关卡!"
|
||||
heroes: "更多强大的英雄!"
|
||||
gems: "每月多3500宝石奖励!"
|
||||
items: "超过250个物品奖励!"
|
||||
parents: "致家长"
|
||||
parents_title: "您的孩子将要学习编写程序。"
|
||||
parents_blurb1: "通过使用CodeCombat,您的孩子将学习编写真正的程序代码。他们将学到简单指令,进而处理更复杂的问题。"
|
||||
parents_blurb2: "每月支付99美元,他们每周都会有新的挑战,并且通过电子邮件获得专业程序员的指导。"
|
||||
parents_blurb3: "无风险承诺:100%退款,一键退订。"
|
||||
subscribe_button: "现在订阅"
|
||||
stripe_description: "每月订阅"
|
||||
subscription_required_to_play: "订阅后可开始本关"
|
||||
|
||||
choose_hero:
|
||||
choose_hero: "请选择您的英雄"
|
||||
|
@ -370,27 +370,27 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
|
|||
range: "攻击范围" # As in "attack or visual range"
|
||||
blocks: "格挡" # As in "this shield blocks this much damage"
|
||||
skills: "技能"
|
||||
# available_for_purchase: "Available for Purchase"
|
||||
# level_to_unlock: "Level to unlock:"
|
||||
# restricted_to_certain_heroes: "Only certain heroes can play this level."
|
||||
available_for_purchase: "可以购买"
|
||||
level_to_unlock: "未解锁关卡:"
|
||||
restricted_to_certain_heroes: "只有特定的英雄可以进入本关。"
|
||||
|
||||
# skill_docs:
|
||||
# writable: "writable" # Hover over "attack" in Your Skills while playing a level to see most of this
|
||||
# read_only: "read-only"
|
||||
# action_name: "name"
|
||||
# action_cooldown: "Takes"
|
||||
# action_specific_cooldown: "Cooldown"
|
||||
# action_damage: "Damage"
|
||||
# action_range: "Range"
|
||||
# action_radius: "Radius"
|
||||
# action_duration: "Duration"
|
||||
# example: "Example"
|
||||
# ex: "ex" # Abbreviation of "example"
|
||||
# current_value: "Current Value"
|
||||
# default_value: "Default value"
|
||||
# parameters: "Parameters"
|
||||
# returns: "Returns"
|
||||
# granted_by: "Granted by"
|
||||
skill_docs:
|
||||
writable: "可写" # Hover over "attack" in Your Skills while playing a level to see most of this
|
||||
read_only: "只读"
|
||||
action_name: "名称"
|
||||
action_cooldown: "释放时间"
|
||||
action_specific_cooldown: "冷却时间"
|
||||
action_damage: "攻击力"
|
||||
action_range: "范围"
|
||||
action_radius: "半径"
|
||||
action_duration: "持续时间"
|
||||
example: "例程"
|
||||
ex: "例如" # Abbreviation of "example"
|
||||
current_value: "当前值"
|
||||
default_value: "默认值"
|
||||
parameters: "参数"
|
||||
returns: "返回值"
|
||||
granted_by: "技能来自"
|
||||
|
||||
save_load:
|
||||
granularity_saved_games: "保存"
|
||||
|
@ -729,7 +729,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
|
|||
games_simulated_for: "待你模拟玩的游戏:"
|
||||
games_simulated: "游戏已模拟"
|
||||
games_played: "已玩过"
|
||||
# ratio: "Ratio"
|
||||
ratio: "通过率"
|
||||
leaderboard: "排行榜"
|
||||
battle_as: "我要加入这一方 "
|
||||
summary_your: "你 "
|
||||
|
@ -813,8 +813,8 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
|
|||
# service_web: "Web"
|
||||
# paid_on: "Paid On"
|
||||
# service: "Service"
|
||||
# price: "Price"
|
||||
# gems: "Gems"
|
||||
price: "价格"
|
||||
gems: "宝石"
|
||||
# status_subscribed: "You're currently subscribed at $9.99 USD/mo. Thanks for your support!"
|
||||
# status_unsubscribed_active: "You're not subscribed and won't be billed, but your account is still active for now."
|
||||
# status_unsubscribed: "Get access to new levels, heroes, items, and bonus gems with a CodeCombat subscription!"
|
||||
|
@ -878,17 +878,17 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
|
|||
# play_counts: "Play Counts"
|
||||
feedback: "反馈"
|
||||
|
||||
# delta:
|
||||
# added: "Added"
|
||||
# modified: "Modified"
|
||||
# deleted: "Deleted"
|
||||
# moved_index: "Moved Index"
|
||||
# text_diff: "Text Diff"
|
||||
delta:
|
||||
added: "被添加"
|
||||
modified: "被修改"
|
||||
deleted: "被删除"
|
||||
moved_index: "被移动的索引"
|
||||
text_diff: "文本变化"
|
||||
# merge_conflict_with: "MERGE CONFLICT WITH"
|
||||
# no_changes: "No Changes"
|
||||
no_changes: "没有变化"
|
||||
|
||||
# guide:
|
||||
# temp: "Temp"
|
||||
guide:
|
||||
temp: "临时"
|
||||
|
||||
multiplayer:
|
||||
multiplayer_title: "多人游戏设置" # We'll be changing this around significantly soon. Until then, it's not important to translate.
|
||||
|
|
|
@ -6,6 +6,9 @@ ThangType = require './ThangType'
|
|||
module.exports = class Level extends CocoModel
|
||||
@className: 'Level'
|
||||
@schema: require 'schemas/models/level'
|
||||
@levels:
|
||||
'dungeons-of-kithgard': '5411cb3769152f1707be029c'
|
||||
'defense-of-plainswood': '541b67f71ccc8eaae19f3c62'
|
||||
urlRoot: '/db/level'
|
||||
|
||||
serialize: (supermodel, session, otherSession, cached=false) ->
|
||||
|
|
|
@ -3,6 +3,7 @@ cache = {}
|
|||
CocoModel = require './CocoModel'
|
||||
util = require 'core/utils'
|
||||
ThangType = require './ThangType'
|
||||
Level = require './Level'
|
||||
|
||||
module.exports = class User extends CocoModel
|
||||
@className: 'User'
|
||||
|
@ -90,7 +91,7 @@ module.exports = class User extends CocoModel
|
|||
#heroes = _.values ThangType.heroes if me.isAdmin()
|
||||
heroes
|
||||
items: -> (me.get('earned')?.items ? []).concat(me.get('purchased')?.items ? []).concat([ThangType.items['simple-boots']])
|
||||
levels: -> (me.get('earned')?.levels ? []).concat(me.get('purchased')?.levels ? [])
|
||||
levels: -> (me.get('earned')?.levels ? []).concat(me.get('purchased')?.levels ? []).concat(Level.levels['dungeons-of-kithgard'])
|
||||
ownsHero: (heroOriginal) -> heroOriginal in @heroes()
|
||||
ownsItem: (itemOriginal) -> itemOriginal in @items()
|
||||
ownsLevel: (levelOriginal) -> levelOriginal in @levels()
|
||||
|
|
|
@ -253,13 +253,19 @@ kbd
|
|||
border-image-source: url(/images/common/button-background-primary-active-border.png)
|
||||
&.btn-success
|
||||
border-image-source: url(/images/common/button-background-success-active-border.png)
|
||||
color: darken(white, 5%)
|
||||
&.btn-warning
|
||||
border-image-source: url(/images/common/button-background-warning-active-border.png)
|
||||
color: darken(white, 5%)
|
||||
&.btn-danger
|
||||
border-image-source: url(/images/common/button-background-danger-active-border.png)
|
||||
|
||||
&:hover
|
||||
color: lighten(rgb(248, 197, 146), 5%)
|
||||
&.btn-success
|
||||
color: white
|
||||
&.btn-warning
|
||||
color: white
|
||||
|
||||
&:active
|
||||
&.btn-lg
|
||||
|
|
|
@ -63,6 +63,9 @@
|
|||
left: 40px
|
||||
width: 588px
|
||||
|
||||
.help-block
|
||||
margin: 0
|
||||
|
||||
.alert
|
||||
margin-top: -25px
|
||||
margin-bottom: 0
|
||||
|
|
|
@ -2,55 +2,89 @@
|
|||
@import "app/styles/bootstrap/variables"
|
||||
|
||||
#hero-victory-modal
|
||||
$hero-yellow-text: rgb(252, 201, 53)
|
||||
|
||||
//- Top-level modal container
|
||||
.modal-dialog
|
||||
margin-top: 15px
|
||||
margin-top: 0
|
||||
padding-top: 0
|
||||
width: 750px
|
||||
|
||||
.modal-content
|
||||
position: relative
|
||||
margin-top: -251px
|
||||
|
||||
&.full-achievements
|
||||
@media only screen and (max-height: 720px)
|
||||
.modal-dialog
|
||||
margin-top: -76px
|
||||
#victory-header
|
||||
background: transparent
|
||||
@media only screen and (max-height: 640px)
|
||||
.modal-dialog
|
||||
margin-top: -130px
|
||||
#victory-header
|
||||
display: none
|
||||
|
||||
//- Header
|
||||
|
||||
.background-wrapper
|
||||
//background: url("/images/pages/play/level/modal/victory_modal_background.png")
|
||||
width: 550px
|
||||
background-color: transparent
|
||||
width: 750px
|
||||
background: transparent
|
||||
border: 0px solid transparent
|
||||
border-width: 25px
|
||||
border-image: url("/images/pages/play/level/modal/victory_modal_background.png") 25 fill round
|
||||
border-image: url("/images/pages/play/level/modal/victory_modal_border_background.png") 250 0 100 0 fill round
|
||||
border-width: 250px 0 100px 0
|
||||
border-radius: 12px
|
||||
|
||||
#victory-banner
|
||||
position: absolute
|
||||
left: -30px
|
||||
z-index: 0
|
||||
|
||||
#victory-header
|
||||
position: absolute
|
||||
left: 135px
|
||||
display: block
|
||||
margin: 10px auto 0
|
||||
// http://easings.net/#easeOutBack plus tweaked a bit: http://cubic-bezier.com/#.18,.68,.75,2
|
||||
@include transition(0.5s cubic-bezier(0.18, 0.68, 0.75, 2))
|
||||
z-index: 1
|
||||
|
||||
&.out
|
||||
@include scale(0)
|
||||
|
||||
.modal-header
|
||||
height: 85px
|
||||
border: none
|
||||
position: absolute
|
||||
left: 188px
|
||||
width: 378px
|
||||
height: 134px
|
||||
margin: 0
|
||||
padding: 0
|
||||
|
||||
#victory-header
|
||||
position: relative
|
||||
// http://easings.net/#easeOutBack plus tweaked a bit: http://cubic-bezier.com/#.18,.68,.75,2
|
||||
@include transition(0.5s cubic-bezier(0.18, 0.68, 0.75, 2))
|
||||
z-index: 1
|
||||
width: 100%
|
||||
height: 100%
|
||||
text-align: center
|
||||
background: transparent url(/images/pages/play/level/modal/victory_hero.png/) no-repeat
|
||||
background-position: center -88px
|
||||
|
||||
&.out
|
||||
@include scale(0)
|
||||
|
||||
#victory-title
|
||||
display: inline-block
|
||||
margin-top: 74px
|
||||
|
||||
h1
|
||||
text-transform: uppercase
|
||||
text-align: center
|
||||
color: $hero-yellow-text
|
||||
font-size: 80px
|
||||
margin: 0
|
||||
padding: 0
|
||||
text-shadow: black 8px 8px 0, black -8px -8px 0, black 8px -8px 0, black -8px 8px 0, black 8px 0px 0, black 0px -8px 0, black -8px 0px 0, black 0px 8px 0
|
||||
|
||||
//- Achievement panels
|
||||
|
||||
.modal-body
|
||||
padding: 0 20px
|
||||
min-height: 30px
|
||||
margin-top: 160px
|
||||
|
||||
.achievement-panel
|
||||
background: url("/images/pages/play/level/modal/achievement_plate.png")
|
||||
width: 451px
|
||||
height: 144px
|
||||
margin: 5px auto
|
||||
background: transparent url("/images/pages/play/level/modal/victory_modal_shelf.png") no-repeat center 73px
|
||||
width: 824px
|
||||
height: 127px
|
||||
margin: 0px -37px 0px -57px
|
||||
position: relative
|
||||
|
||||
@include transition-duration(1s)
|
||||
|
@ -71,12 +105,16 @@
|
|||
|
||||
.achievement-description
|
||||
@include opacity(0.75)
|
||||
z-index: 1
|
||||
position: absolute
|
||||
text-align: center
|
||||
left: 95px
|
||||
right: 98px
|
||||
top: 10px
|
||||
color: white
|
||||
top: 86px
|
||||
color: $hero-yellow-text
|
||||
font-weight: bold
|
||||
text-transform: uppercase
|
||||
font-family: 'Open Sans Condensed'
|
||||
white-space: nowrap
|
||||
overflow: hidden
|
||||
text-overflow: ellipsis
|
||||
|
@ -85,8 +123,7 @@
|
|||
position: absolute
|
||||
left: 25px
|
||||
right: 23px
|
||||
top: 41px
|
||||
bottom: 18px
|
||||
top: 0
|
||||
@include flexbox()
|
||||
@include flex-justify-center()
|
||||
|
||||
|
@ -102,7 +139,7 @@
|
|||
z-index: 1
|
||||
@include transition(0.25s ease)
|
||||
|
||||
&.hero, &.item
|
||||
&.hero, &.item, &.xp, &.gems
|
||||
background: url("/images/pages/play/level/modal/reward_plate_wide.png")
|
||||
width: 120px
|
||||
height: 83px
|
||||
|
@ -185,28 +222,112 @@
|
|||
.gems .pulse
|
||||
@include animation(rewardPulse 0.25s infinite)
|
||||
|
||||
//- Footer
|
||||
|
||||
.modal-footer
|
||||
padding-bottom: 0
|
||||
|
||||
p.sign-up-poke
|
||||
color: white
|
||||
|
||||
.sign-up-button
|
||||
float: right
|
||||
margin: 2px 10px
|
||||
//- Footer - totals
|
||||
|
||||
#totals
|
||||
color: white
|
||||
width: 709px
|
||||
height: 96px
|
||||
background: transparent url(/images/pages/play/level/modal/xp_gems_parchment.png)
|
||||
position: relative
|
||||
text-align: left
|
||||
|
||||
.total-wrapper
|
||||
position: absolute
|
||||
top: 18px
|
||||
|
||||
&#xp-wrapper
|
||||
left: 117px
|
||||
width: 300px
|
||||
|
||||
&#gem-wrapper
|
||||
left: 529px
|
||||
|
||||
.total-label
|
||||
width: 90px
|
||||
|
||||
.total-count
|
||||
float: left
|
||||
font-size: 45px
|
||||
font-weight: bold
|
||||
color: rgb(40, 33, 22)
|
||||
margin-right: 12px
|
||||
|
||||
.total-label
|
||||
float: left
|
||||
color: rgb(103, 92, 76)
|
||||
text-transform: uppercase
|
||||
font-weight: bold
|
||||
font-family: 'Open Sans Condensed'
|
||||
font-size: 18px
|
||||
margin-top: 13px
|
||||
line-height: 18px
|
||||
|
||||
.xp-bar-outer
|
||||
background-color: rgb(40, 33, 22)
|
||||
border: 4px solid rgb(40, 33, 22)
|
||||
border-radius: 8px
|
||||
width: 150px
|
||||
height: 16px
|
||||
margin-top: 3px
|
||||
position: relative
|
||||
float: left
|
||||
|
||||
.xp-bar-already-achieved
|
||||
background-color: rgb(166, 213, 88)
|
||||
//background-color: white
|
||||
border-radius: 8px
|
||||
height: 100%
|
||||
position: absolute
|
||||
z-index: 1
|
||||
|
||||
.xp-bar-total
|
||||
background-color: rgb(253, 171, 45)
|
||||
border: 1px solid rgb(239, 177, 73)
|
||||
border-radius: 8px
|
||||
height: 100%
|
||||
position: absolute
|
||||
|
||||
|
||||
//- Footer - other stuff
|
||||
|
||||
.modal-footer
|
||||
// Negative bottom margin counteracts most of the extra the border image height.
|
||||
margin: 0 0 -80px 0
|
||||
padding: 0 20px
|
||||
text-align: center
|
||||
|
||||
.sign-up-poke
|
||||
width: 430px
|
||||
|
||||
.sign-up-blurb
|
||||
width: 175px
|
||||
font-family: 'Open Sans Condensed'
|
||||
font-weight: bold
|
||||
text-transform: uppercase
|
||||
font-size: 18px
|
||||
line-height: 18px
|
||||
text-align: left
|
||||
float: left
|
||||
margin: 5px 0 0 5px
|
||||
color: rgb(160, 150, 126)
|
||||
|
||||
.sign-up-button
|
||||
width: 250px
|
||||
height: 60px
|
||||
line-height: 30px
|
||||
margin: 0
|
||||
float: left
|
||||
|
||||
|
||||
.next-level-buttons
|
||||
float: right
|
||||
|
||||
.next-level-button
|
||||
display: block
|
||||
margin: 8px 10px
|
||||
width: 150px
|
||||
.next-level-button, .return-to-ladder-button
|
||||
width: 258px
|
||||
height: 60px
|
||||
line-height: 30px
|
||||
margin: 0 10px
|
||||
|
||||
.ladder-submission-view
|
||||
display: inline-block
|
||||
|
@ -223,7 +344,11 @@
|
|||
|
||||
.hour-of-code-done
|
||||
clear: both
|
||||
padding-top: 10px
|
||||
margin: 5px auto 0 auto
|
||||
padding: 10px
|
||||
background-color: rgba(22, 34, 30, 0.5)
|
||||
border-radius: 8px
|
||||
display: inline-block
|
||||
|
||||
strong
|
||||
color: white
|
||||
|
@ -241,23 +366,25 @@
|
|||
|
||||
html.no-borderimage
|
||||
#hero-victory-modal
|
||||
.modal-dialog
|
||||
margin-top: 251px
|
||||
.background-wrapper
|
||||
border: 0
|
||||
background: url("/images/pages/play/level/modal/victory_modal_background.png")
|
||||
height: 650px
|
||||
#victory-header
|
||||
margin-top: 40px
|
||||
left: 160px
|
||||
#victory-banner
|
||||
left: 0px
|
||||
top: 40px
|
||||
.modal-header
|
||||
height: 110px
|
||||
.modal-content
|
||||
height: 650px
|
||||
padding-bottom: 0
|
||||
.modal-footer
|
||||
bottom: 20px
|
||||
height: 713px
|
||||
|
||||
&.full-achievements
|
||||
@media only screen and (max-height: 720px)
|
||||
.modal-dialog
|
||||
margin-top: 175px
|
||||
#victory-header
|
||||
background: transparent
|
||||
@media only screen and (max-height: 640px)
|
||||
.modal-dialog
|
||||
margin-top: 121px
|
||||
#victory-header
|
||||
display: none
|
||||
|
||||
|
||||
body.ipad
|
||||
#hero-victory-modal
|
||||
|
|
|
@ -2,6 +2,16 @@
|
|||
|
||||
#item-details-view
|
||||
|
||||
.big-font
|
||||
text-transform: uppercase
|
||||
font-family: "Open Sans Condensed"
|
||||
font-weight: bold
|
||||
|
||||
.one-line
|
||||
white-space: nowrap
|
||||
overflow: hidden
|
||||
text-overflow: ellipsis
|
||||
|
||||
.nano-content
|
||||
padding: 10px
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
$heroCanvasHeight: 265px
|
||||
|
||||
#play-heroes-modal
|
||||
@include user-select(none)
|
||||
|
||||
//- Clear modal defaults
|
||||
|
||||
|
@ -187,6 +188,7 @@ $heroCanvasHeight: 265px
|
|||
|
||||
.hero-stats
|
||||
color: white
|
||||
@include user-select(initial)
|
||||
|
||||
h2
|
||||
margin-top: 0px
|
||||
|
@ -261,6 +263,9 @@ $heroCanvasHeight: 265px
|
|||
|
||||
//- Different footer states
|
||||
|
||||
#hero-footer
|
||||
@include user-select(initial)
|
||||
|
||||
#purchasable-hero-explanation, #loading-hero-explanation
|
||||
position: absolute
|
||||
left: 32px
|
||||
|
|
|
@ -142,6 +142,29 @@ $gameControlMargin: 30px
|
|||
border: 3px solid gold
|
||||
@include box-shadow(0px 0px 35px skyblue)
|
||||
|
||||
img.banner
|
||||
position: absolute
|
||||
bottom: 38%
|
||||
left: -50%
|
||||
width: 200%
|
||||
pointer-events: none
|
||||
|
||||
img.star
|
||||
width: 100%
|
||||
bottom: 7%
|
||||
position: absolute
|
||||
pointer-events: none
|
||||
|
||||
.glyphicon-star
|
||||
position: absolute
|
||||
color: lightblue
|
||||
font-size: 21px
|
||||
left: 1.5px
|
||||
|
||||
&.started .glyphicon-star
|
||||
left: 0.5px
|
||||
|
||||
|
||||
.level-shadow
|
||||
z-index: 1
|
||||
width: $levelDotShadowWidth
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
extends /templates/core/modal-base
|
||||
block modal-header-content
|
||||
img(src="/images/pages/play/level/modal/victory_modal_blue_banner.png")#victory-banner
|
||||
img(src="/images/pages/play/level/modal/victory_word.png")#victory-header.out
|
||||
#victory-header.out
|
||||
#victory-title
|
||||
if me.get('preferredLanguage') && me.get('preferredLanguage').split('-')[0] == 'en'
|
||||
img(src="/images/pages/play/level/modal/victory_word.png", draggable="false")
|
||||
else
|
||||
h1(data-i18n="play_level.victory") Victory
|
||||
|
||||
block modal-body-content
|
||||
|
||||
|
@ -43,33 +47,41 @@ block modal-body-content
|
|||
.reward-text= animate ? 'New Item' : item.get('name')
|
||||
|
||||
block modal-footer-content
|
||||
#totals
|
||||
.total-wrapper#xp-wrapper
|
||||
.total-count#xp-total 0
|
||||
.total-label
|
||||
span.spr(data-i18n="play_level.victory_experience_gained") XP Gained
|
||||
| -
|
||||
span.spl.spr(data-i18n="general.player_level") Level
|
||||
span.level= me.level()
|
||||
.xp-bar-outer
|
||||
.xp-bar-already-achieved
|
||||
.xp-bar-total
|
||||
.total-wrapper#gem-wrapper
|
||||
.total-count#gem-total 0
|
||||
.total-label(data-i18n="play_level.victory_gems_gained") Gems Gained
|
||||
|
||||
if me.get('anonymous')
|
||||
p.sign-up-poke.hide
|
||||
button.btn.btn-success.sign-up-button.btn-large(data-toggle="coco-modal", data-target="core/AuthModal", data-i18n="play_level.victory_sign_up") Sign Up to Save Progress
|
||||
span(data-i18n="play_level.victory_sign_up_poke") Want to save your code? Create a free account!
|
||||
.sign-up-poke.hide
|
||||
.sign-up-blurb(data-i18n="play_level.victory_sign_up_poke") Want to save your code? Create a free account!
|
||||
button.btn.btn-illustrated.btn-warning.sign-up-button.btn-lg(data-toggle="coco-modal", data-target="core/AuthModal", data-i18n="play_level.victory_sign_up") Sign Up to Save Progress
|
||||
|
||||
div#totals.pull-left
|
||||
span.spr Experience Gained:
|
||||
span#xp-total +0
|
||||
br
|
||||
span.spr Gems Gained:
|
||||
span#gem-total +0
|
||||
|
||||
button.btn.btn-warning.hide#saving-progress-label(disabled, data-i18n="play_level.victory_saving_progress") Saving Progress
|
||||
button.btn.btn-illustrated.btn-lg.btn-warning.hide#saving-progress-label(disabled, data-i18n="play_level.victory_saving_progress") Saving Progress
|
||||
|
||||
.next-level-buttons
|
||||
if readyToRank
|
||||
.ladder-submission-view
|
||||
else if level.get('type') === 'hero-ladder'
|
||||
button.btn.btn-primary.return-to-ladder-button(data-href="/play/ladder/#{level.get('slug')}#my-matches", data-dismiss="modal", data-i18n="play_level.victory_return_to_ladder") Return to Ladder
|
||||
button.btn.btn-illustrated.btn-primary.btn-lg.return-to-ladder-button(data-href="/play/ladder/#{level.get('slug')}#my-matches", data-dismiss="modal", data-i18n="play_level.victory_return_to_ladder") Return to Ladder
|
||||
else
|
||||
button.btn.btn-success.world-map-button.next-level-button.hide#continue-button(data-i18n="play_level.victory_play_continue") Continue
|
||||
button.btn.btn-illustrated.btn-success.btn-lg.world-map-button.next-level-button.hide#continue-button(data-i18n="play_level.victory_play_continue") Continue
|
||||
|
||||
if showHourOfCodeDoneButton
|
||||
.hour-of-code-done
|
||||
hr
|
||||
a.image-link(href="http://code.org/api/hour/finish")
|
||||
img(src="/images/level/csedweek-logo-final-small.jpg", alt="CS Ed Week Hour of Code", title="I'm finished with my Hour of Code", width=80)
|
||||
strong(data-i18n="play_level.victory_hour_of_code_done") Are You Done?
|
||||
a.text-link(href="http://code.org/api/hour/finish")
|
||||
span(data-i18n="play_level.victory_hour_of_code_done_yes") Yes, I'm finished with my Hour of Code!
|
||||
.clearfix
|
|
@ -12,6 +12,12 @@
|
|||
- seenNext = seenNext || next;
|
||||
div(style="left: #{level.x}%; bottom: #{level.y}%; background-color: #{level.color}", class="level" + (next ? " next" : "") + (level.disabled ? " disabled" : "") + (level.locked ? " locked" : "") + " " + levelStatusMap[level.id] || "", data-level-id=level.id, title=level.name + (level.disabled ? ' (Coming Soon to Adventurers)' : ''))
|
||||
a(href=level.type == 'hero' ? '#' : level.disabled ? "/play" : "/play/#{level.levelPath || 'level'}/#{level.id}", disabled=level.disabled, data-level-id=level.id, data-level-path=level.levelPath || 'level', data-level-name=level.name)
|
||||
if level.requiresSubscription
|
||||
img.star(src="/images/pages/play/star.png")
|
||||
if levelStatusMap[level.id] === 'complete'
|
||||
img.banner(src="/images/pages/play/level-banner-complete.png")
|
||||
if levelStatusMap[level.id] === 'started'
|
||||
img.banner(src="/images/pages/play/level-banner-started.png")
|
||||
div(style="left: #{level.x}%; bottom: #{level.y}%", class="level-shadow" + (next ? " next" : "") + " " + levelStatusMap[level.id] || "")
|
||||
.level-info-container(data-level-id=level.id, data-level-path=level.levelPath || 'level', data-level-name=level.name)
|
||||
div(class="level-info " + (levelStatusMap[level.id] || ""))
|
||||
|
|
|
@ -10,6 +10,7 @@ MusicPlayer = require 'lib/surface/MusicPlayer'
|
|||
storage = require 'core/storage'
|
||||
AuthModal = require 'views/core/AuthModal'
|
||||
SubscribeModal = require 'views/play/modal/SubscribeModal'
|
||||
Level = require 'models/Level'
|
||||
|
||||
trackedHourOfCode = false
|
||||
|
||||
|
@ -126,10 +127,10 @@ module.exports = class WorldMapView extends RootView
|
|||
getRenderData: (context={}) ->
|
||||
context = super(context)
|
||||
context.campaign = _.find campaigns, { id: @terrain }
|
||||
for level, index in context.campaign.levels
|
||||
for level in context.campaign.levels
|
||||
level.x ?= 10 + 80 * Math.random()
|
||||
level.y ?= 10 + 80 * Math.random()
|
||||
level.locked = index > 0 and not me.ownsLevel level.original
|
||||
level.locked = not me.ownsLevel level.original
|
||||
window.levelUnlocksNotWorking = true if level.locked and level.id is @nextLevel # Temporary
|
||||
level.locked = false if window.levelUnlocksNotWorking # Temporary; also possible in HeroVictoryModal
|
||||
level.locked = false if @levelStatusMap[level.id] in ['started', 'complete']
|
||||
|
@ -138,12 +139,17 @@ module.exports = class WorldMapView extends RootView
|
|||
level.color = 'rgb(255, 80, 60)'
|
||||
if level.requiresSubscription
|
||||
level.color = 'rgb(80, 130, 200)'
|
||||
level.hidden = level.locked or level.disabled
|
||||
|
||||
# put lower levels in last, so in the world map they layer over one another properly.
|
||||
context.campaign.levels = (_.sortBy context.campaign.levels, 'y').reverse()
|
||||
|
||||
context.levelStatusMap = @levelStatusMap
|
||||
context.levelPlayCountMap = @levelPlayCountMap
|
||||
context.isIPadApp = application.isIPadApp
|
||||
context.mapType = _.string.slugify @terrain
|
||||
context.nextLevel = @nextLevel
|
||||
context.forestIsAvailable = @startedForestLevel or '541b67f71ccc8eaae19f3c62' in (me.get('earned')?.levels or [])
|
||||
context.forestIsAvailable = @startedForestLevel or (Level.levels['defense-of-plainswood'] in (me.get('earned')?.levels or []))
|
||||
context.requiresSubscription = @requiresSubscription
|
||||
context
|
||||
|
||||
|
@ -345,7 +351,7 @@ dungeon = [
|
|||
name: 'Dungeons of Kithgard'
|
||||
type: 'hero'
|
||||
id: 'dungeons-of-kithgard'
|
||||
original: '528110f30268d018e3000001'
|
||||
original: '5411cb3769152f1707be029c'
|
||||
description: 'Grab the gem, but touch nothing else. Start here.'
|
||||
x: 14
|
||||
y: 15.5
|
||||
|
|
|
@ -9,6 +9,8 @@ ThangType = require 'models/ThangType'
|
|||
LadderSubmissionView = require 'views/play/common/LadderSubmissionView'
|
||||
AudioPlayer = require 'lib/AudioPlayer'
|
||||
CampaignOptions = require 'lib/CampaignOptions'
|
||||
User = require 'models/User'
|
||||
utils = require 'core/utils'
|
||||
|
||||
module.exports = class HeroVictoryModal extends ModalView
|
||||
id: 'hero-victory-modal'
|
||||
|
@ -36,6 +38,8 @@ module.exports = class HeroVictoryModal extends ModalView
|
|||
@listenToOnce @achievements, 'sync', @onAchievementsLoaded
|
||||
@readyToContinue = false
|
||||
@waitingToContinueSince = new Date()
|
||||
@previousXP = me.get 'points', true
|
||||
@previousLevel = me.level()
|
||||
Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'victory'
|
||||
|
||||
destroy: ->
|
||||
|
@ -47,6 +51,7 @@ module.exports = class HeroVictoryModal extends ModalView
|
|||
super()
|
||||
|
||||
onAchievementsLoaded: ->
|
||||
@$el.toggleClass 'full-achievements', @achievements.models.length is 3
|
||||
thangTypeOriginals = []
|
||||
achievementIDs = []
|
||||
for achievement in @achievements.models
|
||||
|
@ -133,6 +138,7 @@ module.exports = class HeroVictoryModal extends ModalView
|
|||
return unless @supermodel.finished()
|
||||
@playSelectionSound hero, true for original, hero of @thangTypes # Preload them
|
||||
@updateSavingProgressStatus()
|
||||
@updateXPBars 0
|
||||
@$el.find('#victory-header').delay(250).queue(->
|
||||
$(@).removeClass('out').dequeue()
|
||||
Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'victory-title-appear' # TODO: actually add this
|
||||
|
@ -196,7 +202,8 @@ module.exports = class HeroVictoryModal extends ModalView
|
|||
totalXP = @totalXPAnimated + newXP
|
||||
if totalXP isnt @lastTotalXP
|
||||
panel.textEl.text('+' + newXP)
|
||||
@XPEl.text('+' + totalXP)
|
||||
@XPEl.text(totalXP)
|
||||
@updateXPBars(totalXP)
|
||||
xpTrigger = 'xp-' + (totalXP % 6) # 6 xp sounds
|
||||
Backbone.Mediator.publish 'audio-player:play-sound', trigger: xpTrigger, volume: 0.5 + ratio / 2
|
||||
@lastTotalXP = totalXP
|
||||
|
@ -205,7 +212,7 @@ module.exports = class HeroVictoryModal extends ModalView
|
|||
totalGems = @totalGemsAnimated + newGems
|
||||
if totalGems isnt @lastTotalGems
|
||||
panel.textEl.text('+' + newGems)
|
||||
@gemEl.text('+' + totalGems)
|
||||
@gemEl.text(totalGems)
|
||||
gemTrigger = 'gem-' + (parseInt(panel.number * ratio) % 4) # 4 gem sounds
|
||||
Backbone.Mediator.publish 'audio-player:play-sound', trigger: gemTrigger, volume: 0.5 + ratio / 2
|
||||
@lastTotalGems = totalGems
|
||||
|
@ -237,6 +244,32 @@ module.exports = class HeroVictoryModal extends ModalView
|
|||
--t
|
||||
-0.5 * (t * (t - 2) - 1)
|
||||
|
||||
updateXPBars: (achievedXP) ->
|
||||
previousXP = @previousXP
|
||||
previousLevel = @previousLevel
|
||||
|
||||
currentXP = previousXP + achievedXP
|
||||
currentLevel = User.levelFromExp currentXP
|
||||
currentLevelXP = User.expForLevel currentLevel
|
||||
|
||||
nextLevel = currentLevel + 1
|
||||
nextLevelXP = User.expForLevel nextLevel
|
||||
|
||||
leveledUp = currentLevel > previousLevel
|
||||
totalXPNeeded = nextLevelXP - currentLevelXP
|
||||
alreadyAchievedPercentage = 100 * (previousXP - currentLevelXP) / totalXPNeeded
|
||||
alreadyAchievedPercentage = 0 if alreadyAchievedPercentage < 0 # In case of level up
|
||||
if leveledUp
|
||||
newlyAchievedPercentage = 100 * (currentXP - currentLevelXP) / totalXPNeeded
|
||||
else
|
||||
newlyAchievedPercentage = 100 * achievedXP / totalXPNeeded
|
||||
|
||||
xpEl = $('#xp-wrapper')
|
||||
xpBarJustEarned = xpEl.find('.xp-bar-already-achieved').css('width', alreadyAchievedPercentage + '%')
|
||||
xpBarTotal = xpEl.find('.xp-bar-total').css('width', (alreadyAchievedPercentage + newlyAchievedPercentage) + '%')
|
||||
levelLabel = xpEl.find('.level')
|
||||
utils.replaceText levelLabel, currentLevel
|
||||
|
||||
endSequentialAnimations: ->
|
||||
clearInterval @sequentialAnimationInterval
|
||||
@animationComplete = true
|
||||
|
|
|
@ -446,7 +446,7 @@ module.exports = class InventoryModal extends ModalView
|
|||
patchSession = patchMe = false
|
||||
patchSession ||= not _.isEqual inventory, sessionHeroConfig.inventory
|
||||
sessionHeroConfig.inventory = inventory
|
||||
if hero = @selectedHero.get('original')
|
||||
if hero = @selectedHero?.get('original')
|
||||
patchSession ||= not _.isEqual hero, sessionHeroConfig.thangType
|
||||
sessionHeroConfig.thangType = hero
|
||||
patchMe ||= not _.isEqual inventory, lastHeroConfig.inventory
|
||||
|
@ -489,13 +489,14 @@ module.exports = class InventoryModal extends ModalView
|
|||
@itemGroups.lockedItems.remove(item)
|
||||
# Redo all item sorting to make sure that we don't clobber state changes since last render.
|
||||
equipped = _.values @getCurrentEquipmentConfig()
|
||||
@sortItem(item, equipped) for item in @items.models
|
||||
@sortItem(otherItem, equipped) for otherItem in @items.models
|
||||
@renderSelectors('#unequipped', '#gems-count')
|
||||
|
||||
@requireLevelEquipment()
|
||||
@delegateEvents()
|
||||
@setUpDraggableEventsForAvailableEquipment()
|
||||
@itemDetailsView.setItem(item)
|
||||
@onScrollUnequipped()
|
||||
|
||||
Backbone.Mediator.publish 'store:item-purchased', item: item, itemSlug: item.get('slug')
|
||||
else
|
||||
|
@ -550,6 +551,7 @@ module.exports = class InventoryModal extends ModalView
|
|||
gender = if @selectedHero?.get('slug') in heroGenders.male then 'male' else 'female'
|
||||
@$el.find('#hero-image, #hero-image-hair, #hero-image-head, #hero-image-thumb').removeClass().addClass "#{gender} #{heroClass}"
|
||||
equipment = @getCurrentEquipmentConfig()
|
||||
@onScrollUnequipped()
|
||||
return unless _.size(equipment) and @supermodel.finished()
|
||||
@removeDollImages()
|
||||
slotsWithImages = []
|
||||
|
@ -562,7 +564,6 @@ module.exports = class InventoryModal extends ModalView
|
|||
@$el.find('#hero-image-thumb').toggle not ('gloves' in slotsWithImages)
|
||||
|
||||
@equipment = @options.equipment = equipment
|
||||
@onScrollUnequipped()
|
||||
|
||||
removeDollImages: ->
|
||||
@$el.find('.doll-image').remove()
|
||||
|
|
|
@ -87,7 +87,6 @@ module.exports = class PlayHeroesModal extends ModalView
|
|||
@onHeroChanged direction: null, relatedTarget: @$el.find('.hero-item')[heroIndex]
|
||||
@$el.find('.hero-stat').tooltip()
|
||||
@buildCodeLanguages()
|
||||
Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'game-menu-open', volume: 1
|
||||
|
||||
rerenderFooter: ->
|
||||
@formatHero @visibleHero
|
||||
|
|