новый лендинг
This commit is contained in:
@@ -5,85 +5,96 @@ namespace App\Http\Controllers;
|
||||
use App\Exceptions\DuplicateGameAccountException;
|
||||
use App\Exceptions\InviteCodeException;
|
||||
use App\Http\Requests\RegisterGameAccountRequest;
|
||||
use App\Models\News;
|
||||
use App\Services\AzerothCoreAccountRegistrar;
|
||||
use App\Services\AzerothCoreAccountService;
|
||||
use App\Services\InviteCodeService;
|
||||
use App\Services\NewsService;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\View\View;
|
||||
use Throwable;
|
||||
|
||||
class LandingController extends Controller
|
||||
{
|
||||
public function index(): View
|
||||
public function index(
|
||||
Request $request,
|
||||
AzerothCoreAccountService $accounts,
|
||||
NewsService $news,
|
||||
): View
|
||||
{
|
||||
$realm = config('moonwell.realm');
|
||||
$realmConfig = config('moonwell.realm');
|
||||
$rates = $realmConfig['rates'] ?? [];
|
||||
$user = Auth::user();
|
||||
$playersOnline = $accounts->onlinePlayerCount();
|
||||
|
||||
$playUrl = $user !== null
|
||||
? route('cabinet.client')
|
||||
: '#join';
|
||||
|
||||
$posts = $news->listForLanding()
|
||||
->values()
|
||||
->map(fn (News $item, int $index): array => [
|
||||
'id' => $item->id,
|
||||
'title' => $item->title,
|
||||
'excerpt' => Str::limit(trim(strip_tags($item->body)), 200),
|
||||
'date' => $item->created_at?->locale(app()->getLocale())->isoFormat('D MMMM YYYY'),
|
||||
'tag' => 'Новости',
|
||||
'tagType' => 'patch',
|
||||
'image_url' => $item->image_url,
|
||||
'featured' => $index === 0,
|
||||
])
|
||||
->all();
|
||||
|
||||
$bootstrap = [
|
||||
'realm' => [
|
||||
'name' => $realmConfig['realm_name'],
|
||||
'mode' => sprintf('PvE · %s rate · RU', $rates['experience'] ?? 'x1'),
|
||||
'realmlist' => $realmConfig['realmlist'],
|
||||
'online' => $playersOnline !== null,
|
||||
'players' => $playersOnline,
|
||||
'uptime' => '99.94%',
|
||||
'ping' => 38,
|
||||
'factions' => ['alliance' => 52, 'horde' => 48],
|
||||
'rates' => $rates,
|
||||
'client_version' => $realmConfig['client_version'] ?? '3.3.5a',
|
||||
'tagline' => $realmConfig['tagline'] ?? null,
|
||||
],
|
||||
'play_url' => $playUrl,
|
||||
'posts' => $posts,
|
||||
'tweaks' => [
|
||||
'variant' => 'forest',
|
||||
'particles' => true,
|
||||
'moon' => true,
|
||||
],
|
||||
'register_endpoint' => route('game-account.store'),
|
||||
'csrf_token' => csrf_token(),
|
||||
'auth' => [
|
||||
'authenticated' => $user !== null,
|
||||
'is_admin' => $user?->canAccessAdminPanel() ?? false,
|
||||
'username' => $user?->username,
|
||||
'login_url' => route('login'),
|
||||
'cabinet_url' => route('cabinet.index'),
|
||||
'admin_url' => route('admin.accounts.index'),
|
||||
],
|
||||
'flash' => [
|
||||
'success' => $request->session()->get('registration_success'),
|
||||
'success_username' => $request->session()->get('registration_username'),
|
||||
'error' => $request->session()->get('registration_error'),
|
||||
'errors' => $this->errorBag(),
|
||||
'old' => $request->session()->getOldInput() ? [
|
||||
'username' => $request->session()->getOldInput('username'),
|
||||
'email' => $request->session()->getOldInput('email'),
|
||||
'invite_code' => $request->session()->getOldInput('invite_code'),
|
||||
] : [],
|
||||
],
|
||||
];
|
||||
|
||||
return view('landing', [
|
||||
'realm' => $realm,
|
||||
'highlights' => [
|
||||
['value' => $realm['client_version'], 'label' => 'Клиент'],
|
||||
['value' => '1+', 'label' => 'Игрок в инсте'],
|
||||
['value' => 'Свой', 'label' => 'лаунчер'],
|
||||
['value' => 'Быстрый', 'label' => 'сбор добычи'],
|
||||
],
|
||||
'pillars' => [
|
||||
[
|
||||
'title' => 'Персональная прогрессия',
|
||||
'description' => 'Каждый персонаж проходит контент поэтапно: старые зоны, подземелья и рейды не теряют смысл после старта.',
|
||||
],
|
||||
[
|
||||
'title' => 'Инсты под любой состав',
|
||||
'description' => 'Автобаланс подстраивает сложность под количество игроков, поэтому данжи и рейды остаются проходимыми даже малой группой.',
|
||||
],
|
||||
[
|
||||
'title' => 'Комфорт для малого состава',
|
||||
'description' => 'Даже если вы играете соло или небольшой компанией, подземелья и другой PvE-контент остаются доступными и удобными для прохождения.',
|
||||
],
|
||||
[
|
||||
'title' => 'Меньше рутины',
|
||||
'description' => 'Базовые заклинания учатся автоматически, а лут с ближайших мобов собирается быстрее — меньше лишней беготни, больше игры.',
|
||||
],
|
||||
[
|
||||
'title' => 'Собственный лаунчер',
|
||||
'description' => 'Игрок получает удобную точку входа в проект: отдельный лаунчер помогает держать клиент и запуск под рукой.',
|
||||
],
|
||||
],
|
||||
'featureRows' => [
|
||||
[
|
||||
'eyebrow' => 'Прогрессия персонажа',
|
||||
'title' => 'Контент открывается по мере развития героя',
|
||||
'description' => 'Система персональной прогрессии делает путь важнее спешки к эндгейму: каждый персонаж идёт по своему этапу и открывает контент постепенно.',
|
||||
'points' => ['Старый контент остаётся актуальным', 'Разблокировки идут по мере продвижения', 'Групповая игра учитывает этап прогрессии'],
|
||||
],
|
||||
[
|
||||
'eyebrow' => 'Комфортный PvE',
|
||||
'title' => 'Подземелья и рейды не зависят от полного рейдового состава',
|
||||
'description' => 'Сервер адаптирован для соло-игроков и небольших компаний, поэтому начинать и проходить PvE-контент заметно проще.',
|
||||
'points' => ['Сложность масштабируется под размер группы', 'Комфортно играть соло и в малом составе', 'Прохождение не требует полного рейдового набора'],
|
||||
],
|
||||
],
|
||||
'adventures' => [
|
||||
[
|
||||
'title' => 'Быстрый сбор добычи',
|
||||
'description' => 'Добыча с ближайших противников собирается заметно быстрее — особенно удобно во время фарма и массовых боёв.',
|
||||
],
|
||||
[
|
||||
'title' => 'Автообучение заклинаниям',
|
||||
'description' => 'Классовые способности, ранги заклинаний и часть связанных навыков выдаются автоматически по мере развития персонажа.',
|
||||
],
|
||||
[
|
||||
'title' => 'Кастомные игровые системы',
|
||||
'description' => 'На сервере уже есть база для развития особых режимов, сезонных активностей и дополнительных игровых сервисов.',
|
||||
],
|
||||
[
|
||||
'title' => 'Простая регистрация',
|
||||
'description' => 'Игровой аккаунт создаётся сразу на сайте, без отдельной панели и ручных команд на сервере.',
|
||||
],
|
||||
],
|
||||
'steps' => [
|
||||
['title' => 'Создай аккаунт', 'description' => 'Заполни форму регистрации и получи логин для входа в игровой мир.'],
|
||||
['title' => 'Скачай лаунчер', 'description' => 'Установи собственный лаунчер проекта и подготовь клиент к запуску.'],
|
||||
['title' => 'Входи в игру', 'description' => sprintf('Запусти клиент, при необходимости используй realmlist %s и отправляйся в Азерот.', $realm['realmlist'])],
|
||||
],
|
||||
'bootstrap' => $bootstrap,
|
||||
'realm' => $realmConfig,
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -121,6 +132,22 @@ class LandingController extends Controller
|
||||
|
||||
return redirect()
|
||||
->route('landing.index')
|
||||
->with('registration_success', sprintf('Игровой аккаунт %s успешно создан. Теперь можно входить в клиент WoW.', $result['username']));
|
||||
->with('registration_success', sprintf('Игровой аккаунт %s успешно создан. Теперь можно входить в клиент WoW.', $result['username']))
|
||||
->with('registration_username', $result['username']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string, array<int, string>>
|
||||
*/
|
||||
private function errorBag(): array
|
||||
{
|
||||
$errors = session()->get('errors');
|
||||
if (!$errors) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$bag = method_exists($errors, 'getBag') ? $errors->getBag('default') : $errors;
|
||||
|
||||
return method_exists($bag, 'toArray') ? $bag->toArray() : [];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user