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()
@ -300,7 +300,7 @@ module.exports = class Handler
getLatestVersion: (req, res, original, version) -> getLatestVersion: (req, res, original, version) ->
# can get latest overall version, latest of a major version, or a specific version # can get latest overall version, latest of a major version, or a specific version
return @sendBadInputError(res, 'Invalid MongoDB id: '+original) if not Handler.isID(original) return @sendBadInputError(res, 'Invalid MongoDB id: '+original) if not Handler.isID(original)
query = { 'original': mongoose.Types.ObjectId(original) } query = { 'original': mongoose.Types.ObjectId(original) }
if version? if version?
version = version.split('.') version = version.split('.')

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
@ -26,7 +26,7 @@ module.exports.setup = (app) ->
parts = module.split('/') parts = module.split('/')
module = parts[0] module = parts[0]
return getSchema(req, res, module) if parts[1] is 'schema' return getSchema(req, res, module) if parts[1] is 'schema'
if (not req.user) and req.route.method isnt 'get' if (not req.user) and req.route.method isnt 'get'
return errors.unauthorized(res, 'Must have an identity to do anything with the db. Do you have cookies enabled?') return errors.unauthorized(res, 'Must have an identity to do anything with the db. Do you have cookies enabled?')
try try