Merge branch 'master' into production

This commit is contained in:
Nick Winter 2014-12-07 15:16:12 -08:00
commit 7757f1506c
35 changed files with 498 additions and 260 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View file

@ -376,7 +376,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
skill_docs: skill_docs:
# writable: "writable" # Hover over "attack" in Your Skills while playing a level to see most of this # 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_name: "Name"
action_cooldown: "Benötigt" action_cooldown: "Benötigt"
action_specific_cooldown: "Cooldown" action_specific_cooldown: "Cooldown"
@ -647,7 +647,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
archmage_attribute_1_pref: "Kentnisse in " 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_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." 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_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_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 " join_desc_3: ", oder finde uns in unserem "
@ -809,10 +809,10 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
recently_played: "Kürzlich gespielt" recently_played: "Kürzlich gespielt"
no_recent_games: "Keine Spiele in den letzten zwei Wochen gespielt." no_recent_games: "Keine Spiele in den letzten zwei Wochen gespielt."
payments: "Zahlungen" payments: "Zahlungen"
# service_apple: "Apple" service_apple: "Apple"
# service_web: "Web" service_web: "Web"
paid_on: "Gezahlt am" paid_on: "Gezahlt am"
# service: "Service" service: "Service"
price: "Preis" price: "Preis"
gems: "Edelsteine" gems: "Edelsteine"
status_subscribed: "Du hast momentan ein Abo für $9.99 USD pro Monat. Danke für deine unterstützung!" 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_title: "Grafiken/Musik - Creative Commons "
art_description_prefix: "Gemeinsamer Inhalt ist verfügbar unter" art_description_prefix: "Gemeinsamer Inhalt ist verfügbar unter"
cc_license_url: "Creative Commons Attribution 4.0 International License" 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_music: "Musik"
art_sound: "Sound" art_sound: "Sound"
art_artwork: "Grafiken" art_artwork: "Grafiken"
art_sprites: "Sprites" 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_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:" # 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." # 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_title: "Rechte vorbehalten"
rights_desc: "Alle Rechte vorbehalten für die Level selbst. Dies beinhaltet" rights_desc: "Alle Rechte vorbehalten für die Level selbst. Dies beinhaltet"
rights_scripts: "Skripte" rights_scripts: "Skripte"

View file

@ -222,6 +222,7 @@
reload_title: "Reload All Code?" reload_title: "Reload All Code?"
reload_really: "Are you sure you want to reload this level back to the beginning?" reload_really: "Are you sure you want to reload this level back to the beginning?"
reload_confirm: "Reload All" reload_confirm: "Reload All"
victory: "Victory"
victory_title_prefix: "" victory_title_prefix: ""
victory_title_suffix: " Complete" victory_title_suffix: " Complete"
victory_sign_up: "Sign Up to Save Progress" victory_sign_up: "Sign Up to Save Progress"
@ -234,6 +235,8 @@
victory_review: "Tell us more!" # Only in old-style levels. victory_review: "Tell us more!" # Only in old-style levels.
victory_hour_of_code_done: "Are You Done?" victory_hour_of_code_done: "Are You Done?"
victory_hour_of_code_done_yes: "Yes, I'm finished with my Hour of Code™!" 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" guide_title: "Guide"
tome_minion_spells: "Your Minions' Spells" # Only in old-style levels. tome_minion_spells: "Your Minions' Spells" # Only in old-style levels.
tome_read_only_spells: "Read-Only Spells" # Only in old-style levels. tome_read_only_spells: "Read-Only Spells" # Only in old-style levels.

View file

