get('x'), $request->get('y')); $totalAmount = $request->get('wood') + $request->get('clay') + $request->get('iron') + $request->get('food'); $resourceCapabilities = MailCarrier::getResourceCapabilities($village); $necessaryMailCarriers = ceil($totalAmount / $resourceCapabilities); $mailCarriers = DB::fetch(MailCarrier::class, 'select sum(amount) as amount from village_units where type=:type and residence_village_id=:villageId and is_traveling=false', ['villageId' => $village->id, 'type' => 'MailCarrier'])[0]->amount ?? 0; if ($mailCarriers === 0 || $totalAmount > $resourceCapabilities) { return new Response(View::render('error.twig', ['message' => 'Insufficient Mail Carriers']), 403); } $destination = Village::get($request->get('village')); // event $event = new Model(); $event->time = (new \DateTime())->add( \DateInterval::createFromDateString( Unit::getTravelTime(new MailCarrier(), Village::getDistance($village->x, $village->y, $destination->x, $destination->y)) . ' seconds' ) ); $event->villageId = $village->id; $sendResourcesEvent = new SendResources(); $sendResourcesEvent->event = $event; $sendResourcesEvent->wood = $request->get('wood'); $sendResourcesEvent->clay = $request->get('clay'); $sendResourcesEvent->iron = $request->get('iron'); $sendResourcesEvent->food = $request->get('food'); $sendResourcesEvent->source = $village->id; $sendResourcesEvent->destination = $destination->id; $sendResourcesEvent->dbInsert(); return new RedirectResponse( Router::generate( 'village.show', ['x' => $request->get('x'), 'y' => $request->get('y')] ) ); } #[Route(path: '/event/{id}/cancel', methods: ['POST'])] public function cancel(Request $request): Response { $event = DB::fetch(Model::class, 'select * from events where id=:id', ['id' => $request->get('id')])[0] ?? null; $village = Village::get($event->villageId); /**@var UpgradeBuilding $upgradeBuildingEvent*/ $upgradeBuildingEvent = DB::fetch(UpgradeBuilding::class, 'select * from events_upgrade_building where event_id=:id', ['id' => $event->id])[0] ?? null; /**@var TrainUnits $trainUnitsEvent*/ $trainUnitsEvent = DB::fetch(TrainUnits::class, 'select * from events_train_units where event_id=:id', ['id' => $event->id])[0] ?? null; /**@var SendUnits $sendUnitsEvent*/ $sendUnitsEvent = DB::fetch(SendUnits::class, 'select * from events_send_units where event_id=:id', ['id' => $event->id])[0] ?? null; /**@var SendUnits $sendUnitsEvent*/ $sendResourcesEvent = DB::fetch(SendResources::class, 'select * from events_send_resources where event_id=:id', ['id' => $event->id])[0] ?? null; if (! empty($upgradeBuildingEvent)) { $upgradeBuildingEvent->cancel(); } else if (! empty($trainUnitsEvent)) { $trainUnitsEvent->cancel(); } else if (! empty($sendUnitsEvent)) { $sendUnitsEvent->cancel(); } else if (! empty($sendResourcesEvent)) { $sendResourcesEvent->cancel(); } return new RedirectResponse( Router::generate( 'village.show', ['x' => $village->x, 'y' => $village->y] ) ); } }