mirror of
https://github.com/sudoxnym/habitica.git
synced 2026-08-05 12:02:13 +00:00
Merge remote-tracking branch 'origin/sabe/rebirth' into develop
Conflicts: dist/customizer.css dist/habitrpg-shared.css dist/spritesmith.css dist/spritesmith.png
This commit is contained in:
commit
19f53c3675
7 changed files with 628 additions and 506 deletions
508
dist/customizer.css
vendored
508
dist/customizer.css
vendored
File diff suppressed because it is too large
Load diff
2
dist/habitrpg-shared.css
vendored
2
dist/habitrpg-shared.css
vendored
File diff suppressed because one or more lines are too long
62
dist/habitrpg-shared.js
vendored
62
dist/habitrpg-shared.js
vendored
|
|
@ -11266,11 +11266,68 @@ var process=require("__browserify_process");(function() {
|
||||||
}
|
}
|
||||||
user.balance--;
|
user.balance--;
|
||||||
_.each(user.tasks, function(task) {
|
_.each(user.tasks, function(task) {
|
||||||
|
if (task.type !== 'reward') {
|
||||||
return task.value = 0;
|
return task.value = 0;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
user.stats.hp = 50;
|
user.stats.hp = 50;
|
||||||
return typeof cb === "function" ? cb(null, user) : void 0;
|
return typeof cb === "function" ? cb(null, user) : void 0;
|
||||||
},
|
},
|
||||||
|
rebirth: function(req, cb) {
|
||||||
|
var flags, gear, lvl, stats;
|
||||||
|
if (user.balance < 2) {
|
||||||
|
return cb({
|
||||||
|
code: 401,
|
||||||
|
message: "Not enough gems."
|
||||||
|
}, req);
|
||||||
|
}
|
||||||
|
user.balance -= 2;
|
||||||
|
lvl = user.stats.lvl;
|
||||||
|
_.each(user.tasks, function(task) {
|
||||||
|
if (task.type !== 'reward') {
|
||||||
|
task.value = 0;
|
||||||
|
}
|
||||||
|
if (task.type === 'daily') {
|
||||||
|
return task.streak = 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
stats = user.stats;
|
||||||
|
stats.buffs = {};
|
||||||
|
stats.hp = 50;
|
||||||
|
stats.lvl = 1;
|
||||||
|
stats["class"] = 'warrior';
|
||||||
|
_.each(['per', 'int', 'con', 'str', 'points', 'gp', 'exp', 'mp'], function(value) {
|
||||||
|
return stats[value] = 0;
|
||||||
|
});
|
||||||
|
gear = user.items.gear;
|
||||||
|
_.each(['equipped', 'costume'], function(type) {
|
||||||
|
gear[type].armor = 'armor_base_0';
|
||||||
|
gear[type].weapon = 'weapon_warrior_0';
|
||||||
|
gear[type].head = 'head_base_0';
|
||||||
|
return gear[type].shield = 'shield_base_0';
|
||||||
|
});
|
||||||
|
gear.owned = {
|
||||||
|
weapon_warrior_0: true
|
||||||
|
};
|
||||||
|
if (typeof user.markModified === "function") {
|
||||||
|
user.markModified('items.gear.owned');
|
||||||
|
}
|
||||||
|
flags = user.flags;
|
||||||
|
if (!(user.achievements.ultimateGear || user.achievements.beastMaster)) {
|
||||||
|
flags.rebirthEnabled = false;
|
||||||
|
}
|
||||||
|
flags.itemsEnabled = false;
|
||||||
|
flags.dropsEnabled = false;
|
||||||
|
flags.classSelected = false;
|
||||||
|
if (!user.achievements.rebirths) {
|
||||||
|
user.achievements.rebirths = 1;
|
||||||
|
user.achievements.rebirthLevel = lvl;
|
||||||
|
} else if (lvl > user.achievements.rebirthLevel) {
|
||||||
|
user.achievements.rebirths++;
|
||||||
|
user.achievements.rebirthLevel = lvl;
|
||||||
|
}
|
||||||
|
return cb(null, req);
|
||||||
|
},
|
||||||
clearCompleted: function(req, cb) {
|
clearCompleted: function(req, cb) {
|
||||||
user.todos = _.where(user.todos, {
|
user.todos = _.where(user.todos, {
|
||||||
completed: false
|
completed: false
|
||||||
|
|
@ -12041,7 +12098,10 @@ var process=require("__browserify_process");(function() {
|
||||||
user.items.eggs["Wolf"] = 1;
|
user.items.eggs["Wolf"] = 1;
|
||||||
}
|
}
|
||||||
if (!user.flags.classSelected && user.stats.lvl >= 10) {
|
if (!user.flags.classSelected && user.stats.lvl >= 10) {
|
||||||
return user.flags.classSelected;
|
user.flags.classSelected;
|
||||||
|
}
|
||||||
|
if (!user.flags.rebirthEnabled && (user.stats.lvl >= 50 || user.achievements.ultimateGear || user.achievements.beastMaster)) {
|
||||||
|
return user.flags.rebirthEnabled = true;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
508
dist/spritesmith.css
vendored
508
dist/spritesmith.css
vendored
File diff suppressed because it is too large
Load diff
BIN
dist/spritesmith.png
vendored
BIN
dist/spritesmith.png
vendored
Binary file not shown.
|
Before Width: | Height: | Size: 246 KiB After Width: | Height: | Size: 248 KiB |
BIN
img/sprites/spritesmith/items/rebirth_orb.png
Normal file
BIN
img/sprites/spritesmith/items/rebirth_orb.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
|
|
@ -402,10 +402,58 @@ api.wrap = (user) ->
|
||||||
return cb? {code:401,message: "Not enough gems."}, req
|
return cb? {code:401,message: "Not enough gems."}, req
|
||||||
user.balance--
|
user.balance--
|
||||||
_.each user.tasks, (task) ->
|
_.each user.tasks, (task) ->
|
||||||
|
unless task.type is 'reward'
|
||||||
task.value = 0
|
task.value = 0
|
||||||
user.stats.hp = 50
|
user.stats.hp = 50
|
||||||
cb? null, user
|
cb? null, user
|
||||||
|
|
||||||
|
rebirth: (req, cb) ->
|
||||||
|
# Cost is 8 Gems ($2)
|
||||||
|
if user.balance < 2
|
||||||
|
return cb {code:401,message: "Not enough gems."}, req
|
||||||
|
user.balance -= 2
|
||||||
|
# Save off user's level, for calculating achievement eligibility later
|
||||||
|
lvl = user.stats.lvl
|
||||||
|
# Turn tasks yellow, zero out streaks
|
||||||
|
_.each user.tasks, (task) ->
|
||||||
|
unless task.type is 'reward'
|
||||||
|
task.value = 0
|
||||||
|
if task.type is 'daily'
|
||||||
|
task.streak = 0
|
||||||
|
# Reset all dynamic stats
|
||||||
|
stats = user.stats
|
||||||
|
stats.buffs = {}
|
||||||
|
stats.hp = 50
|
||||||
|
stats.lvl = 1
|
||||||
|
stats.class = 'warrior'
|
||||||
|
_.each ['per','int','con','str','points','gp','exp','mp'], (value) ->
|
||||||
|
stats[value] = 0
|
||||||
|
# Deequip character, set back to base armor and training sword
|
||||||
|
gear = user.items.gear
|
||||||
|
_.each ['equipped', 'costume'], (type) ->
|
||||||
|
gear[type].armor = 'armor_base_0'
|
||||||
|
gear[type].weapon = 'weapon_warrior_0'
|
||||||
|
gear[type].head = 'head_base_0'
|
||||||
|
gear[type].shield = 'shield_base_0'
|
||||||
|
# Strip owned gear down to the training sword
|
||||||
|
gear.owned = {weapon_warrior_0:true}
|
||||||
|
user.markModified? 'items.gear.owned'
|
||||||
|
# Remove unlocked features
|
||||||
|
flags = user.flags
|
||||||
|
if not (user.achievements.ultimateGear or user.achievements.beastMaster)
|
||||||
|
flags.rebirthEnabled = false
|
||||||
|
flags.itemsEnabled = false
|
||||||
|
flags.dropsEnabled = false
|
||||||
|
flags.classSelected = false
|
||||||
|
# Award an achievement if this is their first Rebirth, or if they made it further than last time
|
||||||
|
if not (user.achievements.rebirths)
|
||||||
|
user.achievements.rebirths = 1
|
||||||
|
user.achievements.rebirthLevel = lvl
|
||||||
|
else if (lvl > user.achievements.rebirthLevel)
|
||||||
|
user.achievements.rebirths++
|
||||||
|
user.achievements.rebirthLevel = lvl
|
||||||
|
cb null, req
|
||||||
|
|
||||||
# ------
|
# ------
|
||||||
# Tasks
|
# Tasks
|
||||||
# ------
|
# ------
|
||||||
|
|
@ -1003,6 +1051,8 @@ api.wrap = (user) ->
|
||||||
user.items.eggs["Wolf"] = 1
|
user.items.eggs["Wolf"] = 1
|
||||||
if !user.flags.classSelected and user.stats.lvl >= 10
|
if !user.flags.classSelected and user.stats.lvl >= 10
|
||||||
user.flags.classSelected
|
user.flags.classSelected
|
||||||
|
if !user.flags.rebirthEnabled and (user.stats.lvl >= 50 or user.achievements.ultimateGear or user.achievements.beastMaster)
|
||||||
|
user.flags.rebirthEnabled = true
|
||||||
|
|
||||||
###
|
###
|
||||||
------------------------------------------------------
|
------------------------------------------------------
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue