mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-15 13:47:33 +01:00
Merge remote-tracking branch 'remotes/Alys/eyewear1' into develop
Conflicts: database_reports/count_users_who_own_specified_gear.js
This commit is contained in:
@@ -11,8 +11,8 @@ var thingsOfInterest = {
|
|||||||
'data_path': 'items.gear.owned',
|
'data_path': 'items.gear.owned',
|
||||||
'identifyOwnershipWith': 'exists',
|
'identifyOwnershipWith': 'exists',
|
||||||
'items': [
|
'items': [
|
||||||
'headAccessory_special_wondercon_red',
|
'eyewear_special_wondercon_red',
|
||||||
'headAccessory_special_wondercon_black',
|
'eyewear_special_wondercon_black',
|
||||||
'back_special_wondercon_black',
|
'back_special_wondercon_black',
|
||||||
'back_special_wondercon_red',
|
'back_special_wondercon_red',
|
||||||
'body_special_wondercon_red',
|
'body_special_wondercon_red',
|
||||||
@@ -161,7 +161,7 @@ All users found.
|
|||||||
CSV DATA:
|
CSV DATA:
|
||||||
|
|
||||||
"Unconventional Armor ownership"
|
"Unconventional Armor ownership"
|
||||||
"date","back_special_wondercon_black","back_special_wondercon_red","body_special_wondercon_black","body_special_wondercon_gold","body_special_wondercon_red","headAccessory_special_wondercon_black","headAccessory_special_wondercon_red"
|
"date","back_special_wondercon_black","back_special_wondercon_red","body_special_wondercon_black","body_special_wondercon_gold","body_special_wondercon_red","eyewear_special_wondercon_black","eyewear_special_wondercon_red"
|
||||||
"2014-09-01","7","7","7","7","7","7","9"
|
"2014-09-01","7","7","7","7","7","7","9"
|
||||||
|
|
||||||
"Spooky Skins purchases"
|
"Spooky Skins purchases"
|
||||||
@@ -179,8 +179,8 @@ Unconventional Armor ownership:
|
|||||||
body_special_wondercon_black: 7
|
body_special_wondercon_black: 7
|
||||||
body_special_wondercon_gold: 7
|
body_special_wondercon_gold: 7
|
||||||
body_special_wondercon_red: 7
|
body_special_wondercon_red: 7
|
||||||
headAccessory_special_wondercon_black: 7
|
eyewear_special_wondercon_black: 7
|
||||||
headAccessory_special_wondercon_red: 9
|
eyewear_special_wondercon_red: 9
|
||||||
|
|
||||||
Spooky Skins purchases:
|
Spooky Skins purchases:
|
||||||
ghost: 2
|
ghost: 2
|
||||||
|
|||||||
82
migrations/20140829_change_headAccessory_to_eyewear.js
Normal file
82
migrations/20140829_change_headAccessory_to_eyewear.js
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
// node .migrations/20140829_change_headAccessory_to_eyewear.js
|
||||||
|
|
||||||
|
var migrationName = '20140829_change_headAccessory_to_eyewear';
|
||||||
|
var authorName = 'Alys'; // in case script author needs to know when their ...
|
||||||
|
var authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; //... own data is done
|
||||||
|
|
||||||
|
/**
|
||||||
|
* https://github.com/HabitRPG/habitrpg/issues/3645
|
||||||
|
*/
|
||||||
|
var mongo = require('mongoskin');
|
||||||
|
var _ = require('lodash');
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////// UNCOMMENT *ONE* OF THESE LINES: ///////////////////
|
||||||
|
// var liveUsers = mongo.db('lefnire:mAdn3s5s@charlotte.mongohq.com:10015/habitrpg_large?auto_reconnect').collection('users'); // @lefnire production?
|
||||||
|
// var liveUsers = mongo.db('localhost:27017/habitrpg_old?auto_reconnect').collection('users'); // @lefnire habitrpg_old
|
||||||
|
// var liveUsers = mongo.db('localhost:27017/habitrpg?auto_reconnect').collection('users'); // for local testing by script author (e.g., vagrant install)
|
||||||
|
|
||||||
|
|
||||||
|
var fields = {'migration':1,
|
||||||
|
'items.gear.costume.headAccessory':1,
|
||||||
|
'items.gear.equipped.headAccessory':1,
|
||||||
|
'items.gear.owned.headAccessory_special_wondercon_black':1,
|
||||||
|
'items.gear.owned.headAccessory_special_wondercon_red':1,
|
||||||
|
'items.gear.owned.headAccessory_special_summerRogue':1,
|
||||||
|
'items.gear.owned.headAccessory_special_summerWarrior':1
|
||||||
|
};
|
||||||
|
|
||||||
|
var progressCount = 1000;
|
||||||
|
var count = 0;
|
||||||
|
liveUsers.findEach({ $and: [
|
||||||
|
{ migration: {$ne:migrationName} },
|
||||||
|
{ $or: [
|
||||||
|
{'items.gear.owned.headAccessory_special_summerRogue': {'$exists':true}},
|
||||||
|
{'items.gear.owned.headAccessory_special_summerWarrior':{'$exists':true}},
|
||||||
|
{'items.gear.owned.headAccessory_special_wondercon_red':{'$exists':true}},
|
||||||
|
{'items.gear.owned.headAccessory_special_wondercon_black':{'$exists':true}}
|
||||||
|
]}
|
||||||
|
]}, fields, {batchSize:250}, function(err, user){
|
||||||
|
count++;
|
||||||
|
if (!user) err = '!user';
|
||||||
|
if (err) {return console.error(err);}
|
||||||
|
|
||||||
|
var set = {'migration': migrationName};
|
||||||
|
var unset = {};
|
||||||
|
|
||||||
|
var oldToNew = {
|
||||||
|
'headAccessory_special_summerRogue': 'eyewear_special_summerRogue',
|
||||||
|
'headAccessory_special_summerWarrior': 'eyewear_special_summerWarrior',
|
||||||
|
'headAccessory_special_wondercon_red': 'eyewear_special_wondercon_red',
|
||||||
|
'headAccessory_special_wondercon_black':'eyewear_special_wondercon_black'
|
||||||
|
};
|
||||||
|
|
||||||
|
// items.gear.costume, items.gear.equipped:
|
||||||
|
_.each(['costume','equipped'],function(type){
|
||||||
|
_.each(oldToNew,function(newName,oldName){
|
||||||
|
if (user.items.gear[type].headAccessory === oldName) {
|
||||||
|
unset['items.gear.'+type+'.headAccessory'] = "";
|
||||||
|
set['items.gear.'+type+'.eyewear'] = newName;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// items.gear.owned:
|
||||||
|
_.each(oldToNew,function(newName,oldName){
|
||||||
|
if (oldName in user.items.gear.owned) {
|
||||||
|
unset['items.gear.owned.'+oldName] = "";
|
||||||
|
set['items.gear.owned.'+newName] = user.items.gear.owned[oldName];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//console.log(JSON.stringify(user, null, " "));
|
||||||
|
//console.log("set: " + JSON.stringify(set, null, " "));
|
||||||
|
//console.log("unset: " + JSON.stringify(unset, null, " "));
|
||||||
|
|
||||||
|
liveUsers.update({_id:user._id}, {$unset:unset, $inc:{_v:1}});
|
||||||
|
liveUsers.update({_id:user._id}, {$set:set, $inc:{_v:1}});
|
||||||
|
|
||||||
|
if (count%progressCount == 0) console.log(count + ' ' + user._id);
|
||||||
|
if (user._id == '9') console.log('lefnire processed');
|
||||||
|
if (user._id == authorUuid) console.log(authorName + ' processed');
|
||||||
|
});
|
||||||
@@ -29,8 +29,8 @@ CouponSchema.statics.apply = function(user, code, next){
|
|||||||
if (coupon.user) return cb("Coupon already used");
|
if (coupon.user) return cb("Coupon already used");
|
||||||
switch (coupon.event) {
|
switch (coupon.event) {
|
||||||
case 'wondercon':
|
case 'wondercon':
|
||||||
user.items.gear.owned.headAccessory_special_wondercon_red = true;
|
user.items.gear.owned.eyewear_special_wondercon_red = true;
|
||||||
user.items.gear.owned.headAccessory_special_wondercon_black = true;
|
user.items.gear.owned.eyewear_special_wondercon_black = true;
|
||||||
user.items.gear.owned.back_special_wondercon_black = true;
|
user.items.gear.owned.back_special_wondercon_black = true;
|
||||||
user.items.gear.owned.back_special_wondercon_red = true;
|
user.items.gear.owned.back_special_wondercon_red = true;
|
||||||
user.items.gear.owned.body_special_wondercon_red = true;
|
user.items.gear.owned.body_special_wondercon_red = true;
|
||||||
|
|||||||
@@ -147,6 +147,7 @@ var UserSchema = new Schema({
|
|||||||
shield: {type: String, 'default': 'shield_base_0'},
|
shield: {type: String, 'default': 'shield_base_0'},
|
||||||
back: String,
|
back: String,
|
||||||
headAccessory: String,
|
headAccessory: String,
|
||||||
|
eyewear: String,
|
||||||
body: String
|
body: String
|
||||||
},
|
},
|
||||||
costume: {
|
costume: {
|
||||||
@@ -156,6 +157,7 @@ var UserSchema = new Schema({
|
|||||||
shield: {type: String, 'default': 'shield_base_0'},
|
shield: {type: String, 'default': 'shield_base_0'},
|
||||||
back: String,
|
back: String,
|
||||||
headAccessory: String,
|
headAccessory: String,
|
||||||
|
eyewear: String,
|
||||||
body: String
|
body: String
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ mixin avatar(opts)
|
|||||||
// Avatar
|
// Avatar
|
||||||
span(class='skin_{{profile.preferences.skin}}', ng-if='!profile.preferences.sleep')
|
span(class='skin_{{profile.preferences.skin}}', ng-if='!profile.preferences.sleep')
|
||||||
span(class='skin_{{profile.preferences.skin}}_sleep', ng-if='profile.preferences.sleep')
|
span(class='skin_{{profile.preferences.skin}}_sleep', ng-if='profile.preferences.sleep')
|
||||||
|
|
||||||
// Shirt
|
// Shirt
|
||||||
span(class='{{profile.preferences.size}}_shirt_{{profile.preferences.shirt}}')
|
span(class='{{profile.preferences.size}}_shirt_{{profile.preferences.shirt}}')
|
||||||
|
|
||||||
@@ -36,6 +37,7 @@ mixin avatar(opts)
|
|||||||
span(class='{{profile.items.gear.equipped.back}}_collar', ng-if='!profile.preferences.costume')
|
span(class='{{profile.items.gear.equipped.back}}_collar', ng-if='!profile.preferences.costume')
|
||||||
span(class='{{profile.items.gear.costume.back}}_collar', ng-if='profile.preferences.costume')
|
span(class='{{profile.items.gear.costume.back}}_collar', ng-if='profile.preferences.costume')
|
||||||
|
|
||||||
|
// Body
|
||||||
span(class='{{profile.items.gear.equipped.body}}', ng-if='!profile.preferences.costume')
|
span(class='{{profile.items.gear.equipped.body}}', ng-if='!profile.preferences.costume')
|
||||||
span(class='{{profile.items.gear.costume.body}}', ng-if='profile.preferences.costume')
|
span(class='{{profile.items.gear.costume.body}}', ng-if='profile.preferences.costume')
|
||||||
|
|
||||||
@@ -46,6 +48,10 @@ mixin avatar(opts)
|
|||||||
span(class='hair_mustache_{{profile.preferences.hair.mustache}}_{{profile.preferences.hair.color}}')
|
span(class='hair_mustache_{{profile.preferences.hair.mustache}}_{{profile.preferences.hair.color}}')
|
||||||
span(class='hair_beard_{{profile.preferences.hair.beard}}_{{profile.preferences.hair.color}}')
|
span(class='hair_beard_{{profile.preferences.hair.beard}}_{{profile.preferences.hair.color}}')
|
||||||
|
|
||||||
|
// Eyewear
|
||||||
|
span(class='{{profile.items.gear.equipped.eyewear}}', ng-if='!profile.preferences.costume')
|
||||||
|
span(class='{{profile.items.gear.costume.eyewear}}', ng-if='profile.preferences.costume')
|
||||||
|
|
||||||
// Helm
|
// Helm
|
||||||
span(class='{{profile.items.gear.equipped.head}}', ng-if='!profile.preferences.costume')
|
span(class='{{profile.items.gear.equipped.head}}', ng-if='!profile.preferences.costume')
|
||||||
span(class='{{profile.items.gear.costume.head}}', ng-if='profile.preferences.costume')
|
span(class='{{profile.items.gear.costume.head}}', ng-if='profile.preferences.costume')
|
||||||
|
|||||||
Reference in New Issue
Block a user