Skip to content

Commit

Permalink
Merge pull request #30 from arvi0731/master
Browse files Browse the repository at this point in the history
fix: win chance percentage calculation and added xp reward in ui
  • Loading branch information
ed3ath committed Aug 1, 2021
2 parents 30c49a3 + 1c8ec0e commit d9e37da
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 5 deletions.
6 changes: 4 additions & 2 deletions public/js/core.js
Original file line number Diff line number Diff line change
Expand Up @@ -430,12 +430,14 @@ async function combatSimulate() {
const targets = await characterTargets(charId, weapId)
const enemies = await getEnemyDetails(targets)

combatResult.html('Enemy | Element | Power | Est. Reward | Chance<br><hr>')
combatResult.html('Enemy | Element | Power | Est. Reward | XP | Chance<br><hr>')
combatResult.append(await Promise.all(enemies.map(async (enemy, i) => {
const chance = getWinChance(charData, weapData, enemy.power, enemy.trait)
enemy.element = traitNumberToName(enemy.trait)
const reward = fromEther(await usdToSkill(web3.utils.toBN(Number(fightGasOffset) + ((Number(fightBaseline) * Math.sqrt(parseInt(enemy.power) / 1000)) * parseInt(stamina)))));
return `#${i + 1} | ${elemToColor(enemy.element)} | ${enemy.power} | ${truncateToDecimals(reward, 6)} | ${chanceColor(chance)}<br>`
const alignedPower = getAlignedCharacterPower(charData, weapData)
const expReward = Math.floor((enemy.power / alignedPower) * 32) * parseInt(stamina)
return `#${i + 1} | ${elemToColor(enemy.element)} | ${enemy.power} | ${truncateToDecimals(reward, 6)} | ${expReward} | ${chanceColor(chance)}<br>`
})))
$('#btn-simulate').removeAttr('disabled')
} catch (e) {
Expand Down
24 changes: 21 additions & 3 deletions public/js/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -172,18 +172,36 @@ function GetTotalMultiplierForTrait(wep, trait) {
return 1 + (0.01 * (Stat1PercentForChar(wep, trait) + Stat2PercentForChar(wep, trait) + Stat3PercentForChar(wep, trait)));
}

function getAlignedCharacterPower(charData, weapData) {
const characterPower = CharacterPower(charData.level);
const playerElement = parseInt(charData.trait, 10);
const weaponMultiplier = GetTotalMultiplierForTrait(weapData, playerElement);
const totalPower = (characterPower * weaponMultiplier) + weapData.bonusPower;
return totalPower;
}

function getWinChance(charData, weapData, enemyPower, enemyElement) {
const characterPower = CharacterPower(charData.level);
const playerElement = parseInt(charData.trait, 10);
const weaponElement = parseInt(WeaponElement[weapData.element], 10);
const weaponMultiplier = GetTotalMultiplierForTrait(weapData, playerElement);
const totalPower = (characterPower * weaponMultiplier) + weapData.bonusPower;
const totalPower = getAlignedCharacterPower(charData, weapData);
const totalMultiplier = 1 + (0.075 * (weaponElement === playerElement ? 1 : 0)) + (0.075 * getElementAdvantage(playerElement, enemyElement));
const playerMin = totalPower * totalMultiplier * 0.9;
const playerMax = totalPower * totalMultiplier * 1.1;
const playerRange = playerMax - playerMin;
const enemyMin = enemyPower * 0.9;
const enemyMax = enemyPower * 1.1;
let win = 0;
let lose = 0;
for (let playerRoll = Math.floor(playerMin); playerRoll <= playerMax; playerRoll++) {
for (let enemyRoll = Math.floor(enemyMin); enemyRoll <= enemyMax; enemyRoll++) {
if (playerRoll >= enemyRoll) {
win++;
} else {
lose++;
}
}
}
return win / (win + lose);
const enemyRange = enemyMax - enemyMin;
let rollingTotal = 0;
// shortcut: if it is impossible for one side to win, just say so
Expand Down

0 comments on commit d9e37da

Please sign in to comment.