Example #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;
     }
 }
Example #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;
 }
Example #3
0
 /**
  * @param LocationHelper $locHelper
  * @return LocationHelper
  */
 private function _locAi($locHelper)
 {
     if (isset($locHelper->getLoc()["loc"]) and is_array($locHelper->getLoc()["loc"])) {
         $locHelper->eachObjects("loc", function ($objId, $obj) use($locHelper) {
             //запускаем ии НПС
             if (substr($objId, 0, 4) == "npc_") {
                 $caclHelper = new CalculateHelper($obj);
                 $caclHelper->calcParams();
                 $obj = $caclHelper->getObject();
                 if (!isset($obj["move"])) {
                     $obj = $this->_moveAi($obj, $locHelper);
                     if ($obj["ai"]["move"]["status"][0] == "in_move" and count($obj["ai"]["move"]["list"]) > 0) {
                         //$locHelper->addObject($objId, $obj);
                         $locId = array_pop($obj["ai"]["move"]["list"]);
                         $outMsg = $obj["title"] . " " . $obj["ai"]["move"]["data"]["move"][1] . " " . $locHelper->getDoorName($locId);
                         $inMsg = $obj["ai"]["move"]["data"]["move"][0] . " " . $obj["title"];
                         $jEvent1 = new JournalEvent($outMsg);
                         $jEvent1->setLocId($locHelper->getLoc()["lid"])->setPlayers($this->getDb()->players);
                         $jEvent2 = new JournalEvent($inMsg);
                         $jEvent2->setLocId($locId)->setPlayers($this->getDb()->players);
                         $this->getService("supervision")->getLocation($locId)->addObject($objId, $obj);
                         $locHelper->removeObject($objId);
                         $this->getDispatcher()->dispatch("addjournal.all", $jEvent1);
                         $this->getDispatcher()->dispatch("addjournal.all", $jEvent2);
                         //$locHelper->addJournal($outMsg, $this->getDb()->players);
                         //$locHelper->factory($locId)->addJournal($inMsg, $this->getDb()->players);
                     } else {
                         $locHelper->addObject($objId, $obj);
                     }
                 }
             }
         });
     }
     return $locHelper;
 }