mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 06:37:23 +01:00
292 lines
7.6 KiB
JavaScript
292 lines
7.6 KiB
JavaScript
var _, clearUser, id, party, s, shared, task, user;
|
|
|
|
shared = require('../../../common/script/index.js');
|
|
|
|
_ = require('lodash');
|
|
|
|
id = shared.uuid();
|
|
|
|
user = {
|
|
stats: {
|
|
"class": 'warrior',
|
|
buffs: {
|
|
per: 0,
|
|
int: 0,
|
|
con: 0,
|
|
str: 0
|
|
}
|
|
},
|
|
party: {
|
|
quest: {
|
|
key: 'evilsanta',
|
|
progress: {
|
|
up: 0,
|
|
down: 0
|
|
}
|
|
}
|
|
},
|
|
preferences: {
|
|
automaticAllocation: false
|
|
},
|
|
achievements: {},
|
|
flags: {
|
|
levelDrops: {}
|
|
},
|
|
items: {
|
|
eggs: {},
|
|
hatchingPotions: {},
|
|
food: {},
|
|
quests: {},
|
|
gear: {
|
|
equipped: {
|
|
weapon: 'weapon_warrior_4',
|
|
armor: 'armor_warrior_4',
|
|
shield: 'shield_warrior_4',
|
|
head: 'head_warrior_4'
|
|
}
|
|
}
|
|
},
|
|
habits: [
|
|
shared.taskDefaults({
|
|
id: id,
|
|
value: 0
|
|
})
|
|
],
|
|
dailys: [
|
|
{
|
|
"text": "1"
|
|
}, {
|
|
"text": "1"
|
|
}, {
|
|
"text": "1"
|
|
}, {
|
|
"text": "1"
|
|
}, {
|
|
"text": "1"
|
|
}, {
|
|
"text": "1"
|
|
}, {
|
|
"text": "1"
|
|
}, {
|
|
"text": "1"
|
|
}, {
|
|
"text": "1"
|
|
}, {
|
|
"text": "1"
|
|
}, {
|
|
"text": "1"
|
|
}, {
|
|
"text": "1"
|
|
}, {
|
|
"text": "1"
|
|
}, {
|
|
"text": "1"
|
|
}, {
|
|
"text": "1"
|
|
}
|
|
],
|
|
todos: [],
|
|
rewards: []
|
|
};
|
|
|
|
shared.wrap(user);
|
|
|
|
s = user.stats;
|
|
|
|
task = user.tasks[id];
|
|
|
|
party = [user];
|
|
|
|
console.log("\n\n================================================");
|
|
|
|
console.log("New Simulation");
|
|
|
|
console.log("================================================\n\n");
|
|
|
|
clearUser = function(lvl) {
|
|
if (lvl == null) {
|
|
lvl = 1;
|
|
}
|
|
_.merge(user.stats, {
|
|
exp: 0,
|
|
gp: 0,
|
|
hp: 50,
|
|
lvl: lvl,
|
|
str: lvl * 1.5,
|
|
con: lvl * 1.5,
|
|
per: lvl * 1.5,
|
|
int: lvl * 1.5,
|
|
mp: 100
|
|
});
|
|
_.merge(s.buffs, {
|
|
str: 0,
|
|
con: 0,
|
|
int: 0,
|
|
per: 0
|
|
});
|
|
_.merge(user.party.quest.progress, {
|
|
up: 0,
|
|
down: 0
|
|
});
|
|
return user.items.lastDrop = {
|
|
count: 0
|
|
};
|
|
};
|
|
|
|
_.each([1, 25, 50, 75, 100], function(lvl) {
|
|
console.log("[LEVEL " + lvl + "] (" + (lvl * 2) + " points total in every attr)\n\n");
|
|
_.each({
|
|
red: -25,
|
|
yellow: 0,
|
|
green: 35
|
|
}, function(taskVal, color) {
|
|
var _party, b4, str;
|
|
console.log("[task.value = " + taskVal + " (" + color + ")]");
|
|
console.log("direction\texpΔ\t\thpΔ\tgpΔ\ttask.valΔ\ttask.valΔ bonus\t\tboss-hit");
|
|
_.each(['up', 'down'], function(direction) {
|
|
var b4, delta;
|
|
clearUser(lvl);
|
|
b4 = {
|
|
hp: s.hp,
|
|
taskVal: taskVal
|
|
};
|
|
task.value = taskVal;
|
|
if (direction === 'up') {
|
|
task.type = 'daily';
|
|
}
|
|
delta = user.ops.score({
|
|
params: {
|
|
id: id,
|
|
direction: direction
|
|
}
|
|
});
|
|
return console.log((direction === 'up' ? '↑' : '↓') + "\t\t" + s.exp + "/" + (shared.tnl(s.lvl)) + "\t\t" + ((b4.hp - s.hp).toFixed(1)) + "\t" + (s.gp.toFixed(1)) + "\t" + (delta.toFixed(1)) + "\t\t" + ((task.value - b4.taskVal - delta).toFixed(1)) + "\t\t\t" + (user.party.quest.progress.up.toFixed(1)));
|
|
});
|
|
str = '- [Wizard]';
|
|
task.value = taskVal;
|
|
clearUser(lvl);
|
|
b4 = {
|
|
taskVal: taskVal
|
|
};
|
|
shared.content.spells.wizard.fireball.cast(user, task);
|
|
str += "\tfireball(task.valΔ:" + ((task.value - taskVal).toFixed(1)) + " exp:" + (s.exp.toFixed(1)) + " bossHit:" + (user.party.quest.progress.up.toFixed(2)) + ")";
|
|
task.value = taskVal;
|
|
clearUser(lvl);
|
|
_party = [
|
|
user, {
|
|
stats: {
|
|
mp: 0
|
|
}
|
|
}
|
|
];
|
|
shared.content.spells.wizard.mpheal.cast(user, _party);
|
|
str += "\t| mpheal(mp:" + _party[1].stats.mp + ")";
|
|
task.value = taskVal;
|
|
clearUser(lvl);
|
|
shared.content.spells.wizard.earth.cast(user, party);
|
|
str += "\t\t\t\t| earth(buffs.int:" + s.buffs.int + ")";
|
|
s.buffs.int = 0;
|
|
task.value = taskVal;
|
|
clearUser(lvl);
|
|
shared.content.spells.wizard.frost.cast(user, {});
|
|
str += "\t\t\t| frost(N/A)";
|
|
console.log(str);
|
|
str = '- [Warrior]';
|
|
task.value = taskVal;
|
|
clearUser(lvl);
|
|
shared.content.spells.warrior.smash.cast(user, task);
|
|
b4 = {
|
|
taskVal: taskVal
|
|
};
|
|
str += "\tsmash(task.valΔ:" + ((task.value - taskVal).toFixed(1)) + ")";
|
|
task.value = taskVal;
|
|
clearUser(lvl);
|
|
shared.content.spells.warrior.defensiveStance.cast(user, {});
|
|
str += "\t\t| defensiveStance(buffs.con:" + s.buffs.con + ")";
|
|
s.buffs.con = 0;
|
|
task.value = taskVal;
|
|
clearUser(lvl);
|
|
shared.content.spells.warrior.valorousPresence.cast(user, party);
|
|
str += "\t\t\t| valorousPresence(buffs.str:" + s.buffs.str + ")";
|
|
s.buffs.str = 0;
|
|
task.value = taskVal;
|
|
clearUser(lvl);
|
|
shared.content.spells.warrior.intimidate.cast(user, party);
|
|
str += "\t\t| intimidate(buffs.con:" + s.buffs.con + ")";
|
|
s.buffs.con = 0;
|
|
console.log(str);
|
|
str = '- [Rogue]';
|
|
task.value = taskVal;
|
|
clearUser(lvl);
|
|
shared.content.spells.rogue.pickPocket.cast(user, task);
|
|
str += "\tpickPocket(gp:" + (s.gp.toFixed(1)) + ")";
|
|
task.value = taskVal;
|
|
clearUser(lvl);
|
|
shared.content.spells.rogue.backStab.cast(user, task);
|
|
b4 = {
|
|
taskVal: taskVal
|
|
};
|
|
str += "\t\t| backStab(task.valΔ:" + ((task.value - b4.taskVal).toFixed(1)) + " exp:" + (s.exp.toFixed(1)) + " gp:" + (s.gp.toFixed(1)) + ")";
|
|
task.value = taskVal;
|
|
clearUser(lvl);
|
|
shared.content.spells.rogue.toolsOfTrade.cast(user, party);
|
|
str += "\t| toolsOfTrade(buffs.per:" + s.buffs.per + ")";
|
|
s.buffs.per = 0;
|
|
task.value = taskVal;
|
|
clearUser(lvl);
|
|
shared.content.spells.rogue.stealth.cast(user, {});
|
|
str += "\t\t| stealth(avoiding " + user.stats.buffs.stealth + " tasks)";
|
|
user.stats.buffs.stealth = 0;
|
|
console.log(str);
|
|
str = '- [Healer]';
|
|
task.value = taskVal;
|
|
clearUser(lvl);
|
|
s.hp = 0;
|
|
shared.content.spells.healer.heal.cast(user, {});
|
|
str += "\theal(hp:" + (s.hp.toFixed(1)) + ")";
|
|
task.value = taskVal;
|
|
clearUser(lvl);
|
|
shared.content.spells.healer.brightness.cast(user, {});
|
|
b4 = {
|
|
taskVal: taskVal
|
|
};
|
|
str += "\t\t\t| brightness(task.valΔ:" + ((task.value - b4.taskVal).toFixed(1)) + ")";
|
|
task.value = taskVal;
|
|
clearUser(lvl);
|
|
shared.content.spells.healer.protectAura.cast(user, party);
|
|
str += "\t\t\t| protectAura(buffs.con:" + s.buffs.con + ")";
|
|
s.buffs.con = 0;
|
|
task.value = taskVal;
|
|
clearUser(lvl);
|
|
s.hp = 0;
|
|
shared.content.spells.healer.heallAll.cast(user, party);
|
|
str += "\t\t| heallAll(hp:" + (s.hp.toFixed(1)) + ")";
|
|
console.log(str);
|
|
return console.log('\n');
|
|
});
|
|
return console.log('------------------------------------------------------------');
|
|
});
|
|
|
|
|
|
/*
|
|
_.each [1,25,50,75,100,125], (lvl) ->
|
|
console.log "[LEVEL #{lvl}] (#{lvl*2} points in every attr)\n\n"
|
|
_.each {red:-25,yellow:0,green:35}, (taskVal, color) ->
|
|
console.log "[task.value = #{taskVal} (#{color})]"
|
|
console.log "direction\texpΔ\t\thpΔ\tgpΔ\ttask.valΔ\ttask.valΔ bonus\t\tboss-hit"
|
|
_.each ['up','down'], (direction) ->
|
|
clearUser(lvl)
|
|
b4 = {hp:s.hp, taskVal}
|
|
task.value = taskVal
|
|
task.type = 'daily' if direction is 'up'
|
|
delta = user.ops.score params:{id, direction}
|
|
console.log "#{if direction is 'up' then '↑' else '↓'}\t\t#{s.exp}/#{shared.tnl(s.lvl)}\t\t#{(b4.hp-s.hp).toFixed(1)}\t#{s.gp.toFixed(1)}\t#{delta.toFixed(1)}\t\t#{(task.value-b4.taskVal-delta).toFixed(1)}\t\t\t#{user.party.quest.progress.up.toFixed(1)}"
|
|
|
|
task.value = taskVal;clearUser(lvl)
|
|
shared.content.spells.rogue.stealth.cast(user,{})
|
|
console.log "\t\t| stealth(avoiding #{user.stats.buffs.stealth} tasks)"
|
|
user.stats.buffs.stealth = 0
|
|
|
|
console.log user.dailys.length
|
|
*/
|