コード例 #1
0
 public function onAttack(BattleEvent $event)
 {
     if ($event->getLocHelper()->objectExists($event->getToObjectId())) {
         $event->getLocHelper()->addJournal($event->getSelfObjectId() . "->" . $event->getToObjectId(), Game::init()->getService('player.helper')->getCollection());
         $event->getLocHelper()->update();
     }
 }
コード例 #2
0
 public function onAddJournalAll(JournalEvent $event)
 {
     $criteria = ['$and' => [["loc" => $event->getLocId()], ["_id" => ['$ne' => $event->getPlayer1()]], ["_id" => ['$ne' => $event->getPlayer2()]]]];
     $push = ['$push' => ["journal" => ["time" => time(), "msg" => $event->getMsg()]]];
     $pid = Game::init()->getPlayer();
     if ($pid["_id"] != $event->getPlayer1() and $pid["_id"] != $event->getPlayer2() and $event->getLocId() == $pid["loc"]) {
         Game::init()->getService("player.helper")->addJournal($event->getMsg());
     }
     //Game::init()->getService("player.helper")->addJournal($event->getMsg());
     $event->getPlayers()->update($criteria, $push);
 }
コード例 #3
0
ファイル: Reply.php プロジェクト: mbabenko21/likedimion-game
 private function replaceCharField($text)
 {
     $player = Game::init()->getPlayer();
     $field = "";
     if ($player) {
         if (isset($player[$text[1]])) {
             $field = $player[$text[1]];
         }
     }
     return $field;
 }
