diff --git a/migrations/20131214_classes.coffee b/migrations/20131214_classes.coffee new file mode 100644 index 0000000000..d54ba85595 --- /dev/null +++ b/migrations/20131214_classes.coffee @@ -0,0 +1,106 @@ +### +Huge migration: +- Customization Redo: https://trello.com/c/YKXmHNjY/306-customization-redo +- Armory: https://trello.com/c/83M5RqQB/299-armory +- Classes +### +mongo = require('mongoskin') +_ = require('lodash') +async = require('async') + +query = {migration:{$ne:'20131214_classes'}} +users = mongo.db('localhost:27017/habitrpg?auto_reconnect').collection('users') +users.count query, (err, count) -> + console.log {count} + return console.error(err) if err + users.findEach query, {batchSize:10}, (err, user) -> + unless user then err = 'Blank user';count-- + return console.log(err) if err + + # --------- Misc --------- + user.stats ?= {} + _.defaults user.purchased, {hair: {}, skin: {}, balance: 0} + user.preferences.sleep = user.flags.rest + delete user.flags.rest + delete user.preferences.armorSet + + # --------- Class System --------- + _.defaults user.stats, + class: "warrior" + str: 0 + con: 0 + int: 0 + per: 0 + buffs: {} + points: user.stats.lvl + mp: (user.stats.lvl - 1) / 2 + 10 + user.flags.classSelected = false + + # --------- Gender --------- + user.preferences.size = if (user.preferences.gender is "f") then "slim" else "broad" + user.preferences.shirt = if (user.preferences.gender is "f") then "pink" else "white" + user.preferences.hair = + color: user.preferences.hair + base: if user.preferences.gender is "f" then 1 else 0 + bangs: if user.preferences.gender is "f" then 1 else 3 + beard: 0 + mustache: 0 + + delete user.preferences.gender + + # --------- Skin (see https://trello.com/c/YKXmHNjY/306-customization-redo) --------- + user.preferences.skin = switch user.preferences.skin + when "asian" then "ddc994" + when "white" then "f5a76e" + when "black" then "915533" + when "dead" then "c3e1dc" + when "orc" then "6bd049" + else user.preferences.skin + + # --------- Gear --------- + gear = + owned: {} + equipped: {} + costume: {} + + _.each {head: "showHelm", weapon: "showWeapon", shield: "showShield", armor: "showArmor"}, (show, type) -> + user.items[type] = if Math.abs(user.items[type]) > 10 then 0 else ~~user.items[type] + _.times user.items[type], (i) -> + item = + if type is 'weapon' + if i > 8 then 'weapon_warrior_6' + else if i is 8 then "weapon_special_1" + else if i is 7 then "weapon_special_0" + else + if i > 7 then "#{type}_warrior_5" + else if i is 7 then "#{type}_special_1" + else if i is 6 then "#{type}_special_0" + else "#{type}_warrior_#{i}" + gear.owned[item] = true + gear.equipped[type] = item + + # # TODO how to handle combo of wearing / hiding? + # if user.preferences[show] is false + # gear.costume[type] = type + '_base_0'; + # user.preferences.costume = true; + + delete user.preferences[show] + delete user.items[type] + user.items.gear = gear + + # --------- Tasks --------- + _.each user.habits.concat(user.dailys).concat(user.todos).concat(user.rewards), (task) -> + # migrate task.priority from !, !!, !!! => 1, 1.5, 2 + task.priority = switch task.priority + when "!!!" then 2 + when "!!" then 1.5 + else 1 + + # Add task attributes + task.attribute = "str" + + user.migration = '20131214_classes' + users.update {_id: user._id}, user + console.log("DONE!") if --count <= 0 + console.log(count) if count%1000 is 0 + console.log('lefnire processed') if user._id is '9' diff --git a/migrations/20131214_classes.js b/migrations/20131214_classes.js deleted file mode 100644 index 82def71c5c..0000000000 --- a/migrations/20131214_classes.js +++ /dev/null @@ -1,86 +0,0 @@ -/** - * Huge migration: - * - Customization Redo: https://trello.com/c/YKXmHNjY/306-customization-redo - * - Armory: https://trello.com/c/83M5RqQB/299-armory - * - Classes - */ - -db.users.find().forEach(function(user){ - - // --------- Misc --------- - _.defaults(user.purchased, {hair:{},skin:{}}); - user.balance = user.balance || 0; - user.preferences.sleep = user.flags.rest; - delete user.flags.rest; - delete user.preferences.armorSet; - - // --------- Class System --------- - _.defaults(user.stats, {'class':'warrior', str:0, con:0, int:0, per:0, buffs:{}}); - user.stats.points = user.stats.lvl; - user.stats.mp = (user.stats.lvl-1)/2 + 10; - user.flags.classSelected = false; - - // --------- Gender --------- - user.preferences.size = (user.preferences.gender == 'f') ? 'slim' : 'broad'; - user.preferences.shirt = (user.preferences.gender == 'f') ? 'pink' : 'white'; - user.preferences.hair = { - color: user.preferences.hair, - base: user.preferences.gender == 'f' ? 1 : 0, - bangs: user.preferences.gender == 'f' ? 1 : 3, - beard: 0, - mustache: 0 - }; - delete user.preferences.gender; - - // --------- Skin (see https://trello.com/c/YKXmHNjY/306-customization-redo) --------- - - var s = user.preferences.skin; - user.preferences.skin = - s == 'asian' ? 'ddc994' : - s == 'white' ? 'f5a76e' : - s == 'black' ? '915533' : - s == 'dead' ? 'c3e1dc' : - s == 'orc' ? '6bd049' : s; - - - // --------- Gear --------- - var gear = { - owned: {}, - equipped: {}, - costume: {} - }; - _.each({head:'showHelm',weapon:'showWeapon',shield:'showShield',armor:'showArmor'}, function(show, type){ - user.items[type] = ~~user.items[type]; - _.times(user.items[type], function(i){ - var item = - (i == 7 && type == 'weapon') ? 'weapon_special_0' : - (i == 8 && type == 'weapon') ? 'weapon_special_1' : - (i == 6) ? type + '_special_0' : - (i == 7) ? type + '_special_1' : - type + '_warrior_' + i; - gear.owned[item] = true; - gear.equipped[type] = item; - /*if (user.preferences[show] === false) { - // TODO how to handle combo of wearing / hiding? - gear.costume[type] = type + '_base_0'; - user.preferences.costume = true; - }*/ - }); - delete user.preferences[show]; - delete user.items[type]; - }) - user.items.gear = gear; - - // --------- Tasks --------- - _.each(user.habits.concat(user.dailys).concat(user.todos).concat(user.rewards), function(task){ - // migrate task.priority from !, !!, !!! => 1, 1.5, 2 - var p = task.priority; - task.priority = (p == '!!!') ? 2 : (p == '!!') ? 1.5 : 1; - - // Add task attributes - task.attribute = 'str'; - return true; - }); - - db.users.update({_id:user._id}, user); -}); \ No newline at end of file diff --git a/src/models/user.js b/src/models/user.js index 5cb059507a..4be09ebce0 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -210,7 +210,7 @@ var UserSchema = new Schema({ mustache: {type: Number, 'default': 0}, }, hideHeader: {type:Boolean, 'default':false}, - skin: {type:String, 'default':'white'}, + skin: {type:String, 'default':'c06534'}, shirt: {type: String, 'default': 'white'}, timezoneOffset: Number, language: String,