Merge branch 'master' into production

This commit is contained in:
Nick Winter 2014-12-14 13:37:58 -08:00
commit 7fb0784921
7 changed files with 262 additions and 37 deletions

View file

@ -311,3 +311,36 @@ module.exports = LevelOptions =
'oasis': 'oasis':
requiredGear: {} requiredGear: {}
restrictedGear: {} restrictedGear: {}
'sarven-road':
requiredGear: {}
restrictedGear: {}
'sarven-gaps':
requiredGear: {}
restrictedGear: {}
'thunderhooves':
requiredGear: {}
restrictedGear: {}
'medical-attention':
requiredGear: {} # sense stone
restrictedGear: {}
'minesweeper':
requiredGear: {}
restrictedGear: {}
'sarven-sentry':
requiredGear: {'right-hand': 'crude-builders-hammer'}
restrictedGear: {}
'keeping-time':
requiredGear: {} # watch
restrictedGear: {}
'hoarding-gold':
requiredGear: {}
restrictedGear: {}
'decoy-drill':
requiredGear: {} # new builder's hammer
restrictedGear: {}
'yakstraction':
requiredGear: {} # new builder's hammer
restrictedGear: {}
'sarven-brawl':
requiredGear: {}
restrictedGear: {}

View file

@ -69,7 +69,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
change_hero: "Changer le Héro" # Go back from choose inventory to choose hero change_hero: "Changer le Héro" # Go back from choose inventory to choose hero
choose_inventory: "Équiper des objets" choose_inventory: "Équiper des objets"
buy_gems: "Acheter des gemmes" buy_gems: "Acheter des gemmes"
# campaign_desert: "Desert Campaign" campaign_desert: "Campagne Desert"
campaign_forest: "Campagne de la forêt" campaign_forest: "Campagne de la forêt"
campaign_dungeon: "Compagne du donjon" campaign_dungeon: "Compagne du donjon"
subscription_required: "Enregistrement nécessaire" subscription_required: "Enregistrement nécessaire"
@ -146,13 +146,13 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
fork: "Fork" fork: "Fork"
play: "Jouer" # When used as an action verb, like "Play next level" play: "Jouer" # When used as an action verb, like "Play next level"
retry: "Reessayer" retry: "Reessayer"
# actions: "Actions" actions: "Actions"
# info: "Info" info: "Info"
# help: "Help" help: "Aide"
watch: "Regarder" watch: "Regarder"
unwatch: "Ne plus regarder" unwatch: "Ne plus regarder"
submit_patch: "Soumettre un correctif" submit_patch: "Soumettre un correctif"
# submit_changes: "Submit Changes" submit_changes: "Soumettre des Changements"
general: general:
and: "et" and: "et"
@ -160,17 +160,17 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
date: "Date" date: "Date"
body: "Corps" body: "Corps"
version: "Version" version: "Version"
# submitter: "Submitter" submitter: "Soumissionnaire"
# submitted: "Submitted" submitted: "Soumis"
commit_msg: "Message de mise à jour" commit_msg: "Message de mise à jour"
# review: "Review" review: "Examen" #review
version_history: "Historique des versions" version_history: "Historique des versions"
version_history_for: "Historique des versions pour : " version_history_for: "Historique des versions pour : "
# select_changes: "Select two changes below to see the difference." select_changes: "Sélectionner deux changements plus bas pour voir la différence."
# undo: "Undo (Ctrl+Z)" undo: "Annuler (Ctrl+Z)"
# redo: "Redo (Ctrl+Shift+Z)" redo: "Refaire (Ctrl+Shift+Z)"
# play_preview: "Play preview of current level" play_preview: "Jouer un aperçu du niveau actuel"
result: "Resultat" result: "Résultat"
results: "Résultats" results: "Résultats"
description: "Description" description: "Description"
or: "ou" or: "ou"
@ -228,10 +228,10 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
click_to_select: "Clique sur une unité pour la sélectionner." click_to_select: "Clique sur une unité pour la sélectionner."
control_bar_multiplayer: "Multi joueurs" control_bar_multiplayer: "Multi joueurs"
control_bar_join_game: "Rejoindre la partie" control_bar_join_game: "Rejoindre la partie"
reload: "Recharger" reload: "Recommencer"
reload_title: "Recharger tout le code?" reload_title: "Recommencer tout le code?"
reload_really: "Êtes-vous sûr de vouloir recharger ce niveau et retourner au début?" reload_really: "Êtes-vous sûr de vouloir recommencer ce niveau et retourner au début?"
reload_confirm: "Tout recharger" reload_confirm: "Tout recommencer"
victory: "Victoire" victory: "Victoire"
victory_title_prefix: "" victory_title_prefix: ""
victory_title_suffix: " Terminé" victory_title_suffix: " Terminé"
@ -253,7 +253,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
tome_other_units: "Autres unités" # Only in old-style levels. tome_other_units: "Autres unités" # Only in old-style levels.
tome_cast_button_run: "Exécuter" tome_cast_button_run: "Exécuter"
tome_cast_button_running: "En cours d'exécution" tome_cast_button_running: "En cours d'exécution"
tome_cast_button_ran: "Exécuté" tome_cast_button_ran: "Exécuter"
tome_submit_button: "Envoyer" tome_submit_button: "Envoyer"
tome_reload_method: "Recharger le code original pour cette méthode" # Title text for individual method reload button. tome_reload_method: "Recharger le code original pour cette méthode" # Title text for individual method reload button.
tome_select_method: "Selectionner une méthode" tome_select_method: "Selectionner une méthode"
@ -268,7 +268,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
skip_tutorial: "Passer (esc)" skip_tutorial: "Passer (esc)"
keyboard_shortcuts: "Raccourcis Clavier" keyboard_shortcuts: "Raccourcis Clavier"
loading_ready: "Pret!" loading_ready: "Pret!"
loading_start: "Démarrer le niveau" loading_start: "Démarrer niveau"
problem_alert_title: "Corriger votre Code" problem_alert_title: "Corriger votre Code"
time_current: "Maintenant:" time_current: "Maintenant:"
time_total: "Max:" time_total: "Max:"
@ -344,7 +344,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
prompt_title: "Pas assez de gemmes" prompt_title: "Pas assez de gemmes"
prompt_body: "En voulez-vous plus?" prompt_body: "En voulez-vous plus?"
prompt_button: "Entrer dans la boutique" prompt_button: "Entrer dans la boutique"
# recovered: "Previous gems purchase recovered. Please refresh the page." recovered: "Gemmes précédemment achetées récupérées. Merci de rafraîchir la page."
subscribe: subscribe:
subscribe_title: "Inscription" subscribe_title: "Inscription"
@ -366,7 +366,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
choose_hero: "Choisissez votre Héro" choose_hero: "Choisissez votre Héro"
programming_language: "Langage de programmation" programming_language: "Langage de programmation"
programming_language_description: "Quel langage de programmation voullez-vous utiliser?" programming_language_description: "Quel langage de programmation voullez-vous utiliser?"
# default: "Default" default: "Défaut"
experimental: "Expérimental" experimental: "Expérimental"
python_blurb: "Simple mais puissant, idéal pour les débutants et les experts." python_blurb: "Simple mais puissant, idéal pour les débutants et les experts."
javascript_blurb: "Le langage du web. (Pas le même que Java.)" javascript_blurb: "Le langage du web. (Pas le même que Java.)"
@ -392,7 +392,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
restricted_to_certain_heroes: "Seulement certains héros peuvent jouer ce niveau." restricted_to_certain_heroes: "Seulement certains héros peuvent jouer ce niveau."
skill_docs: skill_docs:
# writable: "writable" # Hover over "attack" in Your Skills while playing a level to see most of this writable: "éditable" # Hover over "attack" in Your Skills while playing a level to see most of this
read_only: "lecture seulement" read_only: "lecture seulement"
action_name: "nom" action_name: "nom"
action_cooldown: "Encaisse" action_cooldown: "Encaisse"
@ -480,7 +480,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
forum_prefix: "Pour tout sujet d'ordre publique, merci d'utiliser " forum_prefix: "Pour tout sujet d'ordre publique, merci d'utiliser "
forum_page: "notre forum" forum_page: "notre forum"
forum_suffix: " À la place." forum_suffix: " À la place."
# where_reply: "Where should we reply?" where_reply: "Où devons-nous répondre?"
send: "Envoyer un commentaire" send: "Envoyer un commentaire"
contact_candidate: "Contacter le candidat" # Deprecated contact_candidate: "Contacter le candidat" # Deprecated
recruitment_reminder: "Utilisez ce formulaire pour entrer en contact avec le candidat qui vous interesse. Souvenez-vous que CodeCombat facture 15% de la première année de salaire. Ces frais sont dues à l'embauche de l'employé, ils sont remboursable pendant 90 jours si l'employé ne reste pas employé. Les employés à temps partiel, à distance ou contractuel sont gratuits en tant que stagiaires." # Deprecated recruitment_reminder: "Utilisez ce formulaire pour entrer en contact avec le candidat qui vous interesse. Souvenez-vous que CodeCombat facture 15% de la première année de salaire. Ces frais sont dues à l'embauche de l'employé, ils sont remboursable pendant 90 jours si l'employé ne reste pas employé. Les employés à temps partiel, à distance ou contractuel sont gratuits en tant que stagiaires." # Deprecated
@ -593,9 +593,9 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
more: "Plus" more: "Plus"
wiki: "Wiki" wiki: "Wiki"
live_chat: "Chat en live" live_chat: "Chat en live"
# thang_main: "Main" thang_main: "Principal"
# thang_spritesheets: "Spritesheets" thang_spritesheets: "Feuilles des sprites" #SpriteSheets
# thang_colors: "Colors" thang_colors: "Couleurs"
level_some_options: "Quelques options?" level_some_options: "Quelques options?"
level_tab_thangs: "Thangs" level_tab_thangs: "Thangs"
level_tab_scripts: "Scripts" level_tab_scripts: "Scripts"
@ -827,8 +827,8 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
recently_played: "Jouées récemment" recently_played: "Jouées récemment"
no_recent_games: "Aucunes parties jouées au cours des deux dernières semaines." no_recent_games: "Aucunes parties jouées au cours des deux dernières semaines."
payments: "Paiements" payments: "Paiements"
# purchased: "Purchased" purchased: "Acheté"
# subscription: "Subscription" subscription: "Souscrit"
service_apple: "Apple" service_apple: "Apple"
service_web: "Web" service_web: "Web"
paid_on: "Payé" paid_on: "Payé"
@ -1118,14 +1118,14 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
filter_visa_no: "Non autorisé" filter_visa_no: "Non autorisé"
filter_education_top: "Ecole supérieure" filter_education_top: "Ecole supérieure"
filter_education_other: "Autre" filter_education_other: "Autre"
filter_role_web_developer: "Développeur Webr" filter_role_web_developer: "Développeur Web"
filter_role_software_developer: "Développeur logiciel" filter_role_software_developer: "Développeur logiciel"
filter_role_mobile_developer: "Développeur mobile" filter_role_mobile_developer: "Développeur mobile"
filter_experience: "Expérience" filter_experience: "Expérience"
filter_experience_senior: "Senior" filter_experience_senior: "Senior"
filter_experience_junior: "Junior" filter_experience_junior: "Junior"
# filter_experience_recent_grad: "Recent Grad" # filter_experience_recent_grad: "Recent Grad"
# filter_experience_student: "College Student" filter_experience_student: "Étudiant"
filter_results: "Résultats" filter_results: "Résultats"
start_hiring: "Commencer à embaucher." start_hiring: "Commencer à embaucher."
# reasons: "Three reasons you should hire through us:" # reasons: "Three reasons you should hire through us:"