コード例 #4
0
ファイル: go.php プロジェクト: mbabenko21/likedimion-game
if ($_GET["go"] and $_GET["go"] != $player["loc"]) {
    $oldLoc = $ld->locations->findOne(["lid" => $player["loc"]]);
    $oldLocHelper = new \Likedimion\Helper\LocationHelper($oldLoc);
    $oldLocHelper->setCollection($ld->locations);
    $newLoc = $ld->locations->findOne(["lid" => $_GET["go"]]);
    if ($newLoc) {
        $newLocHelper = new \Likedimion\Helper\LocationHelper($newLoc);
        $oldLocHelper->removePlayer($player["_id"]);
        $newLocHelper->addPlayer($player["_id"]);
        $newLocHelper->setCollection($ld->locations);
        $playerHelper->move($_GET["go"]);
        $playerHelper->update();
        if ($oldLoc["terr"] == \Likedimion\Helper\LocationHelper::TERRITORY_GUARD and $newLoc["terr"] == \Likedimion\Helper\LocationHelper::TERRITORY_UNGUARD) {
            $playerHelper->addJournal("Вы покунули охраняемую территорию.");
        } elseif ($oldLoc["terr"] == \Likedimion\Helper\LocationHelper::TERRITORY_UNGUARD and $newLoc["terr"] == \Likedimion\Helper\LocationHelper::TERRITORY_GUARD) {
            $playerHelper->addJournal("Вы на охраняемой территории.");
        }
        $outmsg = $player["title"] . ($player["sex"] == "m" ? " ушел " : " ушла ") . $oldLocHelper->getDoorName($_GET["go"]);
        $inmsg = ($player["sex"] == "m" ? " пришел " : " пришла ") . $player["title"];
        $oldLocHelper->addJournal($outmsg, $ld->players, $player["_id"]);
        $newLocHelper->addJournal($inmsg, $ld->players, $player["_id"]);
        $oldLocHelper->update();
        $newLocHelper->update();
        $comeEvent = new \Likedimion\Events\MoveEvent();
        $comeEvent->addObject($playerHelper->getPlayerId(), $player);
        $comeEvent->setLocHelper($newLocHelper);
        \Likedimion\Game::init()->getDispatcher()->dispatch('come_player', $comeEvent);
    } else {
        $playerHelper->addJournal("Некуда идти.");
    }
}
コード例 #5
0
ファイル: main.php プロジェクト: mbabenko21/likedimion-game
         if (file_exists($fName)) {
             require $fName;
         } else {
             require ROOT . "/404.php";
         }
     } elseif ($player["role"] == \Likedimion\Game::ROLE_ADMIN or $player["role"] == \Likedimion\Game::ROLE_RAZRAB) {
         $fName = ROOT . "/admin/" . $_GET["admin"] . ".php";
         if (file_exists($fName)) {
             require $fName;
         } else {
             require ROOT . "/404.php";
         }
     } else {
         require ROOT . "/503.php";
     }
     $playerHelper = Game::init()->getService("player.helper");
     $playerHelper->calcParams();
     $playerHelper->addTimer('last_action', 0)->addTimer("online", $config["online_time"]);
     if (!$ld->players->update(["_id" => $_SESSION["pid"]], $playerHelper->getPlayer())) {
         throw new MongoException("Not update");
     }
 } else {
     $pid = $_SESSION["pid"];
     $locationHelper->removePlayer($_SESSION["pid"])->update();
     $playerHelper->clearJournal()->update();
     $msg = $player["title"] . ($player["sex"] == "m" ? " исчез " : " исчезла ");
     //$locationHelper->addJournal($msg, $ld->players, $pid);
     $page = <<<EOT
 <p class="tabs__link tabs__link_active">Ваш персонаж покинул игру.</p>
 <div class="hr"></div>
 <a class="tabs__link" href="/?">повторить</a> вход
コード例 #6
0
ファイル: item.php プロジェクト: mbabenko21/likedimion-game
$item = [];
if ($_GET["from"]) {
    $player = \Likedimion\Game::init()->getService('player.helper')->getPlayer();
    $from = preg_split("/[_\\-#:]/", $_GET["from"]);
    switch ($from[0]) {
        case "equip":
            $item = $player["equip"][$from[1]];
            break;
        case "inventory":
            if (isset($player["inventory"][$_GET["iId"]])) {
                $item = $player["inventory"][$_GET["iId"]];
            }
            break;
        case "loc":
            /** @var \Likedimion\Helper\LocationHelper $locHelper */
            $locHelper = \Likedimion\Game::init()->getService('loc.helper');
            $loc = $locHelper->getCollection()->findOne(["lid" => $from[1]]);
            if ($loc and isset($loc["loc"][$_GET["iId"]])) {
                $item = $loc["loc"][$_GET["iId"]];
            }
            break;
        default:
            $page .= "<div class='alert alert-warning'>Не на что смотреть</div>";
            break;
    }
} else {
    try {
        $item = $ld->items->findOne(["iid" => $_GET["iId"]]);
    } catch (MongoException $e) {
        $page .= "<div class='alert alert-warning'>Не удалось найти предмет, поскольку отсутствует подключение к базе данных<br/>Ошибка: " . $e->getMessage() . "</div>";
    }
コード例 #7
0
ファイル: s_use.php プロジェクト: mbabenko21/likedimion-game
    $from = preg_split("/[_]/", $_GET["from"]);
    switch ($from[0]) {
        case "loc":
            /** @var \Likedimion\Helper\LocationHelper $locHelper */
            $locHelper = \Likedimion\Game::init()->getService('loc.helper');
            $loc = $locHelper->getCollection()->findOne(["lid" => $from[1]]);
            if (isset($loc) and isset($loc["loc"][$_GET["id"]])) {
                $use = $loc["loc"][$_GET["id"]];
            }
            break;
    }
    if ($use) {
        if (isset($use["ai"]["on_use"])) {
            switch ($use["ai"]["on_use"]["type"]) {
                case "event":
                    $iterator = new ArrayIterator();
                    $iterator->offsetSet("use", $use);
                    $event = new \Likedimion\Events\UseEvent();
                    $event->setPluginData($iterator)->setLocHelper(\Likedimion\Game::init()->getService('loc.helper'))->setPlayerHelper(\Likedimion\Game::init()->getService('player.helper'));
                    \Likedimion\Game::init()->getDispatcher()->dispatch($use["ai"]["on_use"]["id"], $event);
                    break;
            }
        } else {
            \Likedimion\Game::init()->getService('player.helper')->addJournal('Нельзя использовать')->update();
        }
    } else {
        \Likedimion\Game::init()->getService('player.helper')->addJournal('Нечего использовать')->update();
    }
} else {
    \Likedimion\Game::init()->getService('player.helper')->addJournal('Нечего использовать')->update();
}
コード例 #8
0
 public function changeState($questId, $newStateId)
 {
     $questHelper = new QuestHelper(Game::init()->getDb()->quests);
     if (isset($this->_player["quests"][$questId]) and $questHelper->questExists($questId)) {
         $event = new QuestEvent();
         $event->setQuestId($questId);
         $event->setPlayerHelper($this);
         $event->setQuestHelper($questHelper);
         $event->setState($newStateId);
         Game::init()->getDispatcher()->dispatch('quest.change', $event);
     }
 }
コード例 #9
0
 /**
  * @param $msg
  * @param bool|\MongoId $noPlayer1
  * @param bool|\MongoId$noPlayer2
  * @return $this
  */
 public function addJournal($msg, \MongoCollection $players, $noPlayer1 = false, $noPlayer2 = false)
 {
     if ($noPlayer1 instanceof \MongoId === false and $noPlayer1 !== false) {
         $noPlayer1 = new \MongoId(substr($noPlayer1, 7));
     }
     if ($noPlayer2 instanceof \MongoId === false and $noPlayer2 !== false) {
         $noPlayer2 = new \MongoId(substr($noPlayer2, 7));
     }
     $players->update(["loc" => $this->getLoc()["lid"], "_id" => ['$ne' => [$noPlayer1, $noPlayer2]]], ['$push' => ["journal" => ["time" => time(), "msg" => $msg]]]);
     $pid = Game::init()->getPlayer()["_id"];
     if ($pid != $noPlayer1 and $pid != $noPlayer2 and $this->objectExists("player_" . $pid)) {
         Game::init()->getService("player.helper")->addJournal($msg);
     }
     return $this;
 }
コード例 #10
0
ファイル: NpcAi.php プロジェクト: mbabenko21/likedimion-game
 private function _addListeners($npc)
 {
     $events = $npc["ai"]["listeners"];
     /** @var EventDispatcher $dispatcher */
     $dispatcher = Game::init()->getDispatcher();
     $dispatcher->addInject("setNpcHelper", $this->getNpcHelper());
     $dispatcher->addInject("setLocHelper", $this->getLocHelper());
     foreach ($events as $eventId => $eventListener) {
         $newId = preg_split("/[\\._:]/", $eventId);
         $method = "on";
         for ($i = 0; $i < count($newId); $i++) {
             $method .= ucfirst($newId[$i]);
         }
         $dispatcher->addEventListener($eventId, $eventListener, $method);
     }
 }
コード例 #11
0
<?php

/**
 * Created by PhpStorm.
 * User: babenoff
 * Date: 29.12.2015
 * Time: 1:22
 */
/**
 * @var \Likedimion\Helper\LocationHelper $locHelper
 * @var \Likedimion\Helper\PlayerHelper $playerHelper
 * @var MongoId $pid
 */
$locHelper = \Likedimion\Game::init()->getService('loc.helper');
$playerHelper = \Likedimion\Game::init()->getService('player.helper');
$player = $playerHelper->getPlayer();
$pid = $player["_id"];