Merge branch 'master' into production

This commit is contained in:
Nick Winter 2015-09-08 12:18:13 -07:00
commit 588fe0e134
13 changed files with 214 additions and 212 deletions

View file

@ -256,12 +256,7 @@ class CodeTreema extends TreemaNode.nodeMap.ace
constructor: ->
super(arguments...)
@workingSchema.aceTabSize = 4
buildValueForEditing: (valEl, data) ->
super(valEl, data)
if not @workingSchema.aceMode and mode = codeLanguages[@keyForParent]
@editor.getSession().setMode mode
valEl
@workingSchema.aceMode ?= mode if mode = codeLanguages[@keyForParent]
class CoffeeTreema extends CodeTreema
constructor: ->

View file

@ -413,20 +413,20 @@ module.exports = nativeDescription: "български език", englishDescri
subscribe_title: "Абонирай се"
unsubscribe: "Прекрати абонамента"
confirm_unsubscribe: "Подтвърди прекратяване на абонамента"
# never_mind: "Never Mind, I Still Love You"
# thank_you_months_prefix: "Thank you for supporting us these last"
# thank_you_months_suffix: "months."
# thank_you: "Thank you for supporting CodeCombat."
# sorry_to_see_you_go: "Sorry to see you go! Please let us know what we could have done better."
never_mind: "Няма значение, аз все още те обичам!"
thank_you_months_prefix: "Благодарим за помоща ви през последните"
thank_you_months_suffix: "месеци."
thank_you: "Благодарим ви че подкрепихте CodeCombat."
sorry_to_see_you_go: "Съжалиаваме че ни напускате! Моля да ни предложите какво бихме могли да подобрим."
unsubscribe_feedback_placeholder: "O, къде сбъркахме?"
# parent_button: "Ask your parent"
# parent_email_description: "We'll email them so they can buy you a CodeCombat subscription."
# parent_email_input_invalid: "Email address invalid."
# parent_email_input_label: "Parent email address"
# parent_email_input_placeholder: "Enter parent email"
# parent_email_send: "Send Email"
# parent_email_sent: "Email sent!"
# parent_email_title: "What's your parent's email?"
parent_button: "Попитай родител"
parent_email_description: "Ще ги уведомим с email така че ще могат да ти купят абонамент за CodeCombat."
parent_email_input_invalid: "Email адресът е невалиден."
parent_email_input_label: "Родителски email адрес"
parent_email_input_placeholder: "Въведи email на родител"
parent_email_send: "Изпрати Email"
parent_email_sent: "Email изпратен!"
parent_email_title: "Въведете email на родител?"
parents: "За Родители"
parents_title: "Скъпи Родители: Вашето дете се учи да програмира. Ще му помогнете ли да продължи?"
parents_blurb1: "Вашето дете изигра __nLevels__ нива и научи основи на програмирането. Развийте интереса у тях като им купите абонамент - така те ще могат да продължат с игрите."

View file

@ -180,7 +180,7 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran
password: "Salasana"
message: "Viesti"
code: "Koodi"
ladder: "Sarja"
ladder: "Liiga"
when: "Kun"
opponent: "Vastustaja"
rank: "Arvo"
@ -242,7 +242,7 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran
victory_sign_up: "Kirjaudu"
victory_sign_up_poke: "Haluatko tallettaa koodisi? Luo ilmainen tili!"
# victory_rate_the_level: "Rate the level: " # Only in old-style levels.
victory_return_to_ladder: "Palaa sarjaan"
victory_return_to_ladder: "Palaa liigaan"
victory_play_continue: "Jatka"
victory_saving_progress: "Tallennetaan edistymisesi"
victory_go_home: "Takaisin kotiin"
@ -1097,70 +1097,70 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran
favorite_postfix: "."
not_member_of_clans: "Ei klaanien jäsenyyksiä."
# achievements:
# last_earned: "Last Earned"
# amount_achieved: "Amount"
# achievement: "Achievement"
# category_contributor: "Contributor"
# category_ladder: "Ladder"
# category_level: "Level"
# category_miscellaneous: "Miscellaneous"
# category_levels: "Levels"
# category_undefined: "Uncategorized"
# current_xp_prefix: ""
# current_xp_postfix: " in total"
# new_xp_prefix: ""
# new_xp_postfix: " earned"
# left_xp_prefix: ""
# left_xp_infix: " until level "
# left_xp_postfix: ""
achievements:
last_earned: "Viimeisin saavutus"
amount_achieved: "Yhteensä"
achievement: "Saavutus"
category_contributor: "Avustamiset"
category_ladder: "Liiga"
category_level: "Taso"
category_miscellaneous: "Muut"
category_levels: "Tasot"
category_undefined: "Kategorisoimattomat"
current_xp_prefix: ""
current_xp_postfix: " yhteensä"
new_xp_prefix: ""
new_xp_postfix: " ansaittu"
left_xp_prefix: ""
left_xp_infix: " jäljellä tasoon "
left_xp_postfix: ""
# account:
# recently_played: "Recently Played"
# no_recent_games: "No games played during the past two weeks."
# payments: "Payments"
# purchased: "Purchased"
# sale: "Sale"
# subscription: "Subscription"
# invoices: "Invoices"
# service_apple: "Apple"
# service_web: "Web"
# paid_on: "Paid On"
# service: "Service"
# price: "Price"
# gems: "Gems"
# active: "Active"
# subscribed: "Subscribed"
# unsubscribed: "Unsubscribed"
# active_until: "Active Until"
# cost: "Cost"
# next_payment: "Next Payment"
# card: "Card"
# 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!"
account:
recently_played: "Viimeisin peli"
no_recent_games: "Ei pelejä viimeisen kahden viikon aikana."
payments: "Ostot"
purchased: "Ostettu"
sale: "Alennus"
subscription: "Kuukausitilaus"
invoices: "Laskut"
service_apple: "Apple"
service_web: "Netti"
paid_on: "Maksettu"
service: "Palvelu"
price: "Hinta"
gems: "Jalokivet"
active: "Voimassa"
subscribed: "Kirjautunut"
unsubscribed: "Ei kirjautunut"
active_until: "Voimassa asti"
cost: "Hinta"
next_payment: "Seuraava maksu"
card: "Kortti"
status_unsubscribed_active: "Tilauksesi ei ole aktiivinen ja sinua ei laskuteta, mutta etusi ovat vielä voimassa."
status_unsubscribed: "Hanki käyttöösi uusia tasoja, sankareita, esineitä ja lisää jalokiviä CodeCombat kuukausitilauskella!"
# account_invoices:
# amount: "Amount in US dollars"
# declined: "Your card was declined"
# invalid_amount: "Please enter a US dollar amount."
# not_logged_in: "Log in or create an account to access invoices."
# pay: "Pay Invoice"
# purchasing: "Purchasing..."
# retrying: "Server error, retrying."
# success: "Successfully paid. Thanks!"
account_invoices:
amount: "Hinta US dollareina"
declined: "Luottokorttisimaksu hylätty"
invalid_amount: "Ole hyvä ja syötä määrä US dollareina."
not_logged_in: "Kirjaudu sisään tai luo tili katosaksi laskujanne."
pay: "Suorita maksu"
purchasing: "Käsitellään..."
retrying: "Palvelinvirhe, yritetään uudelleen."
success: "Maksu onnistui. Kiitos!"
# loading_error:
# could_not_load: "Error loading from server"
# connection_failure: "Connection failed."
# unauthorized: "You need to be signed in. Do you have cookies disabled?"
# forbidden: "You do not have the permissions."
# not_found: "Not found."
# not_allowed: "Method not allowed."
# timeout: "Server timeout."
# conflict: "Resource conflict."
# bad_input: "Bad input."
# server_error: "Server error."
# unknown: "Unknown error."
loading_error:
could_not_load: "Virhe ladattaessa tietoja palvelimelta"
connection_failure: "Yhteysvirhe."
unauthorized: "Teidän tulee olla kirjautuneena sisään. Ovatko evästeet sallittuna?"
forbidden: "Ei käyttöoikeuttta."
not_found: "Ei löydetty."
not_allowed: "Toiminto ei sallittu."
timeout: "Toiminto aikakatkaistu."
conflict: "Resurssiristiriita."
bad_input: "Virheellinen syöte."
server_error: "Palvelinvirhe."
unknown: "Tuntematon virhe."
# resources:
# sessions: "Sessions"

