示例#1
0
 public function attached($presenter)
 {
     parent::attached($presenter);
     $this->wdata = $this->WDataModel->get($this->presenter->getParameter('destination'));
     $this->template->village = $this->village = $this->villageService->getVillage($this->presenter->getParameter('id'));
     $this->units = $this->unitService->getUnits($this->village);
     $this->template->units = $this->units;
     $this->template->names = $this->unitService->getNames();
     $unitData = [];
     switch ($this->village->getOwner()->tribe) {
         case App\FrontModule\Model\User\UserService::TRIBE_ROMANS:
             foreach (App\GameModule\Model\Units\UnitService::ROMANS as $unit) {
                 $unitData[] = $this->unitFactory->getUnit($unit);
             }
             break;
         case App\FrontModule\Model\User\UserService::TRIBE_TEUTONS:
             foreach (App\GameModule\Model\Units\UnitService::TEUTONS as $unit) {
                 $unitData[] = $this->unitFactory->getUnit($unit);
             }
             break;
         case App\FrontModule\Model\User\UserService::TRIBE_GAULS:
             foreach (App\GameModule\Model\Units\UnitService::GAULS as $unit) {
                 $unitData[] = $this->unitFactory->getUnit($unit);
             }
             break;
     }
     $this->template->unitData = $unitData;
     $this->template->setFile(__DIR__ . '/SendUnitsControl.latte');
 }
示例#2
0
 /**
  * @param App\GameModule\DTO\Village $village
  * @param int $building
  * @return array
  */
 public function getByBuilding($village, $building)
 {
     $query = $this->database->select('*')->from($this->table);
     $query->where('vref = %i', $village->getId());
     if ($building === App\GameModule\Model\Building\BuildingModel::BARRACKS) {
         $query->where('unit IN %in', UnitService::INFANTRY);
     }
     $query->orderBy('id ASC');
     return $query->fetchAll();
 }
示例#3
0
 public function startup()
 {
     parent::startup();
     if ($id = $this->getParameter('id')) {
         $this->village = $this->villageService->getVillage($id);
         if (!$this->village->getOwner() || $this->village->getOwner()->id !== $this->user->id) {
             $this->redirect(':Game:OuterVillage:default');
         }
     }
 }
 /**
  * @param App\GameModule\DTO\Village $village
  * @param int $field
  * @return array
  */
 public function getAvailable($village, $field)
 {
     $available = [];
     if ($field == 40) {
         if ($village->getOwner()->tribe === 1) {
             $available[] = $this->buildingService->getBuilding(BuildingModel::CITY_WALL, 1, $village);
             return $available;
         } elseif ($village->getOwner()->tribe === 2) {
             $available[] = $this->buildingService->getBuilding(BuildingModel::EARTH_WALL, 1, $village);
             return $available;
         } elseif ($village->getOwner()->tribe === 3) {
             $available[] = $this->buildingService->getBuilding(BuildingModel::PALISADE, 1, $village);
             return $available;
         }
     }
     if ($field == 39) {
         $available[] = $this->buildingService->getBuilding(BuildingModel::RALLY_POINT, 1, $village);
         return $available;
     }
     $buildings = $this->buildingModel->getAll();
     foreach ($buildings as $building => $name) {
         if ($building < 5) {
             continue;
         }
         if ($this->buildingService->isBuilt($village, $building)) {
             continue;
         }
         if (in_array($building, [BuildingModel::CITY_WALL, BuildingModel::EARTH_WALL, BuildingModel::PALISADE, BuildingModel::RALLY_POINT])) {
             continue;
         }
         if ($village->getNatar() === 0 && $building === BuildingModel::WORLD_WONDER) {
             continue;
         }
         $requirements = $this->buildingModel->getRequirements($building);
         $passed = FALSE;
         foreach ($requirements as $requirement) {
             $built = $this->buildingService->isBuilt($village, $requirement->require_building);
             if ($built && $requirement->exclude_building === $built->getBuilding()) {
                 $passed = FALSE;
                 break;
             }
             if ($built && $built->getLevel() >= $requirement->require_level) {
                 $passed = TRUE;
             } else {
                 $passed = FALSE;
                 break;
             }
         }
         if (!$requirements || $passed) {
             $available[] = $this->buildingService->getBuilding($building, 1, $village);
         }
     }
     return $available;
 }
