예제 #1
0
 /**
  *
  * @return mixed
  */
 public function ai()
 {
     $npc = $this->getNpcHelper()->getNpc();
     $this->_addListeners($npc);
     $state = isset($npc["state"]) ? $npc["state"] : self::STATE_STAND;
     //обработка в зависимости от текущего состояния
     switch ($state) {
         //обычное состояние
         case self::STATE_AGRESSY:
             $target = $this->getNpcHelper()->getTarget();
             //если агрессивный и нет таргета, то находим самую слабую цель
             if (false === $target) {
                 $this->getLocHelper()->eachObjects("loc", function ($objId, $obj) {
                     if ($objId != $this->getNpcHelper()->getNpcId()) {
                         $players = [];
                         if (substr($objId, 0, 7) == "player_") {
                             //считаем сумму параметров
                             $calcService = new CalculateHelper($this->getNpcHelper()->getNpc());
                             $statsSumm = $calcService->getStatSumm();
                             $playerHelper = Game::init()->getService('player.helper')->factory($objId);
                             $playerCalculateService = new CalculateHelper($playerHelper->getPlayer());
                             $playerStatsSumm = $playerCalculateService->getStatSumm();
                             $pr = $statsSumm / $playerStatsSumm * 100;
                             //$players[$objId] = ;
                             if ($pr > 5) {
                                 //если статы не меньше 1/2 то нападаем
                                 $this->getNpcHelper()->setTarget($objId);
                                 $battleEvent = new BattleEvent();
                                 $battleEvent->setLocHelper($this->getLocHelper());
                                 $battleEvent->setAttackType(BattleEvent::AUTO_ATTAK);
                                 $battleEvent->setToObjectId($objId);
                                 $battleEvent->setSelfObjectId($this->getNpcHelper()->getNpcId());
                                 Game::init()->getDispatcher()->dispatch("battle.attack", $battleEvent);
                             }
                         }
                     }
                 });
             }
             if ($this->getLocHelper()->objectExists($target)) {
                 //атакуем
             } else {
                 $this->supervision->eachLocations(function ($locHelper) use($target) {
                     if ($locHelper->objectExists($target)) {
                         //нашли объект, идем
                         $this->locHelper->moveLocObject($this->getNpcHelper()->getNpcId(), $this->getNpcHelper()->getNpcId());
                     }
                 });
             }
             break;
             //обычное состояние
         //обычное состояние
         default:
             break;
     }
 }
예제 #2
0
 /**
  * @param string $npc
  * @return string
  */
 public static function compileNpcTitle($npc, $player = false)
 {
     $calcService = new CalculateHelper($npc);
     if (false !== $player) {
         $playerCalc = new CalculateHelper($player);
         $playerStats = $playerCalc->getStatSumm();
         $stats = round($calcService->getStatSumm() / $playerStats * 100);
         if ($stats > 100) {
             $stats = 100;
         }
         if ($stats < 25) {
             $label = "default";
         } elseif ($stats >= 25 and $stats < 50) {
             $label = "success";
         } elseif ($stats >= 50 and $stats < 75) {
             $label = "warning";
         } else {
             $label = "danger";
         }
         $title = "<span class='label label-" . $label . "'>" . $stats . " %</span> ";
     } else {
         $title = "";
     }
     $title .= $npc["title"];
     if ($npc["prof"]) {
         switch ($npc["prof"]) {
             case NpcHelper::PROF_GID:
                 $title .= " [гид]";
                 break;
             case NpcHelper::PROF_BANKIR:
                 $title .= " [банкир]";
                 break;
             case NpcHelper::PROF_HEALER:
                 $title .= " [лекарь]";
                 break;
             case NpcHelper::PROF_TRADER:
                 $title .= " [торговец]";
                 break;
             case NpcHelper::PROF_TEACHER:
                 $title .= " [учитель]";
                 break;
             case NpcHelper::PROF_HOUSE_MAN:
                 $title .= " [хозяин дома]";
                 break;
         }
     }
     return $title;
 }