public function getNeedExpForNextLevel(Player $player)
 {
     $cl = $player->getCharParameters()->getLevel();
     if ($cl < 11) {
         $needExp = 40 * pow($cl, 2) + 360 * $cl;
     } elseif ($cl >= 11 and $cl < 30) {
         $needExp = -0.4 * pow($cl, 3) + 40.4 * pow($cl, 2) + 396 * $cl;
     } elseif ($cl >= 30 and $cl < 60) {
         //(65x 2 - 165x - 6750) × 0,82
         $needExp = (65 * pow($cl, 2) - 165 * $cl - 6750) * 0.82;
     } elseif ($cl >= 61 and $cl < 69) {
         //580 + (5 × CL)
         //155 + MXP (CL) х (1344 - ((69-CL) * (3 + (69-CL) * 4)))
         $needExp = 155 + 580 + 5 * $cl * (1344 - (69 - $cl) * (3 + (69 - $cl) * 4));
     } elseif ($cl >= 70 and $cl < 80) {
         //580 + (5 × CL)
         //155 + MXP (CL) х (1344 - ((69-CL) * (3 + (69-CL) * 4)))
         $needExp = 155 + 1878 + 5 * $cl * (1990 - (89 - $cl) * (3 + (89 - $cl) * 5));
     } elseif ($cl >= 80 and $cl < 100) {
         //155 + 3517 + (5*83)*(3820-((99-83)*(3+(99-83)*5)))
         $needExp = 155 + 3517 + 5 * $cl * (3829 - (100 - $cl) * (3 + (100 - $cl) * 5));
     } else {
         $needExp = 155 + 3517 + 5 * $cl * (3829 - (100 - $cl) * (3 + (100 - $cl) * 5));
     }
     return $needExp;
 }
 /**
  * @param Player $object
  * @return mixed
  */
 public function calculate($object)
 {
     $stats = $object->getStats();
     $charParameters = $object->getCharParameters();
     $warParameters = $object->getWar();
     $maxLife = ($stats->getEndurance() + $stats->getStrenge()) * 10 + 10 * $charParameters->getLevel();
     $maxMana = $stats->getIntelligence() * 10 + 10 * $charParameters->getLevel();
     $charParameters->setMaxLife($maxLife);
     $charParameters->setMaxMana($maxMana);
     if ($charParameters->getLife() === null) {
         $charParameters->setLife($charParameters->getMaxLife());
     }
     if ($charParameters->getMana() === null) {
         $charParameters->setMana($charParameters->getMaxMana());
     }
     $object->setCharParameters($charParameters);
 }
 /**
  * @param string $name
  * @param int $sex
  * @param int $class
  * @return Player
  */
 public function createPlayer($name, $sex, $class)
 {
     $account = $this->authService->getAccount(Game::getInstance()->getAuthToken()->getValue());
     $player = new Player();
     $statistic = new PlayerStatistic();
     $player->setAccount($account);
     $player->setName($name);
     $player->setStatistic($statistic);
     $player->setSex($sex);
     $player->setClass($class);
     $this->getRepository()->save($player);
 }
 /**
  * @param \Likedimion\Tools\Helper\PlayerDataHelper $playerData
  * @throws \Likedimion\Exception\RegistrationException
  * @return Player
  */
 public function createPlayer(PlayerDataHelper $playerData)
 {
     try {
         $findPlayer = $this->playerService->getRepository()->findPlayerByName($playerData->name);
         throw new RegistrationException("player_name_exists");
     } catch (EntityNotFoundException $e) {
         $player = new Player();
         $player->setName($playerData->name);
         $player->setSex($playerData->sex);
         $player->setClass($playerData->class);
         $player->setRace($playerData->race);
         $stats = $player->getStats();
         $cfg = Game::getInstance()->getConfig();
         $stats->setStrenge($cfg["new_player"][$player->getClass()]["str"]);
         $stats->setDexterity($cfg["new_player"][$player->getClass()]["dex"]);
         $stats->setIntelligence($cfg["new_player"][$player->getClass()]["int"]);
         $stats->setSpirituality($cfg["new_player"][$player->getClass()]["spr"]);
         $stats->setEndurance($cfg["new_player"][$player->getClass()]["end"]);
         $player->setStats($stats);
         $this->playerCalculatingService->calculate($player);
         $this->playerService->getRepository()->save($player);
         $account = $this->authService->getAccount(Game::getInstance()->getAuthToken()->getValue());
         $player->setAccount($account);
         $this->accountService->getRepository()->save($account);
         $this->playerService->getRepository()->save($player);
         return $player;
     }
 }