示例#5
0
 /**
  * @param int $id
  * @return App\GameModule\DTO\Village
  */
 public function getVillage($id)
 {
     /** @var \stdClass $VData */
     $VData = $this->VDataModel->getByWId($id);
     $village = new App\GameModule\DTO\Village();
     $village->setId($id);
     if ($VData) {
         /** @var \stdClass $owner */
         $owner = $this->userModel->get($VData->owner);
         $village->setOwner($owner);
         $village->setActualWood($VData->wood);
         $village->setActualClay($VData->clay);
         $village->setActualIron($VData->iron);
         $village->setActualCrop($VData->crop);
         $village->setStorage($VData->maxstore);
         $village->setGranary($VData->maxcrop);
         $upkeep = $VData->pop + $this->upkeepService->getUpkeep($id);
         $village->setUpkeep($upkeep);
         $village->setName($VData->name);
         $village->setLoyalty($VData->loyalty);
         $village->setCapital($VData->capital);
         $village->setType($VData->type);
         $village->setNatar($VData->natar);
         $village->setCulturePoints($VData->cp);
         $village->setPopulation($VData->pop);
         $FData = $this->FDataModel->getByVref($village->getId())->toArray();
         $village->setFData($FData);
         $village->setProductionWood($this->productionService->getProductionWood($village));
         $village->setProductionClay($this->productionService->getProductionClay($village));
         $village->setProductionIron($this->productionService->getProductionIron($village));
         $village->setProductionCrop($this->productionService->getProductionCrop($village));
         $village->setMaxUpkeep($this->productionService->getBaseProductionCrop($village));
     }
     return $village;
 }
示例#6
0
 /**
  * @param App\GameModule\DTO\Village $village
  * @param int $time
  */
 public function processProduction($village, $time)
 {
     /** @var \stdClass $VData */
     $VData = $this->VDataModel->getByWId($village->getId());
     if ($time > $VData->lastupdate2) {
         if ($VData->lastupdate2 === 0) {
             $lastUpdate = $time;
         } else {
             $lastUpdate = $VData->lastupdate2;
         }
         $wood = $VData->wood;
         if ($VData->wood !== $VData->maxstore) {
             $productionWood = $this->getProductionWood($village);
             $producedWood = ($time - $lastUpdate) * ($productionWood / 3600);
             $totalWood = $producedWood + $VData->wood;
             if ($totalWood < $VData->maxstore) {
                 $wood = $totalWood;
             } else {
                 $wood = $VData->maxstore;
             }
         }
         $clay = $VData->clay;
         if ($VData->clay !== $VData->maxstore) {
             $productionClay = $this->getProductionClay($village);
             $producedClay = ($time - $lastUpdate) * ($productionClay / 3600);
             $totalClay = $producedClay + $VData->clay;
             if ($totalClay < $VData->maxstore) {
                 $clay = $totalClay;
             } else {
                 $clay = $VData->maxstore;
             }
         }
         $iron = $VData->iron;
         if ($VData->iron !== $VData->maxstore) {
             $productionIron = $this->getProductionIron($village);
             $producedIron = ($time - $lastUpdate) * ($productionIron / 3600);
             $totalIron = $producedIron + $VData->iron;
             if ($totalIron < $VData->maxstore) {
                 $iron = $totalIron;
             } else {
                 $iron = $VData->maxstore;
             }
         }
         $crop = $VData->crop;
         if ($VData->crop !== $VData->maxcrop) {
             $productionCrop = $this->getProductionCrop($village);
             $producedCrop = ($time - $lastUpdate) * ($productionCrop / 3600);
             $totalCrop = $producedCrop + $VData->crop;
             if ($totalCrop < $VData->maxcrop) {
                 $crop = $totalCrop;
             } else {
                 $crop = $VData->maxcrop;
             }
         }
         $this->VDataModel->update($village->getId(), ['wood' => $wood, 'clay' => $clay, 'iron' => $iron, 'crop' => $crop, 'lastupdate2' => $time]);
     }
 }
示例#7
0
 /**
  * @param App\GameModule\DTO\Village $village
  * @param int $building
  * @return App\GameModule\DTO\Building|bool
  */
 public function isBuilt($village, $building)
 {
     for ($i = 19; $i <= 40; $i++) {
         if ($village->getFData()['f' . $i . 't'] === $building) {
             return $this->getBuilding($building, $village->getFData()['f' . $i], $village);
         }
     }
     return FALSE;
 }
示例#8
0
 /**
  * @param App\GameModule\DTO\Village $village
  * @return \Dibi\Row|FALSE
  */
 public function getUnits($village)
 {
     $unitData = $this->unitsModel->get($village->getId());
     return $unitData;
 }