@ -1,4 +1,4 @@
module.exports = nativeDescription: "українська мова", englishDescription: "Ukrainian", translation: module.exports = nativeDescription: "Українська", englishDescription: "Ukrainian", translation:
home: home:
slogan: "Навчіться програмувати, граючи у гру" slogan: "Навчіться програмувати, граючи у гру"
no_ie: "На жаль, CodeCombat не працює в IE8 та старіших версіях!" # Warning that only shows up in IE8 and older no_ie: "На жаль, CodeCombat не працює в IE8 та старіших версіях!" # Warning that only shows up in IE8 and older
@ -31,7 +31,7 @@ module.exports = nativeDescription: "українська мова", englishDesc
about: "Про нас" about: "Про нас"
contact: "Контакти" contact: "Контакти"
twitter_follow: "Фоловити" twitter_follow: "Фоловити"
teachers: "Учителі" teachers: "Учителям"
modal: modal:
close: "Закрити" close: "Закрити"
@ -54,7 +54,7 @@ module.exports = nativeDescription: "українська мова", englishDesc
players: "гравці" # Hover over a level on /play players: "гравці" # Hover over a level on /play
hours_played: "годин зіграно" # Hover over a level on /play hours_played: "годин зіграно" # Hover over a level on /play
items: "Предмети" # Tooltip on item shop button from /play items: "Предмети" # Tooltip on item shop button from /play
unlock: "Розблокувати" # For purchasing items and heroes unlock: "Відкрити" # For purchasing items and heroes
confirm: "Підтвердити" confirm: "Підтвердити"
owned: "у власності" # For items you own owned: "у власності" # For items you own
locked: "Заблоковано" locked: "Заблоковано"
@ -97,7 +97,7 @@ module.exports = nativeDescription: "українська мова", englishDesc
campaign_classic_algorithms_description: "... у якій ви вивчите найпопулярніші алгоритми комп’ютерних наук." campaign_classic_algorithms_description: "... у якій ви вивчите найпопулярніші алгоритми комп’ютерних наук."
login: login:
sign_up: "створити акаунт" sign_up: "створення акаунту"
log_in: "Увійти" log_in: "Увійти"
logging_in: "Вхід в акаунт" logging_in: "Вхід в акаунт"
log_out: "Вийти" log_out: "Вийти"
@ -171,7 +171,7 @@ module.exports = nativeDescription: "українська мова", englishDesc
when: "Коли" when: "Коли"
opponent: "Противник" opponent: "Противник"
rank: "Звання" rank: "Звання"
score: "Рахунок" score: "Результат"
win: "Перемога" win: "Перемога"
loss: "Поразка" loss: "Поразка"
tie: "Нічия" tie: "Нічия"
@ -260,7 +260,7 @@ module.exports = nativeDescription: "українська мова", englishDesc
keyboard_shortcuts: "Клавіатурні скорочення" keyboard_shortcuts: "Клавіатурні скорочення"
loading_ready: "Готово!" loading_ready: "Готово!"
loading_start: "Розпочати рівень" loading_start: "Розпочати рівень"
problem_alert_title: "Виправте свій код" problem_alert_title: "Виправте код"
time_current: "Зараз:" time_current: "Зараз:"
time_total: "Найбільше:" time_total: "Найбільше:"
time_goto: "Перейти до:" time_goto: "Перейти до:"
@ -293,7 +293,7 @@ module.exports = nativeDescription: "українська мова", englishDesc
tip_talk_is_cheap: "Розмови ніщо. Покажи мені код. - Лінус Торвальдс" tip_talk_is_cheap: "Розмови ніщо. Покажи мені код. - Лінус Торвальдс"
tip_first_language: "Найбільш катастрофічною річчю яку ви коли-небудь вчили є Ваша перша мова програмування. - Алан Кей" tip_first_language: "Найбільш катастрофічною річчю яку ви коли-небудь вчили є Ваша перша мова програмування. - Алан Кей"
tip_hardware_problem: "П: Скільки програмістів треба аби замінити лампочку? В: Жодного, це апаратна проблема." 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_premature_optimization: "Передчасна оптимізація корінь усього зла. - Дональд Кнут"
tip_brute_force: "Якщо ви сумніваєтесь, використовуйте перебір - Кен Томсон" tip_brute_force: "Якщо ви сумніваєтесь, використовуйте перебір - Кен Томсон"
tip_extrapolation: "Існує 2 типи людей: які можуть екстраполюватись від неповних даних..." tip_extrapolation: "Існує 2 типи людей: які можуть екстраполюватись від неповних даних..."
@ -319,11 +319,11 @@ module.exports = nativeDescription: "українська мова", englishDesc
equipped_item: "Екіпіровано" equipped_item: "Екіпіровано"
available_item: "Доступно" available_item: "Доступно"
restricted_title: "Обмежено" restricted_title: "Обмежено"
should_equip: "(екіпірування подвійним кліком)" should_equip: "(предмети одягаються подвійним кліком)"
equipped: "(екіпіровано)" equipped: "(екіпіровано)"
locked: "(заблоковано)" locked: "(заблоковано)"
restricted: "(обмежено для цього рівні)" restricted: "(обмежено для цього рівня)"
equip: "Екіпірувати" equip: "Одягнути"
unequip: "Зняти" unequip: "Зняти"
buy_gems: buy_gems:
@ -345,8 +345,8 @@ module.exports = nativeDescription: "українська мова", englishDesc
items: "Більше 250-ти бонусних предметів!" items: "Більше 250-ти бонусних предметів!"
parents: "Батькам" parents: "Батькам"
parents_title: "Ваша дитина вчитиметься програмувати." 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_blurb1: "Разом з CodeCombat ваша дитина писатиме реальний код. Почне з простих команд та поступово буде розвиватись до складніших тем."
# parents_blurb2: "For $9.99 USD/mo, they get new challenges every week and personal email support from professional programmers." parents_blurb2: "За 9.99$ на місяць, вона отримуватиме нові завдання щотижня та персональні листи підтримки від професійних програмістів."
parents_blurb3: "Жодного ризику: 100% гарантія повернення грошей, легке скасування абонементу одним кліком." parents_blurb3: "Жодного ризику: 100% гарантія повернення грошей, легке скасування абонементу одним кліком."
subscribe_button: "Взяти абонемент" subscribe_button: "Взяти абонемент"
stripe_description: "Щомісячний абонемент" stripe_description: "Щомісячний абонемент"
@ -366,9 +366,9 @@ module.exports = nativeDescription: "українська мова", englishDesc
io_blurb: "Проста але дивна." io_blurb: "Проста але дивна."
status: "Статус" status: "Статус"
weapons: "Зброя" weapons: "Зброя"
weapons_warrior: "Мечі - ближній бій, жодної магії" weapons_warrior: "Мечі ближній бій, жодної магії"
weapons_ranger: "Арбалети, стрілецька зброя - дистанційна атака, жодної магії" weapons_ranger: "Стрілецька зброя дистанційна атака, жодної магії"
weapons_wizard: "Жезли, чарівні палички - дистанційна атака, магія" weapons_wizard: "Жезли дистанційна атака, магія"
attack: "Ушкодження" # Can also translate as "Attack" attack: "Ушкодження" # Can also translate as "Attack"
health: "Здоров’я" health: "Здоров’я"
speed: "Швидкість" speed: "Швидкість"
@ -391,12 +391,12 @@ module.exports = nativeDescription: "українська мова", englishDesc
action_radius: "Радіус" action_radius: "Радіус"
action_duration: "Тривалість" action_duration: "Тривалість"
example: "Приклад" example: "Приклад"
ex: "пр" # Abbreviation of "example" ex: "типу" # Abbreviation of "example"
current_value: "Поточне значення" current_value: "Поточне значення"
default_value: "Типове значення" default_value: "Типове значення"
parameters: "Параметри" parameters: "Параметри"
returns: "Повертає" returns: "Повертає"
granted_by: "Забезпечується" granted_by: "Забезпечує"
save_load: save_load:
granularity_saved_games: "Збережено" granularity_saved_games: "Збережено"
@ -412,20 +412,20 @@ module.exports = nativeDescription: "українська мова", englishDesc
editor_config: "Редактор налашт." editor_config: "Редактор налашт."
editor_config_title: "Редактор налаштувань" editor_config_title: "Редактор налаштувань"
editor_config_level_language_label: "Мова цього рівня" 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_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_label: "Комбінації клавіш"
editor_config_keybindings_default: "Типове (Ace)" editor_config_keybindings_default: "Типові (Ace)"
editor_config_keybindings_description: "Додайте додаткові скорочення відомі Вам із загальних редакторів." editor_config_keybindings_description: "Додайте додаткові скорочення відомі Вам із інших редакторів."
editor_config_livecompletion_label: "Автодоповнення в реальному часі" editor_config_livecompletion_label: "Автодоповнення в реальному часі"
editor_config_livecompletion_description: "Показує поради автодоповнення під час друку." editor_config_livecompletion_description: "Показує поради автодоповнення під час друку."
editor_config_invisibles_label: "Показати приховане" editor_config_invisibles_label: "Показувати приховане"
editor_config_invisibles_description: "Відображення прихованого, такого як відступи та знаки табуляції." editor_config_invisibles_description: "Відображення прихованого, кшталту відступів та знаків табуляції."
editor_config_indentguides_label: "Показати відступи провідників" editor_config_indentguides_label: "Показувати лінії відступів"
editor_config_indentguides_description: "Відображення вертикальних ліній, щоб краще бачити відстань." editor_config_indentguides_description: "Відображення вертикальних ліній відступів, щоби краще бачити відстань."
editor_config_behaviors_label: "Розумні привички" editor_config_behaviors_label: "Розумні кавички"
editor_config_behaviors_description: "Автозаповнення дужок, фігурних дужок, та лапок." editor_config_behaviors_description: "Автоматичне закриття дужок та лапок."
about: about:
why_codecombat: "Чому CodeCombat?" why_codecombat: "Чому CodeCombat?"
@ -437,12 +437,12 @@ module.exports = nativeDescription: "українська мова", englishDesc
why_paragraph_2_suffix: "Ось чому CodeCombat - мультиплеєрна гра, а не гейміфікований курс уроків. Ми не зупинимося, доки ви не включитеся на повну, і це чудово. " why_paragraph_2_suffix: "Ось чому CodeCombat - мультиплеєрна гра, а не гейміфікований курс уроків. Ми не зупинимося, доки ви не включитеся на повну, і це чудово. "
why_paragraph_3: "Якщо ви плануєте бути залежним від якоїсь гри, оберіть цю - і перетворіться на одного з чарівників ери інформаційних технологій." why_paragraph_3: "Якщо ви плануєте бути залежним від якоїсь гри, оберіть цю - і перетворіться на одного з чарівників ери інформаційних технологій."
press_title: "Блоґерам/Пресі" 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_prefix: "Хочете написати про нас? Не соромтесь завантажувати всі наші ресурси які включено до нашого "
# press_paragraph_1_link: "press packet" press_paragraph_1_link: "набору-для-преси"
press_paragraph_1_suffix: ". Всі логотипи та зображення можна використовувати не зв’язуючись з нами напряму." press_paragraph_1_suffix: ". Всі логотипи та зображення можна використовувати не зв’язуючись з нами напряму."
team: "Команда" team: "Команда"
george_title: "Виконавчий директор" george_title: "Виконавчий директор"
# george_blurb: "Businesser" george_blurb: "Бізнесмен"
scott_title: "Програміст" scott_title: "Програміст"
scott_blurb: "Розумник" scott_blurb: "Розумник"
nick_title: "Програміст" nick_title: "Програміст"
@ -450,7 +450,7 @@ module.exports = nativeDescription: "українська мова", englishDesc
michael_title: "Програміст" michael_title: "Програміст"
michael_blurb: "Сисадмін" michael_blurb: "Сисадмін"
matt_title: "Програміст" matt_title: "Програміст"
# matt_blurb: "Bicyclist" matt_blurb: "Dелосипедист"
versions: versions:
save_version_title: "Зберегти нову версію" save_version_title: "Зберегти нову версію"
@ -486,13 +486,13 @@ module.exports = nativeDescription: "українська мова", englishDesc
new_password: "Новий пароль" new_password: "Новий пароль"
new_password_verify: "Підтвердження паролю" new_password_verify: "Підтвердження паролю"
email_subscriptions: "Email-підписки" email_subscriptions: "Email-підписки"
# email_subscriptions_none: "No Email Subscriptions." email_subscriptions_none: "Жодних підписок."
email_announcements: "Оголошення" email_announcements: "Оголошення"
email_announcements_description: "Отримувати електронні листи про останні новини CodeCombat." email_announcements_description: "Отримувати електронні листи про останні новини CodeCombat."
email_notifications: "Сповіщення" email_notifications: "Сповіщення"
# email_notifications_summary: "Controls for personalized, automatic email notifications related to your CodeCombat activity." # email_notifications_summary: "Controls for personalized, automatic email notifications related to your CodeCombat activity."
email_any_notes: "Будь-які сповіщення" email_any_notes: "Будь-які сповіщення"
# email_any_notes_description: "Disable to stop all activity notification emails." email_any_notes_description: "Вимкніть аби заборонити сповіщення на email."
email_news: "Новини" email_news: "Новини"
email_recruit_notes: "Ваканція роботи" email_recruit_notes: "Ваканція роботи"
# email_recruit_notes_description: "If you play really well, we may contact you about getting you a (better) job." # 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_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." # article_editor_suffix: "and help CodeCombat players get the most out of their playtime."
find_us: "Шукайте нас на цих сайтах" find_us: "Шукайте нас на цих сайтах"
# social_blog: "Read the CodeCombat blog on Sett" social_blog: "Читайте наш блоґ на Sett"
# social_discource: "Join the discussion on our Discourse forum" social_discource: "Приєднайте до обговорення на форумі"
# social_facebook: "Like CodeCombat on Facebook" social_facebook: "Поставте лайк CodeCombat на Facebook"
social_twitter: "Слідкувати за CodeCombat у Twitter" social_twitter: "Слідкуйте за CodeCombat у Twitter"
social_gplus: "Приєднатись до CodeCombat у Google+" social_gplus: "Приєднайтесь до CodeCombat у Google+"
# social_hipchat: "Chat with us in the public CodeCombat HipChat room" # social_hipchat: "Chat with us in the public CodeCombat HipChat room"
contribute_to_the_project: "Прийняти участь в розробці" contribute_to_the_project: "Прийняти участь в розробці"
@ -700,12 +700,12 @@ module.exports = nativeDescription: "українська мова", englishDesc
# diplomat_launch_url: "launch in October" # 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_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_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_prefix: "Ви можете почати переклад рівнів перейшовши на нашу "
# diplomat_i18n_page: "translations page" diplomat_i18n_page: "сторінку перекладу"
# diplomat_i18n_page_suffix: ", or our interface and website on GitHub." diplomat_i18n_page_suffix: ", або інтерфейсу та сайту перейшовши на GitHub."
diplomat_join_pref_github: "Знайдіть файл своєї мови " diplomat_join_pref_github: "Знайдіть файл своєї мови "
diplomat_github_url: "на 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: "Дізнатися, як стати Дипломатом" more_about_diplomat: "Дізнатися, як стати Дипломатом"
diplomat_subscribe_desc: "Отримувати листи про розробки i18n та нові рівні для перекладу." 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." # 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: "Наші перекладачі - Дипломати:" translating_diplomats: "Наші перекладачі - Дипломати:"
helpful_ambassadors: "Наші незамінні Посланці:" helpful_ambassadors: "Наші незамінні Посланці:"
# ladder: ladder:
# please_login: "Please log in first before playing a ladder game." # please_login: "Please log in first before playing a ladder game."
# my_matches: "My Matches" my_matches: "Мої поєдинки"
# simulate: "Simulate" # simulate: "Simulate"
# simulation_explanation: "By simulating games you can get your game ranked faster!" # simulation_explanation: "By simulating games you can get your game ranked faster!"
# simulate_games: "Simulate Games!" # simulate_games: "Simulate Games!"
@ -734,17 +734,17 @@ module.exports = nativeDescription: "українська мова", englishDesc
# games_simulated_by: "Games simulated by you:" # games_simulated_by: "Games simulated by you:"
# games_simulated_for: "Games simulated for you:" # games_simulated_for: "Games simulated for you:"
# games_simulated: "Games simulated" # games_simulated: "Games simulated"
# games_played: "Games played" games_played: "Ігор зіграно"
# ratio: "Ratio" ratio: "Співвідношення"
# leaderboard: "Leaderboard" leaderboard: "Таблиця лідерів"
# battle_as: "Battle as " battle_as: "Бій за "
# summary_your: "Your " summary_your: "Твої "
# summary_matches: "Matches - " summary_matches: "Поєдинки - "
# summary_wins: " Wins, " summary_wins: " Перемоги, "
# summary_losses: " Losses" summary_losses: " Поразки"
# rank_no_code: "No New Code to Rank" # rank_no_code: "No New Code to Rank"
# rank_my_game: "Rank My Game!" # rank_my_game: "Rank My Game!"
# rank_submitting: "Submitting..." rank_submitting: "Відправлення..."
# rank_submitted: "Submitted for Ranking" # rank_submitted: "Submitted for Ranking"
# rank_failed: "Failed to Rank" # rank_failed: "Failed to Rank"
# rank_being_ranked: "Game Being Ranked" # 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." # 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_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." # no_ranked_matches_post: " team! Play against some competitors and then come back here to get your game ranked."
# choose_opponent: "Choose an Opponent" choose_opponent: "Оберіть противника"
# select_your_language: "Select your language!" select_your_language: "Оберіть мову!"
# tutorial_play: "Play Tutorial" # tutorial_play: "Play Tutorial"
# tutorial_recommended: "Recommended if you've never played before" tutorial_recommended: "Рекомендовано, якщо ви взагалі раніше не грали"
# tutorial_skip: "Skip Tutorial" # tutorial_skip: "Skip Tutorial"
# tutorial_not_sure: "Not sure what's going on?" # tutorial_not_sure: "Not sure what's going on?"
# tutorial_play_first: "Play the Tutorial first." # tutorial_play_first: "Play the Tutorial first."
# simple_ai: "Simple AI" simple_ai: "Простий ШІ"
# warmup: "Warmup" # warmup: "Warmup"
# friends_playing: "Friends Playing" # friends_playing: "Friends Playing"
# log_in_for_friends: "Log in to play with your friends!" # log_in_for_friends: "Log in to play with your friends!"
# social_connect_blurb: "Connect and play against your friends!" # social_connect_blurb: "Connect and play against your friends!"
# invite_friends_to_battle: "Invite your friends to join you in battle!" # invite_friends_to_battle: "Invite your friends to join you in battle!"
# fight: "Fight!" fight: "В бій!"
# watch_victory: "Watch your victory" # watch_victory: "Watch your victory"
# defeat_the: "Defeat the" # defeat_the: "Defeat the"
# tournament_ends: "Tournament ends" # 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_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" # tournament_blurb_blog: "on our blog"
# rules: "Rules" # rules: "Rules"
# winners: "Winners" winners: "Переможці"
user: user:
stats: "Статистика" stats: "Статистика"
@ -794,42 +794,42 @@ module.exports = nativeDescription: "українська мова", englishDesc
favorite_postfix: "." favorite_postfix: "."
achievements: achievements:
# last_earned: "Last Earned" last_earned: "Останні отримані"
# amount_achieved: "Amount" amount_achieved: "Кількість"
achievement: "Досягнення" achievement: "Досягнення"
# category_contributor: "Contributor" category_contributor: "Співучасник"
# category_ladder: "Ladder" category_ladder: "Драбина"
category_level: "Рівень" category_level: "Рівень"
# category_miscellaneous: "Miscellaneous" category_miscellaneous: "Різне"
category_levels: "Рівні" category_levels: "Рівні"
# category_undefined: "Uncategorized" category_undefined: "без категорії"
# current_xp_prefix: "" current_xp_prefix: ""
current_xp_postfix: " загалом" current_xp_postfix: " загалом"
# new_xp_prefix: "" new_xp_prefix: ""
# new_xp_postfix: " earned" new_xp_postfix: " зароблено"
# left_xp_prefix: "" left_xp_prefix: ""
# left_xp_infix: " until level " left_xp_infix: " до рівня "
# left_xp_postfix: "" left_xp_postfix: ""
account: account:
recently_played: "Нещодавні ігри" recently_played: "Нещодавні ігри"
# no_recent_games: "No games played during the past two weeks." no_recent_games: "На протязі останніх двох тижнів не зіграно жодної гри."
# payments: "Payments" payments: "Платежі"
service_apple: "Apple" service_apple: "Apple"
service_web: "Веб" service_web: "Веб"
# paid_on: "Paid On" paid_on: "Сплачено"
service: "Сервіс" service: "Сервіс"
price: "Ціна" price: "Ціна"
gems: "Cамоцвіти" gems: "Cамоцвіти"
# status_subscribed: "You're currently subscribed at $9.99 USD/mo. Thanks for your support!" # 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_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: loading_error:
could_not_load: "Помилка завантаження з сервера" could_not_load: "Помилка завантаження з сервера"
connection_failure: "Помилка з’єднання." connection_failure: "Помилка з’єднання."
unauthorized: "Вам потрібно увійти. Ви вимкнули куки?" unauthorized: "Вам потрібно увійти. Ви вимкнули куки?"
forbidden: "Недостатнь прав." forbidden: "Недостатньо прав."
not_found: "Не знайдено." not_found: "Не знайдено."
not_allowed: "Недозволений метод." not_allowed: "Недозволений метод."
timeout: "Час очікування сервера минув." timeout: "Час очікування сервера минув."
@ -876,10 +876,10 @@ module.exports = nativeDescription: "українська мова", englishDesc
# user_remark: "User Remark" # user_remark: "User Remark"
# user_remarks: "User Remarks" # user_remarks: "User Remarks"
versions: "Версії" versions: "Версії"
# items: "Items" items: "Предмети"
heroes: "Герої" heroes: "Герої"
# wizard: "Wizard" # wizard: "Wizard"
# achievement: "Achievement" achievement: "Досягнення"
# clas: "CLAs" # clas: "CLAs"
# play_counts: "Play Counts" # play_counts: "Play Counts"
feedback: "Відгук" feedback: "Відгук"
@ -898,13 +898,13 @@ module.exports = nativeDescription: "українська мова", englishDesc
multiplayer: multiplayer:
multiplayer_title: "Налаштування мультиплеєра" # We'll be changing this around significantly soon. Until then, it's not important to translate. multiplayer_title: "Налаштування мультиплеєра" # We'll be changing this around significantly soon. Until then, it's not important to translate.
# multiplayer_toggle: "Enable multiplayer" multiplayer_toggle: "Увімкнути мультиплеєр"
# multiplayer_toggle_description: "Allow others to join your game." multiplayer_toggle_description: "Дозволити іншим приєднуватись до гри."
multiplayer_link_description: "Поділіться цим посиланням з будь-ким, щоб вони приєдналися до вас." multiplayer_link_description: "Поділіться цим посиланням з будь-ким, щоб вони приєдналися до вас."
multiplayer_hint_label: "Підказка:" multiplayer_hint_label: "Підказка:"
multiplayer_hint: "Натисніть на посилання, щоб обрати всіх, та натисніть Apple-C або Ctrl-C, щоб скопіювати посилання." multiplayer_hint: "Натисніть на посилання, щоб обрати всіх, та натисніть Apple-C або Ctrl-C, щоб скопіювати посилання."
multiplayer_coming_soon: "Скоро - більше можливостей у мультиплеєрі!" multiplayer_coming_soon: "Незабаром - більше можливостей у мультиплеєрі!"
# multiplayer_sign_in_leaderboard: "Sign in or create an account and get your solution on the leaderboard." multiplayer_sign_in_leaderboard: "Увійдіть або створіть екаунт, аби помістити своє рішення до таблиці лідерів."
legal: legal:
page_title: "Юридична інформація" page_title: "Юридична інформація"
@ -915,7 +915,7 @@ module.exports = nativeDescription: "українська мова", englishDesc
archmage_wiki_url: "нашу wiki для Архімагів," archmage_wiki_url: "нашу wiki для Архімагів,"
opensource_description_suffix: "щоб побачити списки ПЗ, яке робить цю гру можливою." opensource_description_suffix: "щоб побачити списки ПЗ, яке робить цю гру можливою."
practices_title: "Шановні найкращі гравці" practices_title: "Шановні найкращі гравці"
# practices_description: "These are our promises to you, the player, in slightly less legalese." practices_description: "Це наші обіцянки до тебе, гравцю, дещо менш юридичною мовою."
privacy_title: "Конфіденційність" privacy_title: "Конфіденційність"
privacy_description: "Ми не розповсюджуємо вашу персональну інформацію." privacy_description: "Ми не розповсюджуємо вашу персональну інформацію."
security_title: "Безпека" security_title: "Безпека"
@ -961,24 +961,24 @@ module.exports = nativeDescription: "українська мова", englishDesc
nutshell_description: "Будь-які ресурси котрі ми надаємо в редакторі рівнів є безкоштовними для використання за вашим бажанням для створення рівнів. Але ми залишаємо за собою право обмежувати розповсюдження самих рівнів(котрі були створені на codecombat.com), тому вони зможуть заплатити в майбутньому, якщо в кінцевому результаті таке станеться." nutshell_description: "Будь-які ресурси котрі ми надаємо в редакторі рівнів є безкоштовними для використання за вашим бажанням для створення рівнів. Але ми залишаємо за собою право обмежувати розповсюдження самих рівнів(котрі були створені на codecombat.com), тому вони зможуть заплатити в майбутньому, якщо в кінцевому результаті таке станеться."
canonical: "Англійська версія цього документа є остаточною та канонічною версією. Якщо тут є будь-які невідповідності в перекладі, англійська версія документа є пріоритетною." canonical: "Англійська версія цього документа є остаточною та канонічною версією. Якщо тут є будь-які невідповідності в перекладі, англійська версія документа є пріоритетною."
# ladder_prizes: ladder_prizes:
# title: "Tournament Prizes" # This section was for an old tournament and doesn't need new translations now. title: "Нагороди за турнір" # This section was for an old tournament and doesn't need new translations now.
# blurb_1: "These prizes will be awarded according to" blurb_1: "Цими призами буде нагороджено залежно від"
# blurb_2: "the tournament rules" blurb_2: "правил турніру"
# blurb_3: "to the top human and ogre players." blurb_3: "першості серед людей або оґрів."
# blurb_4: "Two teams means double the prizes!" blurb_4: "Дві команди подвоєння призів!"
# blurb_5: "(There will be two first place winners, two second-place winners, etc.)" blurb_5: "(Два переможня на першому місці, два на другому, тощо.)"
# rank: "Rank" rank: "Ранг"
# prizes: "Prizes" prizes: "Призи"
# total_value: "Total Value" total_value: "Загалом"
# in_cash: "in cash" # in_cash: "in cash"
# custom_wizard: "Custom CodeCombat Wizard" custom_wizard: "Власний чарівник CodeCombat"
# custom_avatar: "Custom CodeCombat avatar" custom_avatar: "Власний аватар CodeCombat"
# heap: "for six months of \"Startup\" access" # heap: "for six months of \"Startup\" access"
# credits: "credits" # credits: "credits"
# one_month_coupon: "coupon: choose either Rails or HTML" # one_month_coupon: "coupon: choose either Rails or HTML"
# one_month_discount: "discount, 30% off: choose either Rails or HTML" # one_month_discount: "discount, 30% off: choose either Rails or HTML"
# license: "license" license: "ліцензія"
# oreilly: "ebook of your choice" # oreilly: "ebook of your choice"
wizard_settings: wizard_settings:
@ -1121,7 +1121,7 @@ module.exports = nativeDescription: "українська мова", englishDesc
# filter_experience_senior: "Senior" # filter_experience_senior: "Senior"
# filter_experience_junior: "Junior" # filter_experience_junior: "Junior"
# filter_experience_recent_grad: "Recent Grad" # filter_experience_recent_grad: "Recent Grad"
# filter_experience_student: "College Student" filter_experience_student: "Студент коледжу"
# filter_results: "results" # filter_results: "results"
# start_hiring: "Start hiring." # start_hiring: "Start hiring."
# reasons: "Three reasons you should hire through us:" # reasons: "Three reasons you should hire through us:"

View file

@ -4,10 +4,10 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
no_ie: "抱歉! Internet Explorer 8 等旧式预览器无法使用本网站。" # Warning that only shows up in IE8 and older no_ie: "抱歉! Internet Explorer 8 等旧式预览器无法使用本网站。" # Warning that only shows up in IE8 and older
no_mobile: "CodeCombat 不是针对手机设备设计的,所以可能无法达到最好的体验!" # Warning that shows up on mobile devices no_mobile: "CodeCombat 不是针对手机设备设计的,所以可能无法达到最好的体验!" # Warning that shows up on mobile devices
play: "开始游戏" # The big play button that just starts playing a level 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: "噢, 你的浏览器太老了, 不能运行CodeCombat. 抱歉!" # Warning that shows up on really old Firefox/Chrome/Safari
old_browser_suffix: "你可以继续重试下去,但八成不起作用,更新浏览器吧亲~" 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: "战役模式" campaign: "战役模式"
for_beginners: "适合初学者" for_beginners: "适合初学者"
multiplayer: "多人游戏" # Not currently shown on home page multiplayer: "多人游戏" # Not currently shown on home page
@ -58,7 +58,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
confirm: "确认" confirm: "确认"
owned: "已拥有" # For items you own owned: "已拥有" # For items you own
locked: "需解锁" locked: "需解锁"
# purchasable: "Purchasable" # For a hero you unlocked but haven't purchased purchasable: "可购买" # For a hero you unlocked but haven't purchased
available: "可用" available: "可用"
skills_granted: "获得技能" # Property documentation details skills_granted: "获得技能" # Property documentation details
heroes: "英雄" # Tooltip on hero shop button from /play heroes: "英雄" # Tooltip on hero shop button from /play
@ -71,9 +71,9 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
buy_gems: "购买宝石" buy_gems: "购买宝石"
campaign_forest: "森林战役" campaign_forest: "森林战役"
campaign_dungeon: "地牢战役" campaign_dungeon: "地牢战役"
# subscription_required: "Subscription Required" subscription_required: "需订阅"
# free: "Free" free: "免费"
# subscribed: "Subscribed" subscribed: "已订阅"
older_campaigns: "旧的战役" older_campaigns: "旧的战役"
anonymous: "匿名玩家" anonymous: "匿名玩家"
level_difficulty: "难度:" level_difficulty: "难度:"
@ -236,9 +236,9 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
tome_minion_spells: "助手的咒语" # Only in old-style levels. tome_minion_spells: "助手的咒语" # Only in old-style levels.
tome_read_only_spells: "只读的咒语" # Only in old-style levels. tome_read_only_spells: "只读的咒语" # Only in old-style levels.
tome_other_units: "其他单元" # Only in old-style levels. tome_other_units: "其他单元" # Only in old-style levels.
# tome_cast_button_run: "Run" tome_cast_button_run: "运行"
# tome_cast_button_running: "Running" tome_cast_button_running: "正在运行"
# tome_cast_button_ran: "Ran" tome_cast_button_ran: "运行过"
tome_submit_button: "提交" tome_submit_button: "提交"
tome_reload_method: "重载该方法的原始代码" # Title text for individual method reload button. tome_reload_method: "重载该方法的原始代码" # Title text for individual method reload button.
tome_select_method: "选择方法" tome_select_method: "选择方法"
@ -246,7 +246,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
tome_select_a_thang: "选择人物来 " tome_select_a_thang: "选择人物来 "
tome_available_spells: "可用的法术" tome_available_spells: "可用的法术"
tome_your_skills: "你的技能" tome_your_skills: "你的技能"
# tome_help: "Help" tome_help: "帮助"
tome_current_method: "当前方法" tome_current_method: "当前方法"
hud_continue_short: "继续" hud_continue_short: "继续"
code_saved: "代码已保存" code_saved: "代码已保存"
@ -324,27 +324,27 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
few_gems: "几个宝石" few_gems: "几个宝石"
pile_gems: "一堆宝石" pile_gems: "一堆宝石"
chest_gems: "一箱宝石" chest_gems: "一箱宝石"
# purchasing: "Purchasing..." purchasing: "正在付款..."
# declined: "Your card was declined" declined: "您的卡片被拒绝"
# retrying: "Server error, retrying." retrying: "服务器错误,请重试"
# prompt_title: "Not Enough Gems" prompt_title: "没有足够数量的宝石"
# prompt_body: "Do you want to get more?" prompt_body: "还需要更多吗?"
# prompt_button: "Enter Shop" prompt_button: "进入商店"
# subscribe: subscribe:
# subscribe_title: "Subscribe" subscribe_title: "订阅"
# levels: "Unlock 17 extra levels! With 5 new ones every week!" levels: "多解锁17个关卡每周解锁5个新关卡"
# heroes: "More powerful heroes!" heroes: "更多强大的英雄!"
# gems: "3500 bonus gems every month!" gems: "每月多3500宝石奖励"
# items: "Over 250 bonus items!" items: "超过250个物品奖励"
# parents: "For Parents" parents: "致家长"
# parents_title: "Your child will learn to code." 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_blurb1: "通过使用CodeCombat您的孩子将学习编写真正的程序代码。他们将学到简单指令进而处理更复杂的问题。"
# parents_blurb2: "For $9.99 USD/mo, they get new challenges every week and personal email support from professional programmers." parents_blurb2: "每月支付99美元他们每周都会有新的挑战并且通过电子邮件获得专业程序员的指导。"
# parents_blurb3: "No Risk: 100% money back guarantee, easy 1-click unsubscribe." parents_blurb3: "无风险承诺100%退款,一键退订。"
# subscribe_button: "Subscribe Now" subscribe_button: "现在订阅"
# stripe_description: "Monthly Subscription" stripe_description: "每月订阅"
# subscription_required_to_play: "You'll need a subscription to play this level." subscription_required_to_play: "订阅后可开始本关"
choose_hero: choose_hero:
choose_hero: "请选择您的英雄" choose_hero: "请选择您的英雄"
@ -370,27 +370,27 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
range: "攻击范围" # As in "attack or visual range" range: "攻击范围" # As in "attack or visual range"
blocks: "格挡" # As in "this shield blocks this much damage" blocks: "格挡" # As in "this shield blocks this much damage"
skills: "技能" skills: "技能"
# available_for_purchase: "Available for Purchase" available_for_purchase: "可以购买"
# level_to_unlock: "Level to unlock:" level_to_unlock: "未解锁关卡:"
# restricted_to_certain_heroes: "Only certain heroes can play this level." restricted_to_certain_heroes: "只有特定的英雄可以进入本关。"
# skill_docs: skill_docs:
# writable: "writable" # Hover over "attack" in Your Skills while playing a level to see most of this writable: "可写" # Hover over "attack" in Your Skills while playing a level to see most of this
# read_only: "read-only" read_only: "只读"
# action_name: "name" action_name: "名称"
# action_cooldown: "Takes" action_cooldown: "释放时间"
# action_specific_cooldown: "Cooldown" action_specific_cooldown: "冷却时间"
# action_damage: "Damage" action_damage: "攻击力"
# action_range: "Range" action_range: "范围"
# action_radius: "Radius" action_radius: "半径"
# action_duration: "Duration" action_duration: "持续时间"
# example: "Example" example: "例程"
# ex: "ex" # Abbreviation of "example" ex: "例如" # Abbreviation of "example"
# current_value: "Current Value" current_value: "当前值"
# default_value: "Default value" default_value: "默认值"
# parameters: "Parameters" parameters: "参数"
# returns: "Returns" returns: "返回值"
# granted_by: "Granted by" granted_by: "技能来自"
save_load: save_load:
granularity_saved_games: "保存" granularity_saved_games: "保存"
@ -729,7 +729,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
games_simulated_for: "待你模拟玩的游戏:" games_simulated_for: "待你模拟玩的游戏:"
games_simulated: "游戏已模拟" games_simulated: "游戏已模拟"
games_played: "已玩过" games_played: "已玩过"
# ratio: "Ratio" ratio: "通过率"
leaderboard: "排行榜" leaderboard: "排行榜"
battle_as: "我要加入这一方 " battle_as: "我要加入这一方 "
summary_your: "" summary_your: ""
@ -813,8 +813,8 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
# service_web: "Web" # service_web: "Web"
# paid_on: "Paid On" # paid_on: "Paid On"
# service: "Service" # service: "Service"
# price: "Price" price: "价格"
# gems: "Gems" gems: "宝石"
# status_subscribed: "You're currently subscribed at $9.99 USD/mo. Thanks for your support!" # 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_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: "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" # play_counts: "Play Counts"
feedback: "反馈" feedback: "反馈"
# delta: delta:
# added: "Added" added: "被添加"
# modified: "Modified" modified: "被修改"
# deleted: "Deleted" deleted: "被删除"
# moved_index: "Moved Index" moved_index: "被移动的索引"
# text_diff: "Text Diff" text_diff: "文本变化"
# merge_conflict_with: "MERGE CONFLICT WITH" # merge_conflict_with: "MERGE CONFLICT WITH"
# no_changes: "No Changes" no_changes: "没有变化"
# guide: guide:
# temp: "Temp" temp: "临时"
multiplayer: multiplayer:
multiplayer_title: "多人游戏设置" # We'll be changing this around significantly soon. Until then, it's not important to translate. multiplayer_title: "多人游戏设置" # We'll be changing this around significantly soon. Until then, it's not important to translate.

