Android build v1.0.56
This commit is contained in:
+13
-4
@@ -2307,7 +2307,10 @@ function completeRoguelike(database, characterId, accountId, runMetrics) {
|
||||
const bossesCleared = Number(runMetrics?.bossesCleared ?? Math.floor(encountersCleared / 3))
|
||||
const experienceMode = runMetrics?.experienceMode === 'pvp-boss-quarter-level'
|
||||
? 'pvp-boss-quarter-level'
|
||||
: 'default'
|
||||
: runMetrics?.experienceMode === 'pvp-fight-twelfth-level'
|
||||
? 'pvp-fight-twelfth-level'
|
||||
: 'default'
|
||||
const fightsCleared = Number(runMetrics?.fightsCleared ?? encountersCleared)
|
||||
const resourceSpent = Number(runMetrics?.resourceSpent)
|
||||
const durationSeconds = Number(runMetrics?.durationSeconds)
|
||||
if (!Number.isInteger(dungeonId) || dungeonId < 1) {
|
||||
@@ -2322,6 +2325,9 @@ function completeRoguelike(database, characterId, accountId, runMetrics) {
|
||||
if (!Number.isInteger(bossesCleared) || bossesCleared < 0 || bossesCleared > 100000) {
|
||||
throw new Error('The roguelike boss total is invalid.')
|
||||
}
|
||||
if (!Number.isInteger(fightsCleared) || fightsCleared < 0 || fightsCleared > 100000) {
|
||||
throw new Error('The roguelike fight total is invalid.')
|
||||
}
|
||||
if (!Number.isInteger(resourceSpent) || resourceSpent < 0 || resourceSpent > 100000) {
|
||||
throw new Error('The run resource total is invalid.')
|
||||
}
|
||||
@@ -2374,14 +2380,15 @@ function completeRoguelike(database, characterId, accountId, runMetrics) {
|
||||
`).get(maxLevel).experienceRequired
|
||||
let newExperience = character.experience
|
||||
let newLevel = character.level
|
||||
if (experienceMode === 'pvp-boss-quarter-level') {
|
||||
if (experienceMode === 'pvp-boss-quarter-level' || experienceMode === 'pvp-fight-twelfth-level') {
|
||||
const catchUpTargetLevel = database.prepare(`
|
||||
SELECT COALESCE(MAX(level), 0) AS level
|
||||
FROM characters
|
||||
WHERE account_id = ?
|
||||
AND id != ?
|
||||
`).get(accountId, characterId).level
|
||||
for (let bossIndex = 0; bossIndex < bossesCleared && newExperience < maxExperience; bossIndex += 1) {
|
||||
const rewardUnits = experienceMode === 'pvp-boss-quarter-level' ? bossesCleared : fightsCleared
|
||||
for (let rewardIndex = 0; rewardIndex < rewardUnits && newExperience < maxExperience; rewardIndex += 1) {
|
||||
const currentLevelFloor = database.prepare(`
|
||||
SELECT experience_required AS experienceRequired
|
||||
FROM level_progression
|
||||
@@ -2395,7 +2402,9 @@ function completeRoguelike(database, characterId, accountId, runMetrics) {
|
||||
WHERE level = ?
|
||||
`).get(newLevel + 1).experienceRequired
|
||||
const levelBand = Math.max(1, nextLevelExperience - currentLevelFloor)
|
||||
const rewardRate = catchUpTargetLevel > newLevel ? 0.5 : 0.25
|
||||
const rewardRate = experienceMode === 'pvp-boss-quarter-level'
|
||||
? (catchUpTargetLevel > newLevel ? 0.5 : 0.25)
|
||||
: (catchUpTargetLevel > newLevel ? 1 / 6 : 1 / 12)
|
||||
newExperience = Math.min(maxExperience, newExperience + Math.round(levelBand * rewardRate))
|
||||
newLevel = database.prepare(`
|
||||
SELECT MAX(level) AS level
|
||||
|
||||
Reference in New Issue
Block a user