genshin-artifact-simulator
Version:
Simulates artifact farming in Genshin Impact.
63 lines • 3.12 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var lodash_1 = __importDefault(require("lodash"));
var loadData_1 = require("./loadData");
var rng_1 = __importDefault(require("./rng"));
var farmArtifacts = function (_a) {
var _b = _a.set, set = _b === void 0 ? lodash_1.default.head(loadData_1.artifactSets) : _b;
var dropsForSource = lodash_1.default.find(loadData_1.artifactDropsBySource, function (dropForSource) { return dropForSource.source === set.source; });
var drop = lodash_1.default.find(dropsForSource.drops, function (drop) { return drop.rarity === 5; });
var dropCountRng = (0, rng_1.default)("dropCount");
var dropNum = lodash_1.default.find(drop.dropCounts, function (dropCount) {
return dropCountRng >= dropCount.rngMin && dropCountRng < dropCount.rngMax;
}).num;
return {
artifacts: lodash_1.default.times(dropNum, function () {
var possibleSets = set.source === "domain" ? set.domain.sets : loadData_1.bossArtifactSets;
return generateArtifact({
set: possibleSets[Math.floor(lodash_1.default.size(possibleSets) * (0, rng_1.default)("set"))],
});
}),
resinCost: set.source === "domain" ? 20 : 40,
};
};
var generateArtifact = function (_a) {
var set = _a.set;
var slotRng = (0, rng_1.default)("slot");
var statRng = (0, rng_1.default)("stat");
var substatCountRng = (0, rng_1.default)("substatCount");
var dropRatesForSlot = lodash_1.default.find(loadData_1.artifactDropRatesBySlot, function (dropRatesForSlot) {
return slotRng >= dropRatesForSlot.rngMin && slotRng < dropRatesForSlot.rngMax;
});
var dropRatesForStat = lodash_1.default.find(dropRatesForSlot.dropRatesByStat, function (dropRatesForStat) {
return statRng >= dropRatesForStat.rngMin && statRng < dropRatesForStat.rngMax;
});
var substatCount = lodash_1.default.find(loadData_1.artifactSubstatCounts, function (artifactSubstatCount) {
return substatCountRng >= artifactSubstatCount.rngMin &&
substatCountRng < artifactSubstatCount.rngMax;
});
var substats = lodash_1.default.times(substatCount.count, function () {
return generateSubstat({ dropRatesBySubstat: dropRatesForStat.dropRatesBySubstat });
});
return {
setKey: set.key,
slotKey: dropRatesForSlot.slotKey,
rarity: 5,
mainStatKey: dropRatesForStat.statKey,
substats: substats,
};
};
var generateSubstat = function (_a) {
var dropRatesBySubstat = _a.dropRatesBySubstat;
var substatRng = (0, rng_1.default)("substat");
var statKey = lodash_1.default.find(dropRatesBySubstat, function (dropRatesForSubstat) {
return substatRng >= dropRatesForSubstat.rngMin &&
substatRng < dropRatesForSubstat.rngMax;
}).statKey;
return { key: statKey };
};
exports.default = farmArtifacts;
//# sourceMappingURL=farmArtifacts.js.map