View file

@ -6,6 +6,9 @@ ThangType = require './ThangType'
module.exports = class Level extends CocoModel module.exports = class Level extends CocoModel
@className: 'Level' @className: 'Level'
@schema: require 'schemas/models/level' @schema: require 'schemas/models/level'
@levels:
'dungeons-of-kithgard': '5411cb3769152f1707be029c'
'defense-of-plainswood': '541b67f71ccc8eaae19f3c62'
urlRoot: '/db/level' urlRoot: '/db/level'
serialize: (supermodel, session, otherSession, cached=false) -> serialize: (supermodel, session, otherSession, cached=false) ->

View file

@ -3,6 +3,7 @@ cache = {}
CocoModel = require './CocoModel' CocoModel = require './CocoModel'
util = require 'core/utils' util = require 'core/utils'
ThangType = require './ThangType' ThangType = require './ThangType'
Level = require './Level'
module.exports = class User extends CocoModel module.exports = class User extends CocoModel
@className: 'User' @className: 'User'
@ -90,7 +91,7 @@ module.exports = class User extends CocoModel
#heroes = _.values ThangType.heroes if me.isAdmin() #heroes = _.values ThangType.heroes if me.isAdmin()
heroes heroes
items: -> (me.get('earned')?.items ? []).concat(me.get('purchased')?.items ? []).concat([ThangType.items['simple-boots']]) 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() ownsHero: (heroOriginal) -> heroOriginal in @heroes()
ownsItem: (itemOriginal) -> itemOriginal in @items() ownsItem: (itemOriginal) -> itemOriginal in @items()
ownsLevel: (levelOriginal) -> levelOriginal in @levels() ownsLevel: (levelOriginal) -> levelOriginal in @levels()

View file

@ -253,13 +253,19 @@ kbd
border-image-source: url(/images/common/button-background-primary-active-border.png) border-image-source: url(/images/common/button-background-primary-active-border.png)
&.btn-success &.btn-success
border-image-source: url(/images/common/button-background-success-active-border.png) border-image-source: url(/images/common/button-background-success-active-border.png)
color: darken(white, 5%)
&.btn-warning &.btn-warning
border-image-source: url(/images/common/button-background-warning-active-border.png) border-image-source: url(/images/common/button-background-warning-active-border.png)
color: darken(white, 5%)
&.btn-danger &.btn-danger
border-image-source: url(/images/common/button-background-danger-active-border.png) border-image-source: url(/images/common/button-background-danger-active-border.png)
&:hover &:hover
color: lighten(rgb(248, 197, 146), 5%) color: lighten(rgb(248, 197, 146), 5%)
&.btn-success
color: white
&.btn-warning
color: white
&:active &:active
&.btn-lg &.btn-lg

View file

@ -63,6 +63,9 @@
left: 40px left: 40px
width: 588px width: 588px
.help-block
margin: 0
.alert .alert
margin-top: -25px margin-top: -25px
margin-bottom: 0 margin-bottom: 0

View file

@ -2,55 +2,89 @@
@import "app/styles/bootstrap/variables" @import "app/styles/bootstrap/variables"
#hero-victory-modal #hero-victory-modal
$hero-yellow-text: rgb(252, 201, 53)
//- Top-level modal container //- Top-level modal container
.modal-dialog .modal-dialog
margin-top: 15px margin-top: 0
padding-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 //- Header
.background-wrapper .background-wrapper
//background: url("/images/pages/play/level/modal/victory_modal_background.png") //background: url("/images/pages/play/level/modal/victory_modal_background.png")
width: 550px width: 750px
background-color: transparent background: transparent
border: 0px solid transparent border: 0px solid transparent
border-width: 25px border-image: url("/images/pages/play/level/modal/victory_modal_border_background.png") 250 0 100 0 fill round
border-image: url("/images/pages/play/level/modal/victory_modal_background.png") 25 fill round border-width: 250px 0 100px 0
border-radius: 12px border-radius: 12px
#victory-banner .modal-header
border: none
position: absolute position: absolute
left: -30px left: 188px
z-index: 0 width: 378px
height: 134px
margin: 0
padding: 0
#victory-header #victory-header
position: absolute position: relative
left: 135px
display: block
margin: 10px auto 0
// http://easings.net/#easeOutBack plus tweaked a bit: http://cubic-bezier.com/#.18,.68,.75,2 // 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)) @include transition(0.5s cubic-bezier(0.18, 0.68, 0.75, 2))
z-index: 1 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 &.out
@include scale(0) @include scale(0)
.modal-header #victory-title
height: 85px display: inline-block
border: none 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 //- Achievement panels
.modal-body .modal-body
padding: 0 20px padding: 0 20px
min-height: 30px min-height: 30px
margin-top: 160px
.achievement-panel .achievement-panel
background: url("/images/pages/play/level/modal/achievement_plate.png") background: transparent url("/images/pages/play/level/modal/victory_modal_shelf.png") no-repeat center 73px
width: 451px width: 824px
height: 144px height: 127px
margin: 5px auto margin: 0px -37px 0px -57px
position: relative position: relative
@include transition-duration(1s) @include transition-duration(1s)
@ -71,12 +105,16 @@
.achievement-description .achievement-description
@include opacity(0.75) @include opacity(0.75)
z-index: 1
position: absolute position: absolute
text-align: center text-align: center
left: 95px left: 95px
right: 98px right: 98px
top: 10px top: 86px
color: white color: $hero-yellow-text
font-weight: bold
text-transform: uppercase
font-family: 'Open Sans Condensed'
white-space: nowrap white-space: nowrap
overflow: hidden overflow: hidden
text-overflow: ellipsis text-overflow: ellipsis
@ -85,8 +123,7 @@
position: absolute position: absolute
left: 25px left: 25px
right: 23px right: 23px
top: 41px top: 0
bottom: 18px
@include flexbox() @include flexbox()
@include flex-justify-center() @include flex-justify-center()
@ -102,7 +139,7 @@
z-index: 1 z-index: 1
@include transition(0.25s ease) @include transition(0.25s ease)
&.hero, &.item &.hero, &.item, &.xp, &.gems
background: url("/images/pages/play/level/modal/reward_plate_wide.png") background: url("/images/pages/play/level/modal/reward_plate_wide.png")
width: 120px width: 120px
height: 83px height: 83px
@ -185,28 +222,112 @@
.gems .pulse .gems .pulse
@include animation(rewardPulse 0.25s infinite) @include animation(rewardPulse 0.25s infinite)
//- Footer
.modal-footer //- Footer - totals
padding-bottom: 0
p.sign-up-poke
color: white
.sign-up-button
float: right
margin: 2px 10px
#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 .next-level-buttons
float: right float: right
.next-level-button .next-level-button, .return-to-ladder-button
display: block width: 258px
margin: 8px 10px height: 60px
width: 150px line-height: 30px
margin: 0 10px
.ladder-submission-view .ladder-submission-view
display: inline-block display: inline-block
@ -223,7 +344,11 @@
.hour-of-code-done .hour-of-code-done
clear: both 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 strong
color: white color: white
@ -241,23 +366,25 @@
html.no-borderimage html.no-borderimage
#hero-victory-modal #hero-victory-modal
.modal-dialog
margin-top: 251px
.background-wrapper .background-wrapper
border: 0 border: 0
background: url("/images/pages/play/level/modal/victory_modal_background.png") background: url("/images/pages/play/level/modal/victory_modal_background.png")
height: 650px height: 713px
&.full-achievements
@media only screen and (max-height: 720px)
.modal-dialog
margin-top: 175px
#victory-header #victory-header
margin-top: 40px background: transparent
left: 160px @media only screen and (max-height: 640px)
#victory-banner .modal-dialog
left: 0px margin-top: 121px
top: 40px #victory-header
.modal-header display: none
height: 110px
.modal-content
height: 650px
padding-bottom: 0
.modal-footer
bottom: 20px
body.ipad body.ipad
#hero-victory-modal #hero-victory-modal