View file

@ -1354,7 +1354,7 @@ module.exports = nativeDescription: "Português do Brasil", englishDescription:
next_name: "Nome?"
next_short_description: "escreva uma breve descrição."
next_long_description: "descreva o tipo de vaga ou cargo desejados."
next_skills: "relacione pelo menos cinco habilidades."
next_skills: "liste pelo menos cinco habilidades."
next_work: "descreva seu histórico de trabalho."
next_education: "descreva seu percurso acadêmico."
next_projects: "mostre até três projetos nos quais você trabalhou."
@ -1411,7 +1411,7 @@ module.exports = nativeDescription: "Português do Brasil", englishDescription:
work_duration: "Duração"
work_duration_help: "Por quanto tempo?"
work_description: "Descrição"
work_description_help: "O que você fez lá? (140 carac.; opcional)"
work_description_help: "O que você fez lá? (140 carac; opcional)"
education: "Educação"
education_header: "Descreva seu percurso acadêmico"
education_blurb: "Liste seu percurso acadêmico."

View file

@ -238,7 +238,7 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
reload_confirm: "重設所有程式碼"
victory: "勝利"
victory_title_prefix: ""
victory_title_suffix: " 完成"
victory_title_suffix: "完成"
victory_sign_up: "保存進度"
victory_sign_up_poke: "想保存您的程式碼?建立一個免費帳號吧!"
victory_rate_the_level: "評估關卡: " # Only in old-style levels.
@ -286,15 +286,15 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
time_goto: "前往:"
non_user_code_problem_title: "無法加載關卡"
infinite_loop_title: "檢測到無限循環"
infinite_loop_description: "建立世界的初始代碼還沒有運行完畢。這可能是真的很慢或出現無限循環或者存在一個bug。您可以嘗試再次運行這段代碼或重置代碼為默認狀態。如果還是解決不了問題請聯繫我們。."
infinite_loop_description: "建立世界的初始代碼還沒有運行完畢。這可能是真的很慢或出現無限循環或者存在一個bug。您可以嘗試再次運行這段代碼或重置代碼為默認狀態。如果還是解決不了問題請聯繫我們。"
check_dev_console: "您也可以打開開發者界面看一下有什麼可能出錯了。"
check_dev_console_link: "(說明)"
infinite_loop_try_again: "再試一次"
infinite_loop_reset_level: "重置關卡"
infinite_loop_comment_out: "在我的程式碼中加入注解"
tip_toggle_play: "使用 Ctrl+P 切換 播放/暫停."
tip_scrub_shortcut: "Ctrl+[ 快退; Ctrl+] 快進."
tip_guide_exists: "點擊頁面上方的指南,可獲得更多有用的訊息."
tip_toggle_play: "使用 Ctrl+P 切換 播放/暫停"
tip_scrub_shortcut: "Ctrl+[ 快退; Ctrl+] 快進"
tip_guide_exists: "點擊頁面上方的指南,可獲得更多有用的訊息"
tip_open_source: "「CodeCombat」100% 開源!"
tip_tell_friends: "喜歡Codecombat那就把它介紹給朋友!"
tip_beta_launch: "「CodeCombat」在2013年10月進入 BETA 測試。"
@ -318,24 +318,24 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
tip_impossible: "事情總是看起來不可能直到它成真那刻. - Nelson Mandela"
tip_talk_is_cheap: "多說無益,放「碼」過來. - Linus Torvalds"
tip_first_language: "您經歷的第一門程式語言是最慘痛的事情. - Alan Kay"
tip_hardware_problem: "Q: 換一顆燈泡需要多少位程序員? A: 一位也不用, 它是個硬體問題."
tip_hofstadters_law: "Hofstadter 定律: 完成一件複雜的事花費的時間總是超乎預期, 甚至您早已知道這個現象( Hofstadter 定律)."
tip_premature_optimization: "過早的優化是萬惡之源. - Donald Knuth"
tip_brute_force: "當您游移不定時, 就是用暴力解. - Ken Thompson"
tip_hardware_problem: "Q: 換一顆燈泡需要多少位程序員? A: 一位也不用,它是個硬體問題。"
tip_hofstadters_law: "Hofstadter 定律: 完成一件複雜的事花費的時間總是超乎預期, 甚至您早已知道這個現象( Hofstadter 定律)"
tip_premature_optimization: "過早的優化是萬惡之源 - Donald Knuth"
tip_brute_force: "當您游移不定時, 就是用暴力解 - Ken Thompson"
tip_extrapolation: "只有 2 種人在這世上: 一種人是能夠根據不完整資訊而推斷..."
tip_superpower: "編程讓我們最接近擁有超能力."
tip_control_destiny: "在真正的開源, 您有權利控制自己的命運. - Linus Torvalds"
tip_superpower: "編程讓我們最接近擁有超能力"
tip_control_destiny: "在真正的開源, 您有權利控制自己的命運 - Linus Torvalds"
tip_no_code: "在速度上,沒有任何代碼可以超過無代碼"
tip_code_never_lies: "代碼從不說謊, 但註釋偶爾會. — Ron Jeffries"
tip_reusable_software: "在軟體被重複使用前,它必須能用."
tip_code_never_lies: "代碼從不說謊, 但註釋偶爾會 — Ron Jeffries"
tip_reusable_software: "在軟體被重複使用前,它必須能用"
tip_optimization_operator: "每種語言都有一個優化的運算符號. 對大部份而言,那符號是‘//"
tip_lines_of_code: "使用代碼行數來管理開發進度就好像使用秤重器來管理建造飛機. — Bill Gates"
tip_lines_of_code: "使用代碼行數來管理開發進度就好像使用秤重器來管理建造飛機 — Bill Gates"
tip_source_code: "我想改變世界但他們不給我源代碼"
tip_javascript_java: "Java 和 JavaScript 的關係就好比馬和馬雲. - Chris Heilmann"
tip_move_forward: "不論您做啥, 持續前進. - Martin Luther King Jr."
tip_google: "擁有一個您不能解決的問題? Google 它!"
tip_adding_evil: "增加一個邪惡掐揑."
tip_hate_computers: "關於自我覺得恨透電腦的那群人. 其實他們真正應該恨的事情是糟糕的程序員. - Larry Niven"
tip_javascript_java: "Java 和 JavaScript 的關係就好比馬和馬雲 - Chris Heilmann"
tip_move_forward: "不論做什麼, 保持前進. - Martin Luther King Jr."
tip_google: "擁有一個您不能解決的問題? Google它!"
tip_adding_evil: "增加一個邪惡掐揑"
tip_hate_computers: "關於自我覺得恨透電腦的那群人. 其實他們真正應該恨的事情是糟糕的程序員 - Larry Niven"
tip_open_source_contribute: "您可以幫助「CodeCombat」提高"
tip_recurse: "迭代者人也,遞歸者神也 - L. Peter Deutsch"
tip_free_your_mind: "放下一切私心雜念,丟棄害怕、疑問和拒信,解放您的思維。 - 莫菲斯《駭客任務》"
@ -392,11 +392,11 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
chest_gems: "一箱寶石"
purchasing: "購買中..."
declined: "您的信用卡被拒絕"
retrying: "伺服器錯誤, 正在重試."
retrying: "伺服器錯誤, 正在重試"
prompt_title: "寶石不足"
prompt_body: "想要取得更多?"
prompt_button: "進入商店"
recovered: "先前購買的寶石已回復. 請重新載入頁面."
recovered: "先前購買的寶石已回復,請重新載入頁面。"
price: "x3500 / 月"
subscribe:
@ -431,8 +431,8 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
parents_title: "親愛的家長: 您的孩子將要學習編程. 您會支持孩子發展嗎?"
parents_blurb1: "您的孩子已經玩了 __nLevels__ 關,並且學習了編程基礎。請您為了培養他們的興趣而給他們訂閱,他們能繼續玩下去。"
parents_blurb1a: "不要懷疑計算機編程能力將是您的孩子作為一個成年人的基本技能。到2020年77%的工作將會需要編碼能力,並且軟件工程師將在世界各地成為高需求職業。您知道要計算機科學是收入最高的大學學位。"
parents_blurb2: "每月支付 $9.99 美金, 他們每週獲得新挑戰以及使用信件取得專業程式員的幫助."
parents_blurb3: "沒有風險: 保證 100% 退費, 一步取消訂閱."
parents_blurb2: "每月支付 $9.99 美金, 他們每週獲得新挑戰以及使用信件取得專業程式員的幫助"
parents_blurb3: "沒有風險: 保證 100% 退費, 一步取消訂閱"
payment_methods: "付費方法"
payment_methods_title: "可接受的付款方式"
payment_methods_blurb1: "我們現有的付費方式有信用卡和支付寶"
@ -455,8 +455,8 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
sale_view_button: "購買年費訂閱:"
stripe_description: "每月訂閱"
stripe_description_year_sale: "年費訂閱 (35% 優惠)"
subscription_required_to_play: "您將需要訂閱來開啟這關."
unlock_help_videos: "訂閱來解開所有鎖住得教學影片."
subscription_required_to_play: "您將需要訂閱來開啟這關"
unlock_help_videos: "訂閱來解開所有鎖住得教學影片"
personal_sub: "個人訂閱" # Accounts Subscription View below
loading_info: "正在加載訂閱內容···"
managed_by: "管理"
@ -780,11 +780,11 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
main_title: "CodeCombat社群"
introduction: "查看您可能可以參與的項目以及選擇最吸引您的項目. 我們期待與您一起工作!"
level_editor_prefix: "使用CodeCombat"
level_editor_suffix: "來創造和編輯關卡. 許多人已經創造關卡用在課堂或黑客松,或者給予朋友或兄弟姐妹. 如果您覺得創建一個全新的關卡非常困難,您可以先從現成的開始做起!"
thang_editor_prefix: "我們稱呼遊戲中的單位叫'thangs'. 使用"
thang_editor_suffix: "來修改CodeCombat的原材料. 讓遊戲中的東西可以扔砲彈, 修改遊戲動畫的方向, 調整單位的生命值, 或者上傳自製的素材."
article_editor_prefix: "看到有錯誤在我們的文件中嗎? 想要自己設計指令嗎? 查看我們的"
article_editor_suffix: "以及幫助CodeCombat玩家獲得更多知識在遊戲中."
level_editor_suffix: "來創造和編輯關卡。 許多人已經創造關卡用在課堂或黑客松,或者給予朋友或兄弟姐妹。如果您覺得創建一個全新的關卡非常困難,您可以先從現成的開始做起!"
thang_editor_prefix: "我們稱呼遊戲中的單位叫'thangs' 使用"
thang_editor_suffix: "來修改CodeCombat的原材料。 讓遊戲中的東西可以扔砲彈,修改遊戲動畫的方向,調整單位的生命值,或者上傳自製的素材。"
article_editor_prefix: "看到有錯誤在我們的文件中嗎 想要自己設計指令嗎? 查看我們的"
article_editor_suffix: "以及幫助CodeCombat玩家獲得更多知識在遊戲中"
find_us: "通過這些網站連繫我們"
social_github: "在GitHub上查看我們的代碼"
social_blog: "閱讀CodeCombat在Sett上的部落格"
@ -814,7 +814,7 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
edit_clan_description: "編輯部落的描述"
edit_name: "編輯名字"
edit_description: "編輯描述"
private: "私人"
private: "私人"
summary: "綜述"
average_level: "平均等級"
average_achievements: "平均成就"
@ -843,22 +843,22 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
classes:
archmage_title: "大法師"
archmage_title_description: "(Coder)"
archmage_summary: "如果您是個在coding教育遊戲有興趣的開發者, 成為大法師來幫助我們建立CodeCombat!"
archmage_summary: "如果您是個在coding教育遊戲有興趣的開發者成為大法師來幫助我們建立CodeCombat"
artisan_title: "工匠"
artisan_title_description: "(Level Builder)"
artisan_summary: "建造遊戲關卡並且分享給您的朋友們. 成為工匠來幫助其他人學習編程."
artisan_summary: "建造遊戲關卡並且分享給您的朋友們。 成為工匠來幫助其他人學習編程。"
adventurer_title: "冒險家"
adventurer_title_description: "(Level Playtester)"
adventurer_summary: "提前一周免費取得我們新的關卡(甚至是訂閱的內容)並且提前在釋出前幫助我們找出錯誤."
adventurer_summary: "提前一周免費取得我們新的關卡(甚至是訂閱的內容)並且提前在釋出前幫助我們找出錯誤"
scribe_title: "文書"
scribe_title_description: "(Article Editor)"
scribe_summary: "好的程式需要好的文件. 來自全世界數百萬的玩家一起編寫, 編輯和提升文件的可讀性."
scribe_summary: "好的程式需要好的文件。 來自全世界數百萬的玩家一起編寫, 編輯和提升文件的可讀性。"
diplomat_title: "外交官"
diplomat_title_description: "(Translator)"
diplomat_summary: "借由我們的外交官CodeCombat已翻譯到45種以上的語言. 幫助我們並且貢獻翻譯."
diplomat_summary: "借由我們的外交官CodeCombat已翻譯到45種以上的語言。 幫助我們並且貢獻翻譯。"
ambassador_title: "使節"
ambassador_title_description: "(Support)"
ambassador_summary: "安撫我們論壇的用戶並且提供發問者適當的方向. 我們的使節代表CodeCombat面對全世界."
ambassador_summary: "安撫我們論壇的用戶並且提供發問者適當的方向。 我們的使節代表CodeCombat面對全世界。"
editor:
main_title: "CodeCombat編輯器"
@ -960,62 +960,62 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
intro_blurb: "CodeCombat 是 100% 開源! 上百位專注的玩家已經幫助我們建造到今天的程度. 加入我們並完成下一章 CodeCombat 的冒險給全世界參與!"
alert_account_message_intro: "您好!"
alert_account_message: "為了訂閱課程信件, 您將必須先登入."
archmage_introduction: "在建造遊戲中,其中一個最美好的事情是需要整合許多不同東西. 圖像, 聲音, 及時網路, 社群網路。以及許多不同層面的編程, 從底層數據庫管理, 到用戶界面的設計和實現. 這裡有許多事情需要完成, 如果您是個有經驗的程序員並且熱衷于深入處理 CodeCombat 的本質, 那麼這職業就是為您打造的. 我們將很高興擁有您的幫助來打造有史以來最優質的編程遊戲."
archmage_introduction: "在建造遊戲中,其中一個最美好的事情是需要整合許多不同東西:圖像、 聲音、及時網路和社群網路。以及許多不同層面的編程,從底層數據庫管理,到用戶界面的設計和實現。 這裡有許多事情需要完成, 如果您是個有經驗的程序員並且熱衷于深入處理 CodeCombat 的本質,那麼這職業就是為您打造的。 我們將很高興擁有您的幫助來打造有史以來最優質的編程遊戲。"
class_attributes: "職業說明"
archmage_attribute_1_pref: "熟悉于"
archmage_attribute_1_suf: ", 或者渴望去學習. 我們大部份的程式以這個語言寫成. 如果您是個 Ruby 或 Python 粉絲, 您將感覺到歸屬感. 它是個JavaScript, 但是擁有更佳的文法."
archmage_attribute_2: "一些程式經驗和個人的衝勁. 我們將幫助您找到方向, 但是我們不會花費太多時間訓練您."
archmage_attribute_1_suf: ", 或者渴望去學習。 我們大部份的程式以這個語言寫成。 如果您是個 Ruby 或 Python 的粉絲, 您將感覺到歸屬感。 它是個JavaScript 但是擁有更佳的文法。"
archmage_attribute_2: "一些程式經驗和個人的衝勁。 我們將幫助您找到方向, 但是我們不會花費太多時間訓練您。"
how_to_join: "如何加入"
join_desc_1: "任何人都可加入我們! 只需確認我們的"
join_desc_2: "來開始, 並且勾選底下的條件來宣告您成為勇敢的大法師和借由郵件獲得我們最新的消息. 想要討論可做的事或者更加深入地參與? "
join_desc_3: ", 或者找到我們在"
join_desc_2: "來開始 並且勾選底下的條件來宣告您成為勇敢的大法師和借由郵件獲得我們最新的消息 想要討論可做的事或者更加深入地參與? "
join_desc_3: " 或者找到我們在"
join_desc_4: "讓我們從這開始!"
join_url_email: "發信給我們"
join_url_hipchat: "公共的HipChat房間"
archmage_subscribe_desc: "取得郵件關於新的編程機會和公告."
artisan_introduction_pref: "我們必須建造更多的關卡! 大家為了更多的內容在高聲吶喊, 但只靠我們只能建造這麼多. 現在您的工作場所就是一關; 我們的關卡編輯器是勉強可用的, 所以請小心. 只要您有新的靈感,不論從簡單的 for-loops 到"
artisan_introduction_suf: ", 那個這職業會適合您."
artisan_attribute_1: "任何的創建內容經驗都是加分的, 例如使用過Blizzard的關卡編輯器. 但不是必須的!"
artisan_attribute_2: "渴望去完成許多測試和迭代. 為了製作好關卡, 您需要把它交給別人去玩並且觀察他們如何玩, 之後準備找到一堆東西去修改."
artisan_attribute_3: "暫且擁有探險者般的忍耐力. 我們的關卡編輯器非常的陽春,有些地方非常不易使用. 我們已經提前告知囉!"
archmage_subscribe_desc: "取得郵件關於新的編程機會和公告"
artisan_introduction_pref: "我們必須建造更多的關卡! 大家為了更多的內容在高聲吶喊 但只靠我們只能建造這麼多。 現在您的工作場所就是一關; 我們的關卡編輯器是勉強可用的, 所以請小心. 只要您有新的靈感,不論從簡單的 for-loops 到"
artisan_introduction_suf: " 那個這職業會適合您。"
artisan_attribute_1: "任何的創建內容經驗都是加分的 例如使用過Blizzard的關卡編輯器。 但不是必須的!"
artisan_attribute_2: "渴望去完成許多測試和迭代。 為了製作好關卡, 您需要把它交給別人去玩並且觀察他們如何玩, 之後準備找到一堆東西去修改。"
artisan_attribute_3: "暫且擁有探險者般的忍耐力。 我們的關卡編輯器非常的陽春,有些地方非常不易使用。 我們已經提前告知囉!"
artisan_join_desc: "按照以下步驟使用關卡編輯器:"
artisan_join_step1: "閱讀文擋."
artisan_join_step2: "創建新的關卡並且探索已存在的關卡."
artisan_join_step3: "在公共的HipChat房間裡找到我們尋求幫助."
artisan_join_step4: "公佈您的關卡到論壇中尋求回饋."
artisan_subscribe_desc: "取得郵件關於關卡編輯器更新和公告."
adventurer_introduction: "讓我們清楚的定義您的角色: 您是部坦克. 您將遭受許多傷害. 我們需要玩家來嘗試我們全新的關卡並且幫助我們找出如何讓事情變得更好. 那痛苦將是巨大的; 製作優秀的遊戲是個長遠的過程並且沒有人可以第一次就把事情做對. 如果您可以忍受並且抵抗力高, 那麼這職業也許適合您."
adventurer_attribute_1: "渴望學習. 您想要學習如何編程並且我們想要教導您如何編程. 儘管您將可能在這情況中獨自完成大部分教學."
adventurer_attribute_2: "魅力十足的. 直率但如紳士般的指出需要改進的地方, 並且提供如何改進的建議."
adventurer_join_pref: "無論是與其餘工匠們一起共事, 或者勾選底下的條件來借由郵件獲得我們最新需要測試的關卡. 我們也將公佈需要評估的關卡在我們的網站上,例如:"
artisan_join_step1: "閱讀文擋"
artisan_join_step2: "創建新的關卡並且探索已存在的關卡"
artisan_join_step3: "在公共的HipChat房間裡找到我們尋求幫助"
artisan_join_step4: "公佈您的關卡到論壇中尋求回饋"
artisan_subscribe_desc: "取得郵件關於關卡編輯器更新和公告"
adventurer_introduction: "讓我們清楚的定義您的角色: 您是部坦克。 您將遭受許多傷害。 我們需要玩家來嘗試我們全新的關卡並且幫助我們找出如何讓事情變得更好 那痛苦將是巨大的; 製作優秀的遊戲是個長遠的過程並且沒有人可以第一次就把事情做對。 如果您可以忍受並且抵抗力高, 那麼這職業也許適合您。"
adventurer_attribute_1: "渴望學習。 您想要學習如何編程並且我們想要教導您如何編程。 儘管您將可能在這情況中獨自完成大部分教學。"
adventurer_attribute_2: "魅力十足的。 直率但如紳士般的指出需要改進的地方, 並且提供如何改進的建議。"
adventurer_join_pref: "無論是與其餘工匠們一起共事 或者勾選底下的條件來借由郵件獲得我們最新需要測試的關卡。 我們也將公佈需要評估的關卡在我們的網站上,例如:"
adventurer_forum_url: "我們的論壇"
adventurer_join_suf: "所以如果您更加喜歡借由這方式被通知, 在那些網站上登錄吧!"
adventurer_subscribe_desc: "當有新關卡需要測試時取得郵件."
scribe_introduction_pref: "CodeCombat不只是將擁有一堆關卡. 它將也包含知識資源, 一種充滿編程概念的wiki並且每道關卡都將蘊含著這樣的概念. 在這概念下, 不只每位工匠必須描述針對每個細節提出講解, 他們製作的關卡還可以簡單地和wiki中的編程概念產生連結. 某些東西已經在"
adventurer_join_suf: "所以如果您更加喜歡借由這方式被通知 在那些網站上登錄吧!"
adventurer_subscribe_desc: "當有新關卡需要測試時取得郵件"
scribe_introduction_pref: "CodeCombat不只是將擁有一堆關卡。 它將也包含知識資源, 一種充滿編程概念的wiki並且每道關卡都將蘊含著這樣的概念。 在這概念下, 不只每位工匠必須描述針對每個細節提出講解, 他們製作的關卡還可以簡單地和wiki中的編程概念產生連結。 某些東西已經在"
scribe_introduction_url_mozilla: "Mozilla 開發者社群"
scribe_introduction_suf: "完成. 如果您的有趣意見是可以在 Markdown 形式下闡述編程概念, 那麼這職業也許適合您."
scribe_attribute_1: "文字的技巧幾乎是您全部所需要的. 不只是文法和拼字, 但還需傳達複雜概念給閱讀的人."
scribe_introduction_suf: "完成。 如果您的有趣意見是可以在 Markdown 形式下闡述編程概念, 那麼這職業也許適合您。"
scribe_attribute_1: "文字的技巧幾乎是您全部所需要的。 不只是文法和拼字, 但還需傳達複雜概念給閱讀的人。"
contact_us_url: "聯繫我們"
scribe_join_description: "告訴我們更多關於您的資訊, 您的編程經驗和一些您喜歡寫下的東西. 我們將從這些地方開始!"
scribe_subscribe_desc: "取得公告關於寫作文章的郵件."
diplomat_introduction_pref: "所以, 如果說我們從"
scribe_join_description: "告訴我們更多關於您的資訊 您的編程經驗和一些您喜歡寫下的東西。 我們將從這些地方開始!"
scribe_subscribe_desc: "取得公告關於寫作文章的郵件"
diplomat_introduction_pref: "所以 如果說我們從"
diplomat_launch_url: " 十月的那次上線 "
diplomat_introduction_suf: "中得到了怎樣的啟發: 那就是在許多國家有許多人對CodeCombat產生興趣! 我們正在建立一群翻譯者急於將一組組的英文翻譯成各國語言讓CodeCombat可以讓全世界更多人都可以接觸. 如果您喜歡搶先閱讀新內容並且讓您的國人都可以儘速的擁有, 那麼這職業也許適合您."
diplomat_attribute_1: "擁有流利的英文並且喜歡翻譯某種語言. 當傳遞複雜想法時, 您必須這兩種語言都是熟悉的!"
diplomat_introduction_suf: "中得到了怎樣的啟發: 那就是在許多國家有許多人對CodeCombat產生興趣! 我們正在建立一群翻譯者急於將一組組的英文翻譯成各國語言讓CodeCombat可以讓全世界更多人都可以接觸。 如果您喜歡搶先閱讀新內容並且讓您的國人都可以儘速的擁有, 那麼這職業也許適合您。"
diplomat_attribute_1: "擁有流利的英文並且喜歡翻譯某種語言。 當傳遞複雜想法時, 您必須這兩種語言都是熟悉的!"
diplomat_i18n_page_prefix: "您可以開始從我們的"
diplomat_i18n_page: " 翻譯頁面 "
diplomat_i18n_page_suffix: "翻譯我們的關卡, 或者從我們在 GitHub 上的頁面."
diplomat_i18n_page_suffix: "翻譯我們的關卡 或者從我們在 GitHub 上的頁面。"
diplomat_join_pref_github: ""
diplomat_github_url: " GitHub "
diplomat_join_suf_github: "找到您的語言文件 (繁體中文的是: codecombat/app/locale/zh-HANT.coffee), 在線編輯它, 並且上傳一個 pull 請求. 另外, 勾選底下的條件來借由郵件獲得及時的國際化開發!"
diplomat_subscribe_desc: "取得國際化開發和待翻譯關卡的郵件."
ambassador_introduction: "這是個我們正在建立的社群, 您將是我們與世界的連接點. 我們在論壇, 郵件, 社群網路上和許多人交談並且幫助彼此熟悉遊戲以及互相學習. 如果您想要幫助其它人參與並且從中獲得許多樂趣, 以及樂於感受CodeCombat的脈搏和我們將前往的地方, 那麼這職業也許適合您."
ambassador_attribute_1: "溝通技巧. 可以找到玩家正面臨的問題並且幫助他們解決. 另外, 保持與我們聯繫玩家們討論的, 喜愛的, 厭惡的以及想要的!"
ambassador_join_desc: "告訴我們更多關於您的資訊, 您已完成的事情和您喜歡做的事情. 我們將從這些地方開始!"
diplomat_join_suf_github: "找到您的語言文件 (繁體中文的是: codecombat/app/locale/zh-HANT.coffee), 在線編輯它, 並且上傳一個 pull 請求。 另外, 勾選底下的條件來借由郵件獲得及時的國際化開發!"
diplomat_subscribe_desc: "取得國際化開發和待翻譯關卡的郵件"
ambassador_introduction: "這是個我們正在建立的社群 您將是我們與世界的連接點。 我們在論壇, 郵件, 社群網路上和許多人交談並且幫助彼此熟悉遊戲以及互相學習。 如果您想要幫助其它人參與並且從中獲得許多樂趣, 以及樂於感受CodeCombat的脈搏和我們將前往的地方 那麼這職業也許適合您。"
ambassador_attribute_1: "溝通技巧。 可以找到玩家正面臨的問題並且幫助他們解決。 另外, 保持與我們聯繫玩家們討論的, 喜愛的, 厭惡的以及想要的!"
ambassador_join_desc: "告訴我們更多關於您的資訊 您已完成的事情和您喜歡做的事情。 我們將從這些地方開始!"
ambassador_join_note_strong: "注意"
ambassador_join_note_desc: "其中一件我們優先要做的事情是建立多人連線, 玩家將面臨獨自難以解決的關卡而且可以招喚更高等級的法師來幫助. 這將對於使節是一個很棒的方式來完成自己的責任. 我們會及時地向大家公佈!"
ambassador_subscribe_desc: "取得更新和多人連線開發的郵件."
changes_auto_save: "當您勾選後, 改變將自動儲存."
ambassador_join_note_desc: "其中一件我們優先要做的事情是建立多人連線 玩家將面臨獨自難以解決的關卡而且可以招喚更高等級的法師來幫助。 這將對於使節是一個很棒的方式來完成自己的責任。 我們會及時地向大家公佈!"
ambassador_subscribe_desc: "取得更新和多人連線開發的郵件"
changes_auto_save: "當您勾選後 改變將自動儲存。"
diligent_scribes: "我們勤奮的文書:"
powerful_archmages: "我們強勁的大法師:"
creative_artisans: "我們創意的工匠:"
@ -1156,16 +1156,16 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
loading_error:
could_not_load: "從伺服器載入失敗"
connection_failure: "連線失敗."
unauthorized: "您需要先登錄. 您把cookies禁用了嗎?"
forbidden: "您沒有權限."
not_found: "沒找到."
not_allowed: "方法不被允許."
timeout: "伺服器超時."
conflict: "資源衝突."
bad_input: "錯誤輸入."
server_error: "伺服器錯誤."
unknown: "未知錯誤."
connection_failure: "連線失敗"
unauthorized: "您需要先登錄。 您把cookies禁用了嗎"
forbidden: "您沒有權限"
not_found: "沒找到"
not_allowed: "方法不被允許"
timeout: "伺服器超時"
conflict: "資源衝突"
bad_input: "錯誤輸入"
server_error: "伺服器錯誤"
unknown: "未知錯誤"
resources:
sessions: "會話"
@ -1264,37 +1264,37 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
multiplayer_hint_label: "提示:"
multiplayer_hint: " 點擊全選,然後按 ⌘-C 或 Ctrl-C 複製連結。"
multiplayer_coming_soon: "請期待更多的多人關卡!"
multiplayer_sign_in_leaderboard: "註冊並且登入帳號,就可以將您的成就放在排行榜上."
multiplayer_sign_in_leaderboard: "註冊並且登入帳號,就可以將您的成就放在排行榜上"
legal:
page_title: "條文"
opensource_intro: "CodeCombat是完全的開源."
opensource_intro: "CodeCombat是完全的開源"
opensource_description_prefix: "查看 "
github_url: "我們的 GitHub"
opensource_description_center: "並且如果有興趣也歡迎您的幫助! CodeCombat是建立在許多的開源專案上, 並且我們深愛它們. 查看 "
opensource_description_center: "並且如果有興趣也歡迎您的幫助 CodeCombat是建立在許多的開源專案上, 並且我們深愛它們。 查看 "
archmage_wiki_url: "我們的大法師wiki"
opensource_description_suffix: " 尋求創造這款遊戲的相關軟體列表."
opensource_description_suffix: " 尋求創造這款遊戲的相關軟體列表"
practices_title: "值得尊敬的最佳實踐"
practices_description: "這些是我們給您, 給玩家的承諾, 儘管這在法律上略顯不足."
practices_description: "這些是我們給您, 給玩家的承諾, 儘管這在法律上略顯不足"
privacy_title: "隱私"
privacy_description: "我們將不會賣出任何關於您個人的資訊."
privacy_description: "我們將不會賣出任何關於您個人的資訊"
security_title: "安全"
security_description: "我們渴望保持您的個人資訊是安全的. 身為一個開源的專案, 我們的網站是開放給任何人來檢視並且提升我們的安全系統."
security_description: "我們渴望保持您的個人資訊是安全的. 身為一個開源的專案, 我們的網站是開放給任何人來檢視並且提升我們的安全系統"
email_title: "郵件"
email_description_prefix: "我們將不會使您的信箱氾濫的收到垃圾信. 不論"
email_description_prefix: "我們將不會使您的信箱氾濫的收到垃圾信 不論"
email_settings_url: " 在您的郵件設定 "
email_description_suffix: "或在我們送出的信件上都有留著我們的聯結, 您可以更改您的喜好並且輕易的隨時取消訂閱."
email_description_suffix: "或在我們送出的信件上都有留著我們的聯結, 您可以更改您的喜好並且輕易的隨時取消訂閱"
cost_title: "花費"
cost_description: "CodeCombat在核心的關卡是全部免費, 但只要花費一個月$9.99美金來訂閱, 您將在每個月取得額外的關卡和3500顆寶石. 您可以輕易地取消訂閱並且保證取得100%的退費."
cost_description: "CodeCombat在核心的關卡是全部免費, 但只要花費一個月$9.99美金來訂閱, 您將在每個月取得額外的關卡和3500顆寶石。 您可以輕易地取消訂閱並且保證取得100%的退費。"
copyrights_title: "版權和許可"
contributor_title: "貢獻者許可協議"
contributor_description_prefix: "所有在本網站或是 GitHub 代碼庫上的貢獻都依照我們的"
cla_url: "貢獻者許可協議"
contributor_description_suffix: "而這在您貢獻之前就應該已经同意."
contributor_description_suffix: "而這在您貢獻之前就應該已经同意"
code_title: "Code - MIT"
code_description_prefix: "所有由 CodeCombat 擁有或是托管在 codecombat.com 的代码,在 GitHub 代碼庫或者 codecombat.com 數據庫,以上許可協議都依照"
mit_license_url: "MIT license"
code_description_suffix: "這包括所有 CodeCombat 公開製作關卡用的系统和組件代碼."
code_description_suffix: "這包括所有 CodeCombat 公開製作關卡用的系统和組件代碼"
art_title: "藝術/音樂 - Creative Commons "
art_description_prefix: "所有共通的内容都在"
cc_license_url: "Creative Commons Attribution 4.0 International License"
@ -1303,23 +1303,23 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
art_sound: "聲音"
art_artwork: "藝術作品"
art_sprites: "貼圖"
art_other: "所有製作關卡時公開的,不是代碼的創造性產品."
art_access: "目前還没有簡便通用的下载素材方式. 一般来說從網站上使用的URL下载或者聯繫我们尋求幫助. 當然您也可以幫助我们拓展網站,使這些資源更容易下載."
art_other: "所有製作關卡時公開的,不是代碼的創造性產品"
art_access: "目前還没有簡便通用的下载素材方式。 一般来說從網站上使用的URL下载或者聯繫我们尋求幫助。 當然您也可以幫助我们拓展網站,使這些資源更容易下載。"
art_paragraph_1: "為了歸屬, 請在使用處或適當的地方說明, 或者留下一個聯結至codecombat.com. 例如:"
use_list_1: "如果使用在電影或者另一款遊戲中, 請在製作人員表中加入codecombat.com."
use_list_1: "如果使用在電影或者另一款遊戲中, 請在製作人員表中加入codecombat.com"
use_list_2: "如果使用在網站上, 請在使用處留下codecombat.com, 例如在圖片下面或一個您專門放置Creative Commons和開源專案的地方. 如果您的内容明確提到關於 CodeCombat, 那您就不需要額外署名."
art_paragraph_2: "如果您使用的內容非由CodeCombat製作但由一位codecombat.com中的使用者, 那您應該署名他. 並且如果相對應的頁面上有標記署名指示, 那您應該遵照其指示."
art_paragraph_2: "如果您使用的內容非由CodeCombat製作但由一位codecombat.com中的使用者, 那您應該署名他。 並且如果相對應的頁面上有標記署名指示, 那您應該遵照其指示。"
rights_title: "保留權利"
rights_desc: "所有版權由關卡本身擁有, 這包含:"
rights_scripts: "腳本"
rights_unit: "單元配置"
rights_description: "描述"
rights_writings: "寫作"
rights_media: "聲音、音樂以及其他專門為某道關卡製作, 而不對其他關卡開放的創造性内容."
rights_media: "聲音、音樂以及其他專門為某道關卡製作, 而不對其他關卡開放的創造性内容"
rights_clarification: "澄清一下, 所有在關卡编辑器裡公開用於制作關卡的資源都是在CC協議下發佈的, 然而使用關卡编辑器製作,或者在關卡製作過程中上傳的内容则不是."
nutshell_title: "簡而言之"
nutshell_description: "我们在關卡编辑器里公開的任何資源, 您都可以在製作關卡時隨意使用, 但我们保留在 codecombat.com 之上創建的關卡本身傳播的權利, 因为我们往後可能決定以它們收費."
canonical: "我們宣告這篇說明的英文版本是權威版本. 如果各個翻譯版本之間有任何衝突, 以英文版為準."
canonical: "我們宣告這篇說明的英文版本是權威版本。 如果各個翻譯版本之間有任何衝突, 以英文版為準。"
ladder_prizes:
title: "錦標賽獎項" # This section was for an old tournament and doesn't need new translations now.