View file

@ -87,6 +87,18 @@ clusters = {
'thangs': ['Bookshelf', 'Chair', 'Table', 'Candle', 'Treasure Chest'] 'thangs': ['Bookshelf', 'Chair', 'Table', 'Candle', 'Treasure Chest']
'margin': -1 'margin': -1
} }
'desert_walls': {
'thangs': ['Desert Wall 1', 'Desert Wall 2', 'Desert Wall 3', 'Desert Wall 4', 'Desert Wall 5', 'Desert Wall 6', 'Desert Wall 7', 'Desert Wall 8']
'margin': 6
}
'desert_floor': {
'thangs': ['Sand 01', 'Sand 02', 'Sand 03', 'Sand 04', 'Sand 05', 'Sand 06']
'margin': -1
}
'oases': {
'thangs': ['Oasis 1', 'Oasis 2', 'Oasis 3']
'margin': 4
}
} }
presets = { presets = {
@ -207,6 +219,35 @@ presets = {
} }
} }
} }
'desert': {
'terrainName': 'Desert'
'type':'desert'
'borders':'desert_walls'
'borderNoise':2
'borderSize':4
'borderThickness':4
'floors':'desert_floor'
'decorations': {
'hero': {
'num': [1, 1]
'width': 2
'height': 2
'clusters': {
'hero': [1, 1]
}
}
'oasis': {
'num':[1,2] #min-max
'width': 10
'height': 10
'clusters': {
'oases':[1,1]
'shrubs':[0,5]
'rocks':[0,2]
}
}
}
}
} }
presetSizes = { presetSizes = {

View file

@ -988,13 +988,164 @@ desert = [
id: 'oasis' id: 'oasis'
original: '5480ba761bf0b10000711c64' original: '5480ba761bf0b10000711c64'
description: 'Run a gauntlet of sand yaks to reach oasis and quench your thirst!' description: 'Run a gauntlet of sand yaks to reach oasis and quench your thirst!'
#nextLevels: nextLevels:
# continue: '' continue: 'sarven-road'
x: 23.35 x: 23.35
y: 31.60 y: 31.60
adventurer: true adventurer: true
requiresSubscription: false requiresSubscription: false
} }
{
name: 'Sarven Road'
type: 'hero'
id: 'sarven-road'
original: '548c82360ffdc235e80ef04b'
description: 'Coming Soon'
nextLevels:
continue: 'sarven-gaps'
x: 28.36
y: 24.59
adventurer: true
requiresSubscription: false
disabled: not me.isAdmin()
}
{
name: 'Sarven Gaps'
type: 'hero'
id: 'sarven-gaps'
original: '548c8f4a0ffdc235e80ef0a8'
description: 'Coming Soon'
nextLevels:
continue: 'thunderhooves'
x: 21.13
y: 9.29
adventurer: true
requiresSubscription: true
}
{
name: 'Thunderhooves'
type: 'hero'
id: 'thunderhooves'
original: '548c90020ffdc235e80ef0ad'
description: 'Coming Soon'
nextLevels:
continue: 'medical-attention'
x: 35.08
y: 20.48
adventurer: true
requiresSubscription: false
disabled: not me.isAdmin()
}
{
name: 'Medical Attention'
type: 'hero'
id: 'medical-attention'
original: '548ce3300ffdc235e80ef0b2'
description: 'Coming Soon'
nextLevels:
continue: 'minesweeper'
x: 42.84
y: 21.82
adventurer: true
requiresSubscription: false
disabled: not me.isAdmin()
}
{
name: 'Minesweeper'
type: 'hero'
id: 'minesweeper'
original: ''
description: 'Coming Soon'
nextLevels:
continue: 'sarven-sentry'
x: 47.64
y: 12.40
adventurer: true
requiresSubscription: true
}
{
name: 'Sarven Sentry'
type: 'hero'
id: 'sarven-sentry'
original: '548cef7f0ffdc235e80ef0cc'
description: 'Coming Soon'
nextLevels:
continue: 'keeping-time'
x: 51.48
y: 26.09
adventurer: true
requiresSubscription: false
disabled: not me.isAdmin()
}
{
name: 'Keeping Time'
type: 'hero'
id: 'keeping-time'
original: '548cf1a90ffdc235e80ef0d1'
description: 'Coming Soon'
nextLevels:
continue: 'hoarding-gold'
x: 58.42
y: 34.14
adventurer: true
requiresSubscription: false
disabled: not me.isAdmin()
}
{
name: 'Hoarding Gold'
type: 'hero'
id: 'hoarding-gold'
original: ''
description: 'Coming Soon'
nextLevels:
continue: 'decoy-drill'
x: 61.73
y: 29.51
adventurer: true
requiresSubscription: false
disabled: not me.isAdmin()
}
{
name: 'Decoy Drill'
type: 'hero'
id: 'decoy-drill'
original: ''
description: 'Coming Soon'
nextLevels:
continue: 'yakstraction'
x: 62.05
y: 40.44
adventurer: true
requiresSubscription: false
disabled: not me.isAdmin()
}
{
name: 'Yakstraction'
type: 'hero'
id: 'yakstraction'
original: ''
description: 'Coming Soon'
nextLevels:
continue: 'sarven-brawl'
x: 66.46
y: 48.87
adventurer: true
requiresSubscription: true
}
{
name: 'Sarven Brawl'
type: 'hero'
id: 'sarven-brawl'
original: '548cf2850ffdc235e80ef0d6'
description: 'Coming Soon'
#nextLevels:
# continue: ''
x: 69.01
y: 33.80
adventurer: true
requiresSubscription: false
disabled: not me.isAdmin()
}
] ]

View file

@ -110,7 +110,7 @@ module.exports = class LevelLoadingView extends CocoView
onClickStartSubscription: (e) -> onClickStartSubscription: (e) ->
@openModalView new SubscribeModal() @openModalView new SubscribeModal()
window.tracker?.trackEvent 'Show subscription modal', category: 'Subscription', label: 'level loading', level: @options.level ? 'unknown' window.tracker?.trackEvent 'Show subscription modal', category: 'Subscription', label: 'level loading', level: @options.level.get('name') ? 'unknown'
window.tracker?.trackPageView "subscription/show-modal", ['Google Analytics'] window.tracker?.trackPageView "subscription/show-modal", ['Google Analytics']
onSubscribed: -> onSubscribed: ->

View file

@ -53,7 +53,7 @@ module.exports = class Handler
return false unless delta.o.length is 1 return false unless delta.o.length is 1
index = delta.deltaPath.indexOf('i18n') index = delta.deltaPath.indexOf('i18n')
return false if index is -1 return false if index is -1
return false if delta.deltaPath[index+1] is 'en-US' return false if delta.deltaPath[index+1] in ['en-US', 'en-UK', 'en-AU'] # English speakers are most likely just spamming, so always treat those as patches, not saves.
return true return true
formatEntity: (req, document) -> document?.toObject() formatEntity: (req, document) -> document?.toObject()

View file

@ -7,7 +7,7 @@ hipchat = require '../hipchat'
module.exports.setup = (app) -> module.exports.setup = (app) ->
# This is hacky and should probably get moved somewhere else, I dunno # This is hacky and should probably get moved somewhere else, I dunno
app.get '/db/cla.submissions', (req, res) -> app.get '/db/cla.submissions', (req, res) ->
return errors.unauthorized(res, 'You must be an admin to view that information') unless req.user?.isAdmin() return errors.unauthorized(res, 'You must be an admin to view that information') unless req.user?.isAdmin() or ('github' in req.user?.permissions ? [])
res.setHeader('Content-Type', 'application/json') res.setHeader('Content-Type', 'application/json')
collection = mongoose.connection.db.collection 'cla.submissions', (err, collection) -> collection = mongoose.connection.db.collection 'cla.submissions', (err, collection) ->
return log.error "Couldn't fetch CLA submissions because #{err}" if err return log.error "Couldn't fetch CLA submissions because #{err}" if err