/** * * @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; } }
/** * @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; }