View file

@ -1,9 +1,7 @@
#ladder-tab-view
.name-col-cell
max-width: 100px
white-space: nowrap
overflow: hidden
text-overflow: ellipsis
.ladder-table
.name-col-cell
max-width: 170px
.histogram-display
height: 130px

View file

@ -1,8 +1,8 @@
div#columns.row
.row
for team, teamIndex in teams
div.column.col-md-4
div.column.col-md-6
div(id="histogram-display-#{team.name}", class="histogram-display", data-team-name=team.name)
table.table.table-bordered.table-condensed.table-hover(data-team=team.id)
table.table.table-bordered.table-condensed.table-hover.ladder-table(data-team=team.id)
thead
tr
th(colspan=level.get('type', true) == 'hero-ladder' ? 3 : 2)
@ -13,6 +13,7 @@ div#columns.row
th(colspan=level.get('type', true) == 'hero-ladder' ? 3 : 2)
th(data-i18n="general.score") Score
th(data-i18n="general.name").name-col-cell Name
th(data-i18n="general.when") When
th
th.iconic-cell
.glyphicon.glyphicon-eye-open
@ -31,6 +32,7 @@ div#columns.row
td.rank-cell= rank + 1
td.score-cell= Math.round(sessionStats.totalScore * 100)
td.name-col-cell= session.get('creatorName') || "Anonymous"
td.age-cell= moment(session.get('submitDate')).fromNow().replace('a few ', '')
td.fight-cell
a(href="/play/level/#{level.get('slug') || level.id}?team=#{team.otherTeam}&opponent=#{session.id}" + (league ? "&league=" + league.id : ""))
span(data-i18n="ladder.fight") Fight!
@ -50,6 +52,7 @@ div#columns.row
td.rank-cell= session.rank
td.score-cell= Math.round(sessionStats.totalScore * 100)
td.name-col-cell= session.get('creatorName') || "Anonymous"
td.age-cell= moment(session.get('submitDate')).fromNow().replace('a few ', '')
td.fight-cell
a(href="/play/level/#{level.get('slug') || level.id}?team=#{team.otherTeam}&opponent=#{session.id}" + (league ? "&league=" + league.id : ""))
span(data-i18n="ladder.fight") Fight!
@ -58,7 +61,7 @@ div#columns.row
if teamIndex == 1
.btn.btn-sm.load-more-ladder-entries(data-i18n="editor.more") More
div.column.col-md-4
div.column.col-md-4.secret
h4.friends-header(data-i18n="ladder.friends_playing") Friends Playing
if me.get('anonymous')
div.alert.alert-info

