Скрипт для path of exile

03.04.2018

Мне было лень руками подбирать сочетания качества на 40, поэтому я написал скрипт, который перебирает все варианты и выдает те, что дают нужное число в итоге сложения.

poe-calc.php (Download)

 <?php

  error_reporting(E_ALL);
  ini_set('display_errors', 'On');

  class soMain
  {
    protected $_aIn = [];
    protected $_aResult= [];
    
    protected function _go($aPos, $iLevel) 
    {

/*echo '<pre>';
print_r(implode(',',$aPos));
echo '</pre>';*/

      $iNextLevel = $iLevel+1;

      $aTmp = [];
      $iSumm1 = 0;
      foreach($aPos as $iPos)
      {
        $iSumm1 += $this->_aIn[$iPos];
        $aTmp[] = $this->_aIn[$iPos];
      }
      
      
      foreach($this->_aIn as $iPos => $iVal)
      {
        if(!in_array($iPos, $aPos))
        {
          $iSumm2 = $iSumm1 + $iVal;
          if($iSumm2 > 40)
          {
            // do nothing
          }
          else if($iSumm2 == 40)
          {
            $this->_aResult[] = implode(',',array_merge($aTmp, [$iVal]));
          }
          else // $iSumm2 < 40
          {
            $aSubPos = $aPos;
            $aSubPos[] = $iPos;
            $this->_go($aSubPos, $iNextLevel);
          }
        }
      }
    }
    
    public function go($aIn) 
    {
      foreach($aIn as &$Val)
      {
        $Val = (int) $Val;
      }

      rsort($aIn);
      $this->_aIn = $aIn;

      echo 'IN:<pre>';
      print_r($this->_aIn);
      echo '</pre>';

      foreach($this->_aIn as $iPos => $iVal)
      {
        $this->_go([$iPos], 0);
      }
      
      echo 'Result:<pre>';
      print_r($this->_aResult);
      echo '</pre>';
    }
  }

  $sLine = isset($_REQUEST['line'])?$_REQUEST['line']:'';
?>
<form action="">
    <input type="text" name="line" value="<?=$sLine?>" />
    <br/>
    <button>Go</button>
</form>
<?
  if($sLine)
  {
    $oMain = new soMain();
    //$oMain->go([7,9,9,6,17,8,10,18]);
    $oMain->go(explode(',', $sLine));
    
  }


Пометки: POE, path of exile, quality
Яндекс.Метрика