Ejemplo n.º 1
0
 private function checkTickUpdates($currentTick, $tickTime)
 {
     foreach ($this->players as $p) {
         if (!$p->loggedIn and $tickTime - $p->creationTime >= 10) {
             $p->close("", "Login timeout");
         } elseif ($this->alwaysTickPlayers) {
             $p->onUpdate($currentTick);
         }
     }
     //Do level ticks
     foreach ($this->getLevels() as $level) {
         if ($level->getTickRate() > $this->baseTickRate and --$level->tickRateCounter > 0) {
             continue;
         }
         try {
             $levelTime = microtime(true);
             $level->doTick($currentTick);
             $tickMs = (microtime(true) - $levelTime) * 1000;
             $level->tickRateTime = $tickMs;
             if ($this->autoTickRate) {
                 if ($tickMs < 50 and $level->getTickRate() > $this->baseTickRate) {
                     $level->setTickRate($r = $level->getTickRate() - 1);
                     if ($r > $this->baseTickRate) {
                         $level->tickRateCounter = $level->getTickRate();
                     }
                     $this->getLogger()->debug("Raising level \"" . $level->getName() . "\" tick rate to " . $level->getTickRate() . " ticks");
                 } elseif ($tickMs >= 50) {
                     if ($level->getTickRate() === $this->baseTickRate) {
                         $level->setTickRate(max($this->baseTickRate + 1, min($this->autoTickRateLimit, floor($tickMs / 50))));
                         $this->getLogger()->debug("Level \"" . $level->getName() . "\" took " . round($tickMs, 2) . "ms, setting tick rate to " . $level->getTickRate() . " ticks");
                     } elseif ($tickMs / $level->getTickRate() >= 50 and $level->getTickRate() < $this->autoTickRateLimit) {
                         $level->setTickRate($level->getTickRate() + 1);
                         $this->getLogger()->debug("Level \"" . $level->getName() . "\" took " . round($tickMs, 2) . "ms, setting tick rate to " . $level->getTickRate() . " ticks");
                     }
                     $level->tickRateCounter = $level->getTickRate();
                 }
             }
         } catch (\Exception $e) {
             $this->logger->critical($this->getLanguage()->translateString("pocketmine.level.tickError", [$level->getName(), $e->getMessage()]));
             if (\pocketmine\DEBUG > 1 and $this->logger instanceof MainLogger) {
                 $this->logger->logException($e);
             }
         }
     }
 }
Ejemplo n.º 2
0
 private function checkTickUpdates($currentTick)
 {
     //Do level ticks
     foreach ($this->getLevels() as $level) {
         try {
             $level->doTick($currentTick);
         } catch (\Exception $e) {
             $this->logger->critical("Could not tick level " . $level->getName() . ": " . $e->getMessage());
             if (\pocketmine\DEBUG > 1 and $this->logger instanceof MainLogger) {
                 $this->logger->logException($e);
             }
         }
     }
 }