View file

@ -1,7 +1,7 @@
div#columns.row
.row
for team in teams
div.matches-column.col-md-6
table.table.table-bordered.table-condensed
table.table.table-bordered.table-condensed.my-matches-table
tr
th(colspan=5, style="color: #{team.primaryColor}")

View file

@ -33,8 +33,9 @@ module.exports = class LadderTabView extends CocoView
@teams = teamDataFromLevel @level
@leaderboards = {}
@refreshLadder()
@socialNetworkRes = @supermodel.addSomethingResource('social_network_apis', 0)
@checkFriends()
# Trying not loading the FP/G+ stuff for now to see if anyone complains they were using it so we can have just two columns.
#@socialNetworkRes = @supermodel.addSomethingResource('social_network_apis', 0)
#@checkFriends()
checkFriends: ->
return if @checked or (not window.FB) or (not window.gapi)
@ -185,6 +186,7 @@ module.exports = class LadderTabView extends CocoView
ctx.capitalize = _.string.capitalize
ctx.league = @options.league
ctx._ = _
ctx.moment = moment
ctx
generateHistogram: (histogramElement, histogramData, teamName) ->
@ -196,9 +198,9 @@ module.exports = class LadderTabView extends CocoView
top: 20
right: 20
bottom: 30
left: 0
left: 15
width = 300 - margin.left - margin.right
width = 470 - margin.left - margin.right
height = 125 - margin.top - margin.bottom
formatCount = d3.format(',.0')

View file

@ -74,7 +74,7 @@ module.exports = class LadderSubmissionView extends CocoView
data: ajaxData
success: success
error: failure
if @mirrorSession
if @mirrorSession and @mirrorSession.get('submittedCode')
# Also submit the mirrorSession after the main session submits successfully.
mirrorAjaxData = _.clone ajaxData
mirrorAjaxData.session = @mirrorSession.id

View file

@ -190,7 +190,9 @@ module.exports = class DocFormatter
return null unless action
cooldowns = cooldown: action.cooldown, specificCooldown: action.specificCooldown, name: actionName, type: type
for prop in ['range', 'radius', 'duration', 'damage']
cooldowns[prop] = v = owner[_.string.camelize actionName + _.string.capitalize(prop)]
v = owner[_.string.camelize actionName + _.string.capitalize(prop)]
continue if prop is 'range' and v <= 5 # Don't confuse players by showing melee ranges, they will inappropriately use distanceTo(enemy) < 3.
cooldowns[prop] = v
if _.isNumber(v) and v isnt Math.round v
cooldowns[prop] = v.toFixed 2
cooldowns

View file

@ -205,7 +205,7 @@ LevelHandler = class LevelHandler extends Handler
sortParameters =
'totalScore': req.query.order
selectProperties = ['totalScore', 'creatorName', 'creator', 'submittedCodeLanguage', 'heroConfig', 'leagues.leagueID', 'leagues.stats.totalScore']
selectProperties = ['totalScore', 'creatorName', 'creator', 'submittedCodeLanguage', 'heroConfig', 'leagues.leagueID', 'leagues.stats.totalScore', 'submitDate']
query = Session
.find(sessionsQueryParameters)

