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:
# 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"

View file

@ -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.

View file

@ -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:"

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_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.

View file

@ -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) ->

View file

@ -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()

View file

@ -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

View file

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

View file

@ -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

View file

@ -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

View file

@ -4,7 +4,8 @@
$heroCanvasHeight: 265px
#play-heroes-modal
@include user-select(none)
//- Clear modal defaults
.modal-dialog
@ -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

View file

@ -141,6 +141,29 @@ $gameControlMargin: 30px
&.complete
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

View file

@ -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

View file

@ -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] || ""))

View file

@ -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

View file

@ -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

View file

@ -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
@ -527,8 +528,8 @@ module.exports = class InventoryModal extends ModalView
onClickedSomewhere: (e) ->
return if @destroyed
@$el.find('.unlock-button').popover 'destroy'
#- Dynamic portrait loading
onScrollUnequipped: ->
@ -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()

View file

@ -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