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':
requiredGear: {}
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
choose_inventory: "Équiper des objets"
buy_gems: "Acheter des gemmes"
# campaign_desert: "Desert Campaign"
campaign_desert: "Campagne Desert"
campaign_forest: "Campagne de la forêt"
campaign_dungeon: "Compagne du donjon"
subscription_required: "Enregistrement nécessaire"
@ -146,13 +146,13 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
fork: "Fork"
play: "Jouer" # When used as an action verb, like "Play next level"
retry: "Reessayer"
# actions: "Actions"
# info: "Info"
# help: "Help"
actions: "Actions"
info: "Info"
help: "Aide"
watch: "Regarder"
unwatch: "Ne plus regarder"
submit_patch: "Soumettre un correctif"
# submit_changes: "Submit Changes"
submit_changes: "Soumettre des Changements"
general:
and: "et"
@ -160,17 +160,17 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
date: "Date"
body: "Corps"
version: "Version"
# submitter: "Submitter"
# submitted: "Submitted"
submitter: "Soumissionnaire"
submitted: "Soumis"
commit_msg: "Message de mise à jour"
# review: "Review"
review: "Examen" #review
version_history: "Historique des versions"
version_history_for: "Historique des versions pour : "
# select_changes: "Select two changes below to see the difference."
# undo: "Undo (Ctrl+Z)"
# redo: "Redo (Ctrl+Shift+Z)"
# play_preview: "Play preview of current level"
result: "Resultat"
select_changes: "Sélectionner deux changements plus bas pour voir la différence."
undo: "Annuler (Ctrl+Z)"
redo: "Refaire (Ctrl+Shift+Z)"
play_preview: "Jouer un aperçu du niveau actuel"
result: "Résultat"
results: "Résultats"
description: "Description"
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."
control_bar_multiplayer: "Multi joueurs"
control_bar_join_game: "Rejoindre la partie"
reload: "Recharger"
reload_title: "Recharger tout le code?"
reload_really: "Êtes-vous sûr de vouloir recharger ce niveau et retourner au début?"
reload_confirm: "Tout recharger"
reload: "Recommencer"
reload_title: "Recommencer tout le code?"
reload_really: "Êtes-vous sûr de vouloir recommencer ce niveau et retourner au début?"
reload_confirm: "Tout recommencer"
victory: "Victoire"
victory_title_prefix: ""
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_cast_button_run: "Exécuter"
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_reload_method: "Recharger le code original pour cette méthode" # Title text for individual method reload button.
tome_select_method: "Selectionner une méthode"
@ -268,7 +268,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
skip_tutorial: "Passer (esc)"
keyboard_shortcuts: "Raccourcis Clavier"
loading_ready: "Pret!"
loading_start: "Démarrer le niveau"
loading_start: "Démarrer niveau"
problem_alert_title: "Corriger votre Code"
time_current: "Maintenant:"
time_total: "Max:"
@ -344,7 +344,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
prompt_title: "Pas assez de gemmes"
prompt_body: "En voulez-vous plus?"
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_title: "Inscription"
@ -366,7 +366,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
choose_hero: "Choisissez votre Héro"
programming_language: "Langage de programmation"
programming_language_description: "Quel langage de programmation voullez-vous utiliser?"
# default: "Default"
default: "Défaut"
experimental: "Expérimental"
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.)"
@ -392,7 +392,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
restricted_to_certain_heroes: "Seulement certains héros peuvent jouer ce niveau."
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"
action_name: "nom"
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_page: "notre forum"
forum_suffix: " À la place."
# where_reply: "Where should we reply?"
where_reply: "Où devons-nous répondre?"
send: "Envoyer un commentaire"
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
@ -593,9 +593,9 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
more: "Plus"
wiki: "Wiki"
live_chat: "Chat en live"
# thang_main: "Main"
# thang_spritesheets: "Spritesheets"
# thang_colors: "Colors"
thang_main: "Principal"
thang_spritesheets: "Feuilles des sprites" #SpriteSheets
thang_colors: "Couleurs"
level_some_options: "Quelques options?"
level_tab_thangs: "Thangs"
level_tab_scripts: "Scripts"
@ -827,8 +827,8 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
recently_played: "Jouées récemment"
no_recent_games: "Aucunes parties jouées au cours des deux dernières semaines."
payments: "Paiements"
# purchased: "Purchased"
# subscription: "Subscription"
purchased: "Acheté"
subscription: "Souscrit"
service_apple: "Apple"
service_web: "Web"
paid_on: "Payé"
@ -1118,14 +1118,14 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
filter_visa_no: "Non autorisé"
filter_education_top: "Ecole supérieure"
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_mobile_developer: "Développeur mobile"
filter_experience: "Expérience"
filter_experience_senior: "Senior"
filter_experience_junior: "Junior"
# filter_experience_recent_grad: "Recent Grad"
# filter_experience_student: "College Student"
filter_experience_student: "Étudiant"
filter_results: "Résultats"
start_hiring: "Commencer à embaucher."
# reasons: "Three reasons you should hire through us:"

View file

@ -87,6 +87,18 @@ clusters = {
'thangs': ['Bookshelf', 'Chair', 'Table', 'Candle', 'Treasure Chest']
'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 = {
@ -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 = {

View file

@ -988,13 +988,164 @@ desert = [
id: 'oasis'
original: '5480ba761bf0b10000711c64'
description: 'Run a gauntlet of sand yaks to reach oasis and quench your thirst!'
#nextLevels:
# continue: ''
nextLevels:
continue: 'sarven-road'
x: 23.35
y: 31.60
adventurer: true
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) ->
@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']
onSubscribed: ->

View file

@ -53,7 +53,7 @@ module.exports = class Handler
return false unless delta.o.length is 1
index = delta.deltaPath.indexOf('i18n')
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
formatEntity: (req, document) -> document?.toObject()
@ -300,7 +300,7 @@ module.exports = class Handler
getLatestVersion: (req, res, original, 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)
query = { 'original': mongoose.Types.ObjectId(original) }
if version?
version = version.split('.')

View file

@ -7,7 +7,7 @@ hipchat = require '../hipchat'
module.exports.setup = (app) ->
# This is hacky and should probably get moved somewhere else, I dunno
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')
collection = mongoose.connection.db.collection 'cla.submissions', (err, collection) ->
return log.error "Couldn't fetch CLA submissions because #{err}" if err
@ -26,7 +26,7 @@ module.exports.setup = (app) ->
parts = module.split('/')
module = parts[0]
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?')
try