Catch up to the current formula
This commit is contained in:
parent
d43dc90c29
commit
bb8052bd01
2 changed files with 93 additions and 29 deletions
|
@ -1,5 +1,7 @@
|
|||
<?php
|
||||
|
||||
ini_set('display_errors', 1);
|
||||
|
||||
include_once(__DIR__ . '/libs/dpclass.php');
|
||||
|
||||
if($_POST['submit']) {
|
||||
|
@ -23,14 +25,13 @@ if($_POST['submit']) {
|
|||
}
|
||||
?>
|
||||
<hr/>
|
||||
<b>Hall Score: <?php echo round($character->hallScore(), 2); ?></b><br/><br/>
|
||||
<b>Hall Score: <?php echo number_format($character->hallScore(), 2, '.', ','); ?></b><br/><br/>
|
||||
|
||||
DPS Score: <?php echo round($character->DPSScore(), 2); ?><br/>
|
||||
EHP Score: <?php echo round($character->EHPScore(), 2); ?><br/>
|
||||
Sustain Score: <?php echo round($character->sustainScore(), 2); ?><br/>
|
||||
Move Score: <?php echo round($character->moveScore(), 2); ?><br/>
|
||||
Paragon Score: <?php echo round($character->paragonScore(), 2); ?><br/>
|
||||
Misc Score: <?php echo round($character->miscScore(), 2); ?><br/>
|
||||
DPS Score: <?php echo number_format($character->DPSScore(), 2, '.', ','); ?><br/>
|
||||
EHP Score: <?php echo number_format($character->EHPScore(), 2, '.', ','); ?><br/>
|
||||
Sustain Score: <?php echo number_format($character->sustainScore(), 2, '.', ','); ?><br/>
|
||||
Move Score: <?php echo number_format($character->moveScore(), 2, '.', ','); ?><br/>
|
||||
Paragon Score: <?php echo number_format($character->paragonScore(), 2, '.', ','); ?><br/>
|
||||
<hr/>
|
||||
<?php
|
||||
}
|
||||
|
|
107
libs/dpclass.php
107
libs/dpclass.php
|
@ -16,11 +16,12 @@ class DPClassFactory {
|
|||
}
|
||||
}
|
||||
|
||||
function findClass($characterPage) {
|
||||
preg_match('{<span class="diablo_.*?">(.*?)</span>}', $characterPage, $class);
|
||||
private
|
||||
function findClass($characterPage) {
|
||||
preg_match('{<span class="diablo_.*?">(.*?)</span>}', $characterPage, $class);
|
||||
|
||||
return strtolower($class[1]);
|
||||
}
|
||||
return strtolower($class[1]);
|
||||
}
|
||||
}
|
||||
|
||||
class DPClass {
|
||||
|
@ -49,8 +50,14 @@ class DPClass {
|
|||
$this->stats[$attributes[1][$i]] = $attributes[2][$i];
|
||||
}
|
||||
|
||||
$this->stats['Gem Life'] = $this->calculateGemLife();
|
||||
$this->modifyExpBonus();
|
||||
|
||||
$this->stats['All Elemental Damage'] = $this->elementalDamage();
|
||||
// $this->stats['DPS Unbuffed'] = $this->modifiedDPSUnbuffed();
|
||||
|
||||
$this->modifyDPSUnbuffed();
|
||||
$this->modifyEHP();
|
||||
$this->modifyHP();
|
||||
}
|
||||
|
||||
function elementalDamage() {
|
||||
|
@ -64,27 +71,91 @@ class DPClass {
|
|||
return ($totalElemental > 0) ? $totalElemental + 1 : 0;
|
||||
}
|
||||
|
||||
function modifiedDPSUnbuffed() {
|
||||
return $this->getStat('DPS Unbuffed') * max(1, 1 + ($this->getStat('All Elemental Damage') / 2))
|
||||
* max(1, 1 + ($this->getStat('+DPS Against Elites') / 2));
|
||||
function calculateGemLife() {
|
||||
if($this->isParagonMaxed()) return 0;
|
||||
|
||||
switch($this->getStat('Exp Bonus')) {
|
||||
case .19: return .12;
|
||||
case .21: return .14;
|
||||
case .25: return .15;
|
||||
case .27: return .16;
|
||||
case .29: return .17;
|
||||
case .31: return .18;
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
|
||||
function modifyExpBonus() {
|
||||
if($this->getStat('Exp Bonus') >= .35) {
|
||||
$this->stats['Exp Bonus'] = $this->getStat('Exp Bonus') - .35;
|
||||
}
|
||||
}
|
||||
|
||||
function modifyDPSUnbuffed() {
|
||||
$this->stats['DPS Unbuffed'] = $this->getStat('DPS Unbuffed') *
|
||||
max(1, 1 + ($this->getStat('All Elemental Damage') / 2)) *
|
||||
max(1, 1 + ($this->getStat('+DPS Against Elites') / 2));
|
||||
}
|
||||
|
||||
function modifyEHP() {
|
||||
$this->stats['EHP Unbuffed'] = $this->getStat('EHP Unbuffed') *
|
||||
(1 + $this->getStat('Life Bonus') + $this->getStat('Gem Life')) /
|
||||
(1 + $this->getStat('Life Bonus'));
|
||||
}
|
||||
|
||||
function modifyHP() {
|
||||
$this->stats['Life'] = $this->getStat('Life') *
|
||||
(1 + $this->getStat('Life Bonus') + $this->getStat('Gem Life')) /
|
||||
(1 + $this->getStat('Life Bonus'));
|
||||
}
|
||||
|
||||
function isParagonMaxed() {
|
||||
return $this->getStat('Paragon Level') == 100;
|
||||
}
|
||||
|
||||
function hallScore() {
|
||||
return $this->DPSScore() * $this->EHPScore() * $this->sustainScore()
|
||||
* $this->moveScore() * $this->paragonScore() * $this->miscScore();
|
||||
* $this->moveScore() * $this->paragonScore();
|
||||
}
|
||||
|
||||
function DPSScore() {
|
||||
return $this->modifiedDPSUnbuffed() / 1000;
|
||||
return $this->getStat('DPS Unbuffed') / 1000;
|
||||
}
|
||||
|
||||
function EHPScore() {}
|
||||
function EHPScore() {
|
||||
$ehp = $this->getStat('EHP Unbuffed');
|
||||
|
||||
if($ehp < 1000000) {
|
||||
return $ehp / 10000;
|
||||
} elseif(1000000 <= $ehp && $ehp <= 2000000) {
|
||||
return 100 + ($ehp - 1000000) / 20000;
|
||||
} elseif(2000000 <= $ehp && $ehp <= 5000000) {
|
||||
return 150 + ($ehp - 2000000) / 40000;
|
||||
} elseif($ehp <= 5000000) {
|
||||
return 225 + ($ehp - 5000000) / 100000;
|
||||
}
|
||||
}
|
||||
|
||||
function sustainScore() {
|
||||
$effectiveLS = $this->getStat('DPS Unbuffed') * $this->getStat('Life Steal') * .2;
|
||||
$effectiveLS = $this->getStat('DPS Unbuffed') *
|
||||
$this->getStat('Life Steal') * .5;
|
||||
$mitigation = $this->getStat('EHP Unbuffed') / $this->getStat('Life');
|
||||
|
||||
return 1 + ($this->getStat('Life on Hit') + $this->getStat('Life per Second') + $effectiveLS)
|
||||
* 10 / $this->getStat('Life');
|
||||
$rawSustainScore = 1 + $mitigation * ($this->getStat('Life on Hit') *
|
||||
(1 + ($this->getStat('Attacks per Second') - 1) / 2) +
|
||||
$effectiveLS + $this->getStat('Life per Second')) /
|
||||
($this->getStat('Life') * $this->EHPScore() * 10000 /
|
||||
$this->getStat('EHP Unbuffed'));
|
||||
|
||||
if($rawSustainScore <= 1.5) {
|
||||
return $rawSustainScore;
|
||||
} elseif(1.5 < $rawSustainScore && $rawSustainScore <= 2) {
|
||||
return 1.5 + ($rawSustainScore - 1.5) / 2;
|
||||
} elseif(2 < $rawSustainScore && $rawSustainScore <= 3) {
|
||||
return 1.75 + ($rawSustainScore - 2) / 4;
|
||||
} else {
|
||||
return 2 + ($rawSustainScore - 3) / 10;
|
||||
}
|
||||
}
|
||||
|
||||
function moveScore() {
|
||||
|
@ -95,14 +166,6 @@ class DPClass {
|
|||
return 1 + $this->stats['Paragon Level'] / 2 / 100;
|
||||
}
|
||||
|
||||
function miscScore() {
|
||||
$bonusXP = $this->getStat('Exp Bonus');
|
||||
if($bonusXP >= .35) $bonusXP -= .35;
|
||||
|
||||
return 1 + ($this->getStat('Melee Damage Reduction') + $this->getStat('Missile Damage Reduction')
|
||||
+ $bonusXP) / 2;
|
||||
}
|
||||
|
||||
function getStat($name) {
|
||||
return (isset($this->stats[$name])) ? $this->stats[$name] : 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue