mirror of
https://github.com/sudoxnym/habitica.git
synced 2026-07-12 23:08:35 +00:00
Merge pull request #155 from HabitRPG/sabe/drops
Overhaul drop chance to a percentage multiplier system
This commit is contained in:
commit
fdc47b4d29
2 changed files with 23 additions and 16 deletions
13
dist/habitrpg-shared.js
vendored
13
dist/habitrpg-shared.js
vendored
|
|
@ -12645,14 +12645,15 @@ var process=require("__browserify_process");(function() {
|
|||
}), user);
|
||||
},
|
||||
randomDrop: function(modifiers) {
|
||||
var acceptableDrops, bonus, chance, drop, dropK, quest, rarity, task, _base, _base1, _base2, _name, _name1, _name2, _ref, _ref1, _ref2, _ref3, _ref4;
|
||||
var acceptableDrops, chance, drop, dropK, quest, rarity, task, _base, _base1, _base2, _name, _name1, _name2, _ref, _ref1, _ref2, _ref3, _ref4;
|
||||
|
||||
task = modifiers.task;
|
||||
bonus = Math.abs(task.value) * task.priority + (task.streak || 0) + (user._statsComputed.per * .5);
|
||||
bonus /= 100;
|
||||
chance = api.diminishingReturns(bonus, 1, 0.5);
|
||||
chance = Math.abs(task.value - 25) / 1000;
|
||||
chance *= task.priority * (1 + (task.streak / 100 || 0)) * (1 + (user._statsComputed.per / 50)) * (1 + (user.contributor.level / 25 || 0)) * (1 + (user.achievements.rebirths / 25 || 0)) * (1 + (user.achievements.streak / 100 || 0)) * (user._tmp.crit || 1) * (1 + (_.reduce(task.checklist, (function(m, i) {
|
||||
return m + (i.completed ? 1 : 0);
|
||||
}), 0) || 0));
|
||||
quest = content.quests[(_ref = user.party.quest) != null ? _ref.key : void 0];
|
||||
if ((quest != null ? quest.collect : void 0) && user.fns.predictableRandom(user.stats.gp) < bonus) {
|
||||
if ((quest != null ? quest.collect : void 0) && user.fns.predictableRandom(user.stats.gp) < (chance * 2)) {
|
||||
dropK = user.fns.randomVal(quest.collect, {
|
||||
key: true
|
||||
});
|
||||
|
|
@ -12661,7 +12662,7 @@ var process=require("__browserify_process");(function() {
|
|||
user.markModified('party.quest.progress');
|
||||
}
|
||||
}
|
||||
if ((api.daysSince(user.items.lastDrop.date, user.preferences) === 0) && (user.items.lastDrop.count >= 5)) {
|
||||
if ((api.daysSince(user.items.lastDrop.date, user.preferences) === 0) && (user.items.lastDrop.count >= 5 + Math.floor(user._statsComputed.per / 10))) {
|
||||
return;
|
||||
}
|
||||
if (((_ref1 = user.flags) != null ? _ref1.dropsEnabled : void 0) && user.fns.predictableRandom(user.stats.exp) < chance) {
|
||||
|
|
|
|||
|
|
@ -981,23 +981,29 @@ api.wrap = (user, main=true) ->
|
|||
{task} = modifiers
|
||||
|
||||
# % chance of getting a drop
|
||||
bonus =
|
||||
Math.abs(task.value) * # + Task Redness
|
||||
task.priority + # * Task Priority
|
||||
(task.streak or 0) + # + Streak bonus
|
||||
(user._statsComputed.per * .5) # + Perception
|
||||
bonus /= 100 # /100 (as a percent)
|
||||
chance = api.diminishingReturns(bonus, 1, 0.5) # see HabitRPG/habitrpg#1922 for details
|
||||
#console.log "Drop Equation: Bonus(#{bonus.toFixed(3)}), Modified Chance(#{chance.toFixed(3)})\n"
|
||||
|
||||
chance = Math.abs(task.value - 25) / 1000 # Base drop chance based on task value. Subtract more than the max possible task value so we never get a 0
|
||||
|
||||
chance *=
|
||||
task.priority * # Task priority: +50% for Medium, +100% for Hard
|
||||
(1 + (task.streak / 100 or 0)) * # Streak bonus: +1% per streak
|
||||
(1 + (user._statsComputed.per / 50)) * # PERception: +2% per point
|
||||
(1 + (user.contributor.level / 25 or 0)) * # Contrib levels: +4% per level
|
||||
(1 + (user.achievements.rebirths / 25 or 0)) * # Rebirths: +4% per achievement
|
||||
(1 + (user.achievements.streak / 100 or 0)) * # Streak achievements: +1% per achievement
|
||||
(user._tmp.crit or 1) * # Use the crit multiplier if we got one
|
||||
(1 + (_.reduce(task.checklist,((m,i)->m+(if i.completed then 1 else 0)),0) or 0)) # +100% per checklist item complete
|
||||
|
||||
#console.log("Drop chance: " + chance)
|
||||
|
||||
quest = content.quests[user.party.quest?.key]
|
||||
if quest?.collect and user.fns.predictableRandom(user.stats.gp) < bonus # NOTE: < bonus, higher chance than drops
|
||||
if quest?.collect and user.fns.predictableRandom(user.stats.gp) < (chance * 2) # 2x as likely to get a collection quest drop as a pet item drop
|
||||
dropK = user.fns.randomVal quest.collect, {key:true}
|
||||
user.party.quest.progress.collect[dropK]++
|
||||
user.markModified? 'party.quest.progress'
|
||||
#console.log {progress:user.party.quest.progress}
|
||||
|
||||
return if (api.daysSince(user.items.lastDrop.date, user.preferences) is 0) and (user.items.lastDrop.count >= 5)
|
||||
return if (api.daysSince(user.items.lastDrop.date, user.preferences) is 0) and (user.items.lastDrop.count >= 5 + Math.floor(user._statsComputed.per / 10))
|
||||
if user.flags?.dropsEnabled and user.fns.predictableRandom(user.stats.exp) < chance
|
||||
|
||||
# current breakdown - 1% (adjustable) chance on drop
|
||||
|
|
|
|||
Loading…
Reference in a new issue