View file

@ -2,6 +2,16 @@
#item-details-view #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 .nano-content
padding: 10px padding: 10px

View file

@ -4,6 +4,7 @@
$heroCanvasHeight: 265px $heroCanvasHeight: 265px
#play-heroes-modal #play-heroes-modal
@include user-select(none)
//- Clear modal defaults //- Clear modal defaults
@ -187,6 +188,7 @@ $heroCanvasHeight: 265px
.hero-stats .hero-stats
color: white color: white
@include user-select(initial)
h2 h2
margin-top: 0px margin-top: 0px
@ -261,6 +263,9 @@ $heroCanvasHeight: 265px
//- Different footer states //- Different footer states
#hero-footer
@include user-select(initial)
#purchasable-hero-explanation, #loading-hero-explanation #purchasable-hero-explanation, #loading-hero-explanation
position: absolute position: absolute
left: 32px left: 32px

View file

@ -142,6 +142,29 @@ $gameControlMargin: 30px
border: 3px solid gold border: 3px solid gold
@include box-shadow(0px 0px 35px skyblue) @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 .level-shadow
z-index: 1 z-index: 1
width: $levelDotShadowWidth width: $levelDotShadowWidth

View file

@ -1,7 +1,11 @@
extends /templates/core/modal-base extends /templates/core/modal-base
block modal-header-content block modal-header-content
img(src="/images/pages/play/level/modal/victory_modal_blue_banner.png")#victory-banner #victory-header.out
img(src="/images/pages/play/level/modal/victory_word.png")#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 block modal-body-content
@ -43,33 +47,41 @@ block modal-body-content
.reward-text= animate ? 'New Item' : item.get('name') .reward-text= animate ? 'New Item' : item.get('name')
block modal-footer-content 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') if me.get('anonymous')
p.sign-up-poke.hide .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 .sign-up-blurb(data-i18n="play_level.victory_sign_up_poke") Want to save your code? Create a free account!
span(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 button.btn.btn-illustrated.btn-lg.btn-warning.hide#saving-progress-label(disabled, data-i18n="play_level.victory_saving_progress") Saving Progress
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
.next-level-buttons .next-level-buttons
if readyToRank if readyToRank
.ladder-submission-view .ladder-submission-view
else if level.get('type') === 'hero-ladder' 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 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 if showHourOfCodeDoneButton
.hour-of-code-done .hour-of-code-done
hr
a.image-link(href="http://code.org/api/hour/finish") 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) 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? strong(data-i18n="play_level.victory_hour_of_code_done") Are You Done?
a.text-link(href="http://code.org/api/hour/finish") 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! span(data-i18n="play_level.victory_hour_of_code_done_yes") Yes, I'm finished with my Hour of Code!
.clearfix

View file

@ -12,6 +12,12 @@
- seenNext = seenNext || next; - 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)' : '')) 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) 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] || "") 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) .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] || "")) div(class="level-info " + (levelStatusMap[level.id] || ""))

View file

@ -10,6 +10,7 @@ MusicPlayer = require 'lib/surface/MusicPlayer'
storage = require 'core/storage' storage = require 'core/storage'
AuthModal = require 'views/core/AuthModal' AuthModal = require 'views/core/AuthModal'
SubscribeModal = require 'views/play/modal/SubscribeModal' SubscribeModal = require 'views/play/modal/SubscribeModal'
Level = require 'models/Level'
trackedHourOfCode = false trackedHourOfCode = false
@ -126,10 +127,10 @@ module.exports = class WorldMapView extends RootView
getRenderData: (context={}) -> getRenderData: (context={}) ->
context = super(context) context = super(context)
context.campaign = _.find campaigns, { id: @terrain } 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.x ?= 10 + 80 * Math.random()
level.y ?= 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 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 window.levelUnlocksNotWorking # Temporary; also possible in HeroVictoryModal
level.locked = false if @levelStatusMap[level.id] in ['started', 'complete'] 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)' level.color = 'rgb(255, 80, 60)'
if level.requiresSubscription if level.requiresSubscription
level.color = 'rgb(80, 130, 200)' 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.levelStatusMap = @levelStatusMap
context.levelPlayCountMap = @levelPlayCountMap context.levelPlayCountMap = @levelPlayCountMap
context.isIPadApp = application.isIPadApp context.isIPadApp = application.isIPadApp
context.mapType = _.string.slugify @terrain context.mapType = _.string.slugify @terrain
context.nextLevel = @nextLevel 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.requiresSubscription = @requiresSubscription
context context
@ -345,7 +351,7 @@ dungeon = [
name: 'Dungeons of Kithgard' name: 'Dungeons of Kithgard'
type: 'hero' type: 'hero'
id: 'dungeons-of-kithgard' id: 'dungeons-of-kithgard'
original: '528110f30268d018e3000001' original: '5411cb3769152f1707be029c'
description: 'Grab the gem, but touch nothing else. Start here.' description: 'Grab the gem, but touch nothing else. Start here.'
x: 14 x: 14
y: 15.5 y: 15.5

View file

@ -9,6 +9,8 @@ ThangType = require 'models/ThangType'
LadderSubmissionView = require 'views/play/common/LadderSubmissionView' LadderSubmissionView = require 'views/play/common/LadderSubmissionView'
AudioPlayer = require 'lib/AudioPlayer' AudioPlayer = require 'lib/AudioPlayer'
CampaignOptions = require 'lib/CampaignOptions' CampaignOptions = require 'lib/CampaignOptions'
User = require 'models/User'
utils = require 'core/utils'
module.exports = class HeroVictoryModal extends ModalView module.exports = class HeroVictoryModal extends ModalView
id: 'hero-victory-modal' id: 'hero-victory-modal'
@ -36,6 +38,8 @@ module.exports = class HeroVictoryModal extends ModalView
@listenToOnce @achievements, 'sync', @onAchievementsLoaded @listenToOnce @achievements, 'sync', @onAchievementsLoaded
@readyToContinue = false @readyToContinue = false
@waitingToContinueSince = new Date() @waitingToContinueSince = new Date()
@previousXP = me.get 'points', true
@previousLevel = me.level()
Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'victory' Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'victory'
destroy: -> destroy: ->
@ -47,6 +51,7 @@ module.exports = class HeroVictoryModal extends ModalView
super() super()
onAchievementsLoaded: -> onAchievementsLoaded: ->
@$el.toggleClass 'full-achievements', @achievements.models.length is 3
thangTypeOriginals = [] thangTypeOriginals = []
achievementIDs = [] achievementIDs = []
for achievement in @achievements.models for achievement in @achievements.models
@ -133,6 +138,7 @@ module.exports = class HeroVictoryModal extends ModalView
return unless @supermodel.finished() return unless @supermodel.finished()
@playSelectionSound hero, true for original, hero of @thangTypes # Preload them @playSelectionSound hero, true for original, hero of @thangTypes # Preload them
@updateSavingProgressStatus() @updateSavingProgressStatus()
@updateXPBars 0
@$el.find('#victory-header').delay(250).queue(-> @$el.find('#victory-header').delay(250).queue(->
$(@).removeClass('out').dequeue() $(@).removeClass('out').dequeue()
Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'victory-title-appear' # TODO: actually add this 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 totalXP = @totalXPAnimated + newXP
if totalXP isnt @lastTotalXP if totalXP isnt @lastTotalXP
panel.textEl.text('+' + newXP) panel.textEl.text('+' + newXP)
@XPEl.text('+' + totalXP) @XPEl.text(totalXP)
@updateXPBars(totalXP)
xpTrigger = 'xp-' + (totalXP % 6) # 6 xp sounds xpTrigger = 'xp-' + (totalXP % 6) # 6 xp sounds
Backbone.Mediator.publish 'audio-player:play-sound', trigger: xpTrigger, volume: 0.5 + ratio / 2 Backbone.Mediator.publish 'audio-player:play-sound', trigger: xpTrigger, volume: 0.5 + ratio / 2
@lastTotalXP = totalXP @lastTotalXP = totalXP
@ -205,7 +212,7 @@ module.exports = class HeroVictoryModal extends ModalView
totalGems = @totalGemsAnimated + newGems totalGems = @totalGemsAnimated + newGems
if totalGems isnt @lastTotalGems if totalGems isnt @lastTotalGems
panel.textEl.text('+' + newGems) panel.textEl.text('+' + newGems)
@gemEl.text('+' + totalGems) @gemEl.text(totalGems)
gemTrigger = 'gem-' + (parseInt(panel.number * ratio) % 4) # 4 gem sounds gemTrigger = 'gem-' + (parseInt(panel.number * ratio) % 4) # 4 gem sounds
Backbone.Mediator.publish 'audio-player:play-sound', trigger: gemTrigger, volume: 0.5 + ratio / 2 Backbone.Mediator.publish 'audio-player:play-sound', trigger: gemTrigger, volume: 0.5 + ratio / 2
@lastTotalGems = totalGems @lastTotalGems = totalGems
@ -237,6 +244,32 @@ module.exports = class HeroVictoryModal extends ModalView
--t --t
-0.5 * (t * (t - 2) - 1) -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: -> endSequentialAnimations: ->
clearInterval @sequentialAnimationInterval clearInterval @sequentialAnimationInterval
@animationComplete = true @animationComplete = true

View file

@ -446,7 +446,7 @@ module.exports = class InventoryModal extends ModalView
patchSession = patchMe = false patchSession = patchMe = false
patchSession ||= not _.isEqual inventory, sessionHeroConfig.inventory patchSession ||= not _.isEqual inventory, sessionHeroConfig.inventory
sessionHeroConfig.inventory = inventory sessionHeroConfig.inventory = inventory
if hero = @selectedHero.get('original') if hero = @selectedHero?.get('original')
patchSession ||= not _.isEqual hero, sessionHeroConfig.thangType patchSession ||= not _.isEqual hero, sessionHeroConfig.thangType
sessionHeroConfig.thangType = hero sessionHeroConfig.thangType = hero
patchMe ||= not _.isEqual inventory, lastHeroConfig.inventory patchMe ||= not _.isEqual inventory, lastHeroConfig.inventory
@ -489,13 +489,14 @@ module.exports = class InventoryModal extends ModalView
@itemGroups.lockedItems.remove(item) @itemGroups.lockedItems.remove(item)
# Redo all item sorting to make sure that we don't clobber state changes since last render. # Redo all item sorting to make sure that we don't clobber state changes since last render.
equipped = _.values @getCurrentEquipmentConfig() equipped = _.values @getCurrentEquipmentConfig()
@sortItem(item, equipped) for item in @items.models @sortItem(otherItem, equipped) for otherItem in @items.models
@renderSelectors('#unequipped', '#gems-count') @renderSelectors('#unequipped', '#gems-count')
@requireLevelEquipment() @requireLevelEquipment()
@delegateEvents() @delegateEvents()
@setUpDraggableEventsForAvailableEquipment() @setUpDraggableEventsForAvailableEquipment()
@itemDetailsView.setItem(item) @itemDetailsView.setItem(item)
@onScrollUnequipped()
Backbone.Mediator.publish 'store:item-purchased', item: item, itemSlug: item.get('slug') Backbone.Mediator.publish 'store:item-purchased', item: item, itemSlug: item.get('slug')
else else
@ -550,6 +551,7 @@ module.exports = class InventoryModal extends ModalView
gender = if @selectedHero?.get('slug') in heroGenders.male then 'male' else 'female' 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}" @$el.find('#hero-image, #hero-image-hair, #hero-image-head, #hero-image-thumb').removeClass().addClass "#{gender} #{heroClass}"
equipment = @getCurrentEquipmentConfig() equipment = @getCurrentEquipmentConfig()
@onScrollUnequipped()
return unless _.size(equipment) and @supermodel.finished() return unless _.size(equipment) and @supermodel.finished()
@removeDollImages() @removeDollImages()
slotsWithImages = [] slotsWithImages = []
@ -562,7 +564,6 @@ module.exports = class InventoryModal extends ModalView
@$el.find('#hero-image-thumb').toggle not ('gloves' in slotsWithImages) @$el.find('#hero-image-thumb').toggle not ('gloves' in slotsWithImages)
@equipment = @options.equipment = equipment @equipment = @options.equipment = equipment
@onScrollUnequipped()
removeDollImages: -> removeDollImages: ->
@$el.find('.doll-image').remove() @$el.find('.doll-image').remove()

View file

@ -87,7 +87,6 @@ module.exports = class PlayHeroesModal extends ModalView
@onHeroChanged direction: null, relatedTarget: @$el.find('.hero-item')[heroIndex] @onHeroChanged direction: null, relatedTarget: @$el.find('.hero-item')[heroIndex]
@$el.find('.hero-stat').tooltip() @$el.find('.hero-stat').tooltip()
@buildCodeLanguages() @buildCodeLanguages()
Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'game-menu-open', volume: 1
rerenderFooter: -> rerenderFooter: ->
@formatHero @visibleHero @formatHero @visibleHero