View file

@ -21,21 +21,23 @@ module.exports = createNewTask = (req, res) ->
fetchInitialSessionsToRankAgainst.bind(yetiGuru, requestLevelMajorVersion, originalLevelID)
generateAndSendTaskPairsToTheQueue
], (err, successMessageObject) ->
if err? then return errors.serverError res, "There was an error submitting the game to the queue:#{err}"
if err? then return errors.serverError res, "There was an error submitting the game to the queue: #{err}"
scoringUtils.sendResponseObject res, successMessageObject
validatePermissions = (req, sessionID, callback) ->
return callback 'You are unauthorized to submit that game to the simulator' unless req.user?.get('email')
return callback 'You are unauthorized to submit that game to the simulator.' unless req.user?.get('email')
return callback null if req.user?.isAdmin()
findParameters = _id: sessionID
selectString = 'creator submittedCode code'
LevelSession.findOne(findParameters).select(selectString).lean().exec (err, retrievedSession) ->
LevelSession.findOne(findParameters).select(selectString).lean().exec (err, retrievedSession) =>
if err? then return callback err
userHasPermissionToSubmitCode = retrievedSession.creator is req.user?.id and
not _.isEqual(retrievedSession.code, retrievedSession.submittedCode)
unless userHasPermissionToSubmitCode then return callback 'You are unauthorized to submit that game to the simulator'
userHasPermissionToSubmitCode = retrievedSession.creator is req.user?.id
unless userHasPermissionToSubmitCode then return callback 'You are unauthorized to submit that game to the simulator.'
# Disabling this for now, since mirror matches submit different transpiled code for the same source code.
#alreadySubmitted = _.isEqual(retrievedSession.code, retrievedSession.submittedCode)
#unless alreadySubmitted then return callback 'You have already submitted that exact code for simulation.'
callback null