diff --git a/app/Http/Controllers/ChampionController.php b/app/Http/Controllers/ChampionController.php index 7efb7e7..a305489 100644 --- a/app/Http/Controllers/ChampionController.php +++ b/app/Http/Controllers/ChampionController.php @@ -15,9 +15,9 @@ class ChampionController extends Controller { $eightHoursInSeconds = 60 * 60 * 8; - $champions = Cache::remember('championsListAllCache', $eightHoursInSeconds, static fn () => Champion::orderBy('name')->get()); + $champions = Cache::remember('championsListAllCache', $eightHoursInSeconds, static fn() => Champion::orderBy('name')->get()); - $roles = Cache::remember('championsRolesCache', $eightHoursInSeconds, static fn () => ChampionRoles::orderBy('champion_name')->get()); + $roles = Cache::remember('championsRolesCache', $eightHoursInSeconds, static fn() => ChampionRoles::orderBy('champion_name')->get()); return view('champions.index', ['champions' => $champions, 'roles' => $roles]); } @@ -28,20 +28,11 @@ class ChampionController extends Controller public function show(Champion $champion) { $threeDaysInSeconds = 60 * 60 * 24 * 3; - $sixMonthsInSeconds = 60 * 60 * 24 * 30 * 6; - $champion = Cache::remember('championShowCache'.$champion->slug, $threeDaysInSeconds, static fn () => $champion->load('streamers', 'skins', 'lanes')); + $champion = Cache::remember('championShowCache' . $champion->slug, $threeDaysInSeconds, static fn() => $champion->load('streamers', 'skins', 'lanes')); $streamers = $champion->load('streamers')->streamers; - $splashColor = Cache::remember( - 'championSplashColorCache'.$champion->slug, - $sixMonthsInSeconds, - static fn () => getAverageColorFromImageUrl('https://wsrv.nl/?url='.$champion->getChampionImageAttribute(true)) - ); - - $champion->splash_color = $splashColor; - return view('champions.show', ['champion' => $champion, 'streamers' => $streamers]); } } diff --git a/app/Http/Controllers/ChampionSkinController.php b/app/Http/Controllers/ChampionSkinController.php index 5f7e7dd..0195dd7 100644 --- a/app/Http/Controllers/ChampionSkinController.php +++ b/app/Http/Controllers/ChampionSkinController.php @@ -63,14 +63,6 @@ class ChampionSkinController extends Controller static fn () => $championSkin->load('champion', 'chromas') ); - $splashColor = Cache::remember( - 'championSkinSplashColorCache'.$championSkin->slug, - 60 * 60 * 120, - static fn () => getAverageColorFromImageUrl('https://wsrv.nl/?url='.$championSkin->getSkinImageAttribute(true)) - ); - - $skin->splash_color = $splashColor; - return view('skins.show', ['skin' => $skin]); } diff --git a/app/Http/Controllers/SummonerIconController.php b/app/Http/Controllers/SummonerIconController.php index 095d78a..d282f4b 100644 --- a/app/Http/Controllers/SummonerIconController.php +++ b/app/Http/Controllers/SummonerIconController.php @@ -11,7 +11,7 @@ class SummonerIconController extends Controller public function index() { $icons = QueryBuilder::for(SummonerIcon::class) - ->allowedFilters('title') + ->allowedFilters(['title', 'esports_team', 'release_year']) ->defaultSort('-icon_id') ->paginate(72) ->appends(request()->query()); diff --git a/resources/css/app.css b/resources/css/app.css index ac9163e..3c76383 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -164,3 +164,8 @@ ins.adsbygoogle[data-ad-status="unfilled"] { background-color: rgba(0, 0, 0, 0.02); border-radius: 4px; } + +#skinsElement { + overflow-y: auto; + overflow-x: auto; +} diff --git a/resources/js/vert-scroll.js b/resources/js/vert-scroll.js index 8eb9171..8d16267 100644 --- a/resources/js/vert-scroll.js +++ b/resources/js/vert-scroll.js @@ -1,5 +1,10 @@ let skinsElement = document.getElementById('skinsElement'); -skinsElement.addEventListener('wheel', (ev) => { - ev.preventDefault(); - skinsElement.scrollLeft += (ev.deltaY + ev.deltaX); -}); + +if (skinsElement) { + skinsElement.addEventListener('wheel', (ev) => { + if (skinsElement.scrollWidth > skinsElement.clientWidth) { + ev.preventDefault(); + skinsElement.scrollLeft += (ev.deltaY + ev.deltaX); + } + }); +} diff --git a/resources/views/champions/show.blade.php b/resources/views/champions/show.blade.php index b50ca14..47acc2f 100644 --- a/resources/views/champions/show.blade.php +++ b/resources/views/champions/show.blade.php @@ -1,14 +1,77 @@ @extends('layouts.app') @section('title', $champion->name . ' • Heimerdinger.LoL') -@section('description', 'Heimerdinger.LoL: ' . $champion->name . ' details showing all the information you need to know - about ' . $champion->name . ', ' . $champion->title . '. ' . substr($champion->lore, 0, 50) . '...') +@section('description', + 'Heimerdinger.LoL: ' . + $champion->name . + ' details showing all the information you need to know + about ' . + $champion->name . + ', ' . + $champion->title . + '. ' . + substr($champion->lore, 0, 50) . + '...') @section('content') - + @endsection @push('bottom_scripts') @vite('resources/js/vert-scroll.js') -@endpush + +@endpush diff --git a/resources/views/components/champions/grid_info.blade.php b/resources/views/components/champions/grid_info.blade.php index fbbafe4..c73b816 100644 --- a/resources/views/components/champions/grid_info.blade.php +++ b/resources/views/components/champions/grid_info.blade.php @@ -1,161 +1,437 @@

- CHAMPION DETAILS

+ Champion Spotlight +

- {{ $champion->name }}

+ {{ $champion->name }} +

- {{ $champion->title }}

+ {{ $champion->title }} + + - + +
+
+
-
-
-
-
-
- {{ $champion->name }} Splash Art -
-
+
+ {{ $champion->name }} Loading + {{ $champion->name }} Splash Art -
+
-

- {{ $champion->name }} Information

- -
    -
  • - Full Title: {{ $champion->name }}, {{ $champion->title }}. -
  • -
  • - Popular Positions: - @if (isset($champion->lanes) && isset($champion->lanes->roles)) - @foreach ($champion->lanes->roles as $lane) - {{ $lane }} - @svg(getRoleIconSvg($lane), 'w-5 h-5 inline-block') - @if (!$loop->last) - - - @endif - - @endforeach - @else - Not Enough Data - @endif -
  • -
  • - Blue Essence Cost: - {{ $champion->price_be }} BE -
  • -
  • - Riot Points Cost: - {{ $champion->price_rp }} RP -
  • -
  • - Roles: - @foreach ($champion->roles as $role) - {{ $role }} - @if (!$loop->last) - - - @endif - - @endforeach -
  • -
  • - Attack Type: {{ $champion->attack_type }} -
  • -
  • - Damage Type: {{ $champion->adaptive_type }} -
  • -
  • - Resource Type: {{ $champion->resource_type }} -
  • -
  • - Champion ID: {{ $champion->champion_id }} -
  • -
  • - Release Date: {{ $champion->release_date }} -
  • -
  • - Release Patch: Patch {{ $champion->release_patch }} -
  • -
-
-
-
-

- {{ $champion->name }} Streamers

-

- A list of streamers who play {{ $champion->name }} and are atleast Diamond 2 or higher. -

-
- @foreach ($streamers as $streamer) - - @endforeach +
+
+

{{ $champion->name }}

+

{{ $champion->title }}

+ + View Full Splash Art + + + + +
-
-
-
-
-

- {{ $champion->name }} Skins ({{ count($champion->skins) }})

-
-
- @foreach ($champion->skins as $key => $skin) - - @endforeach + +
+
+ @if (isset($champion->lanes) && isset($champion->lanes->roles)) + @foreach ($champion->lanes->roles as $lane) + + @svg(getRoleIconSvg($lane), 'w-5 h-5 inline-block mr-1') + {{ $lane }} + + @endforeach + @else + Not Enough Data + @endif
+
-
-
-

- {{ $champion->name }} Lore

-

- {{ $champion->lore }} -

+
+

+ All About {{ $champion->name }} +

+ +
+
+
+

Champion Overview

+

+ {{ $champion->name }}, {{ $champion->title }}, is a powerful + {{ strtolower(implode('/', $champion->roles)) }} champion in League of Legends who is + mostly played + in + @if (isset($champion->lanes) && isset($champion->lanes->roles)) + {{ strtolower(implode(' and ', $champion->lanes->roles)) }} + @else + some lanes + @endif + of Summoner's Rift. First released on {{ $champion->release_date }} during Patch + {{ $champion->release_patch }}, {{ $champion->name }} has become known for their + {{ strtolower($champion->attack_type) }} playstyle and + {{ strtolower($champion->adaptive_type) }} damage output. +

+ +

+ With {{ count($champion->skins) }} unique skins available, {{ $champion->name }} offers + plenty of customization options for players who enjoy this champion. + @if (count($champion->skins) <= 3) + While {{ $champion->name }} doesn't have many skins yet, each one offers a unique take + on this champion's theme. + @elseif (count($champion->skins) <= 6) + {{ $champion->name }} has a decent collection of skins to choose from, giving players + plenty of options to switch up their look. + @elseif (count($champion->skins) <= 10) + {{ $champion->name }} has a good amount of skins, including some really nice + reimaginings of the character. + @else + {{ $champion->name }} has a ton of skins to choose from, so players can really + customize their experience with this champion. + @endif +

+ +

+ As a champion who uses {{ $champion->resource_type }} as their resource, + {{ $champion->name }} brings a unique set of abilities to League of Legends that makes them + a + great champ for any team comp. +

+
+ +
+

Champion Stats +

+
+

BE Cost: + {{ $champion->price_be }} BE +

+

RP Cost: + {{ $champion->price_rp }} RP +

+

Role: + @foreach ($champion->roles as $role) + {{ ucfirst(strtolower($role)) }}{{ !$loop->last ? ', ' : '' }} + @endforeach +

+

Damage: {{ $champion->adaptive_type }}

+

Attack: + {{ ucfirst(strtolower($champion->attack_type)) }}

+

Resource: {{ $champion->resource_type }} +

+

Champion ID: + {{ $champion->champion_id }}

+
+
+ +
+
+
+ + + +
+
+

+ Looking for a {{ $champion->name }} icon for your profile? Check out our {{ $champion->name }} Icons List. +

+

+ Want to save on {{ $champion->name }} skins? Check our Sale Rotation Tracker to see if + any {{ $champion->name }} skins are currently discounted! +

+
+
+
+ +

Gameplay Style

+ +

+ {{ $champion->name }} is primarily played as a {{ strtolower(implode('/', $champion->roles)) }}, + leveraging their {{ strtolower($champion->attack_type) }} combat style to dominate + @if (isset($champion->lanes) && isset($champion->lanes->roles)) + in the {{ strtolower(implode(' or ', $champion->lanes->roles)) }}. + @else + on the Rift. + @endif + Since their release in Patch {{ $champion->release_patch }}, players have come up with a bunch of + different + strategies and builds to maximize {{ $champion->name }}'s potential. +

+ +

+ As a {{ strtolower($champion->adaptive_type) }}-focused champion who uses + {{ $champion->resource_type }} to cast their abilities, {{ $champion->name }} requires players to + carefully manage their resources while positioning effectively to deal maximum damage. The + champion's design makes them particularly effective against + @if (strpos(strtolower(implode('', $champion->roles)), 'assassin') !== false) + squishy targets like ADCs and mages, allowing for quick kills in fights. + @elseif (strpos(strtolower(implode('', $champion->roles)), 'tank') !== false) + opponents by absorbing damage and disrupting enemy formations with CC. + @elseif (strpos(strtolower(implode('', $champion->roles)), 'mage') !== false) + grouped enemies with AoE abilities and burst damage. + @elseif (strpos(strtolower(implode('', $champion->roles)), 'marksman') !== false) + targets at range, dealing consistent damage throughout extended fights. High DPS. + @elseif (strpos(strtolower(implode('', $champion->roles)), 'support') !== false) + enemy strategies by providing utility, protection, and setup for teammates. + @elseif (strpos(strtolower(implode('', $champion->roles)), 'fighter') !== false) + both squishier targets and frontline opponents with a balance of damage and durability. + @else + a variety of opponents, adapting to different situations as needed. + @endif +

+ +
+

{{ $champion->name }}'s Story

+
+

+ {{ $champion->lore }} +

+
+
+
+
+ + +
+

+ {{ $champion->name }} Skins Collection ({{ count($champion->skins) }}) +

+ +

+ Customize your {{ $champion->name }} experience with these amazing skins. From the base look to + legendary alternatives, each skin offers a unique visual style and sometimes new animations or voice + lines. Click on any skin to learn more about its features, release date, and pricing. +

+ +
+
+ @foreach ($champion->skins as $key => $skin) + + @endforeach +
+
+
+ + +
+

+ Top {{ $champion->name }} Players & Streamers +

+ +

+ Want to improve your {{ $champion->name }} gameplay? Learn from these high elo players who main or + play a lot of {{ $champion->name }}. All streamers listed are at least Diamond 2 or higher, providing + high-quality gameplay to learn from, or just enjoy watching. Click on their names to check out their + content. +

+ + @if (count($streamers) > 0) +
+ @foreach ($streamers as $streamer) + + @endforeach +
+ @else +
+
+ + + +

+ Heimerdinger.lol is currently not aware of any High ELO {{ $champion->name }} streamers. We + are working on a streamer submission form. Check back soon. +

+
+
+ @endif +
+ +
+

+ Learning {{ $champion->name }} +

+ +
+

+ Whether you're just picking up {{ $champion->name }} or looking to improve your skills with this + {{ strtolower(implode('/', $champion->roles)) }} champion, understanding their strengths and + weaknesses is crucial. This champion thrives in + @if (isset($champion->lanes) && isset($champion->lanes->roles)) + {{ strtolower(implode(' and ', $champion->lanes->roles)) }} + @else + various roles + @endif + with their unique kit. +

+ +
+
+

Champion Strengths

+
    + @if (strpos(strtolower(implode('', $champion->roles)), 'assassin') !== false) +
  • High burst damage potential
  • +
  • High solo kill potential
  • +
  • Strong roaming capabilities
  • +
  • Good mobility for escapes
  • + @elseif (strpos(strtolower(implode('', $champion->roles)), 'tank') !== false) +
  • Impressive durability
  • +
  • Strong crowd control abilities
  • +
  • Good at starting fights
  • +
  • Great at frontlining
  • + @elseif (strpos(strtolower(implode('', $champion->roles)), 'mage') !== false) +
  • Powerful AoE damage
  • +
  • Strong waveclear
  • +
  • Good scaling into late game
  • +
  • Useful utility for team fights
  • + @elseif (strpos(strtolower(implode('', $champion->roles)), 'marksman') !== false) +
  • Consistent damage output
  • +
  • Strong late-game scaling
  • +
  • Nice at spacing
  • +
  • Good range for safety
  • + @elseif (strpos(strtolower(implode('', $champion->roles)), 'support') !== false) +
  • Strong utility for the team
  • +
  • Good protection capabilities
  • +
  • Effective vision control
  • +
  • Useful in team engagements
  • + @elseif (strpos(strtolower(implode('', $champion->roles)), 'fighter') !== false) +
  • Good balance of damage and durability
  • +
  • Strong dueling potential
  • +
  • Amazing in extended fights
  • + @else +
  • Versatile kit for various situations
  • +
  • Adaptable playstyle
  • +
  • Unique abilities in the champion roster
  • +
  • Effective in the right team compositions
  • + @endif +
+
+ +
+

Champion Weaknesses

+
    + @if (strpos(strtolower(implode('', $champion->roles)), 'assassin') !== false) +
  • Vulnerable to crowd control
  • +
  • Relatively squishy in team fights
  • +
  • Can fall off in very late game
  • +
  • Requires good timing to be effective
  • + @elseif (strpos(strtolower(implode('', $champion->roles)), 'tank') !== false) +
  • Limited damage output
  • +
  • Can be kited by other champions
  • +
  • Vulnerable to percent health damage
  • +
  • Reliant on team follow-up
  • + @elseif (strpos(strtolower(implode('', $champion->roles)), 'mage') !== false) +
  • Usually lacks mobility
  • +
  • Vulnerable to assassins
  • +
  • Skill-shot dependent abilities
  • +
  • Can struggle against magic resistance
  • + @elseif (strpos(strtolower(implode('', $champion->roles)), 'marksman') !== false) +
  • Weaker early game
  • +
  • Vulnerable to assassins
  • +
  • Reliant on positioning
  • +
  • Limited escape options
  • + @elseif (strpos(strtolower(implode('', $champion->roles)), 'support') !== false) +
  • Limited income for items
  • +
  • Lower damage output
  • +
  • Vulnerable when caught alone
  • +
  • Dependent on team play
  • + @elseif (strpos(strtolower(implode('', $champion->roles)), 'fighter') !== false) +
  • Can be kited by ranged champions
  • +
  • May struggle against true tanks
  • +
  • Often lacks strong engage tools
  • +
  • Can be outscaled in late game
  • + @else +
  • May struggle against specialized champions
  • +
  • Has counterplay options available
  • +
  • Requires good game knowledge to maximize potential
  • +
  • May not excel in any specific area
  • + @endif +
+
+
+ +

+ {{ $champion->name }} currently costs + {{ $champion->price_be }} BE or + {{ $champion->price_rp }} RP to unlock, making them + @if ($champion->price_be <= 1350) + one of the more cheaper champions for new players. + @elseif ($champion->price_be <= 3150) + reasonably priced for players building their champion pool. + @elseif ($champion->price_be <= 4800) + on the more expensive side for new players. + @else + one of the more expensive champions. + @endif + Players looking to master {{ $champion->name }} should spend time learning their unique mechanics + and optimal build paths for different matchups. +

diff --git a/resources/views/components/icons/view_grid.blade.php b/resources/views/components/icons/view_grid.blade.php index bfa200d..15ababd 100644 --- a/resources/views/components/icons/view_grid.blade.php +++ b/resources/views/components/icons/view_grid.blade.php @@ -1,111 +1,356 @@ -
-
-

- ICON DETAILS

-

- {{ $icon->title }}

-

- Released in: {{ $icon->release_year }}

+
+

+ Icon Spotlight +

+

+ {{ $icon->title }} +

+

+ Released in {{ $icon->release_year }} +

-
- -
+ -
-
-
-

- The {{ $icon->title }}

- {{ $icon->title }} Icon +
+
+
+ -
-

- {{ $icon->title }} Details -

-
-
    -
  • - Icon ID: - {{ $icon->icon_id }} -
  • -
  • - Icon Name: {{ $icon->title }} -
  • -
  • - Release Year: {{ $icon->release_year }} -
  • -
  • - Legacy*: - {{ $icon->legacy ? 'Yes' : 'No' }} -
  • -
  • - Esports Icon: - {{ $icon->esports_team || $icon->esports_region || $icon->esports_event ? 'Yes' : 'No' }} -
  • +
    +

    + About This Icon +

    +
    +

    + The {{ $icon->title }} is a {{ $icon->legacy ? 'legacy' : 'standard' }} + summoner icon first introduced to League of Legends in {{ $icon->release_year }}. @if ($icon->esports_team || $icon->esports_region || $icon->esports_event) + This is an esports-themed icon @if ($icon->esports_team) -

  • - Esports Team: {{ $icon->esports_team }} -
  • + representing the team {{ $icon->esports_team }} @endif @if ($icon->esports_region) -
  • - Esports Region: {{ $icon->esports_region }} -
  • + from the {{ $icon->esports_region }} region @endif @if ($icon->esports_event) -
  • - Esports Event: {{ $icon->esports_event }} -
  • - @endif + featured during the {{ $icon->esports_event }} event + @endif. @endif -
  • - Description: {{ $icon->description }} -
  • +

    - @if ($icon->icon_id === 6584) -
  • - Guide: How to get the - Hatty Crabby Icon in - League of Legends -
  • +

    {{ $icon->description }}

    + +

    + Summoner icons like the {{ $icon->title }} let you personalize your League of + Legends account, displaying next to your name in friend lists, lobbies, and post-game + screens. + It's also generally shown on 3rd-party sites like op.gg and u.gg. + They're a popular way for players to express their personality, support for + teams or to create a nice looking profile for themselves. +

    + +

    + @if ($icon->release_year < 2016) + This icon comes from the {{ $icon->release_year < 2013 ? 'early' : 'classic' }} era of + League of Legends, when icon releases were less frequent and often tied to significant + game events or milestones. Icons from this period are particularly valued by long-time + players. + @elseif ($icon->release_year >= 2016 && $icon->release_year <= 2020) + Released during {{ $icon->release_year }}, this icon arrived during a period when Riot + began expanding the variety and availability of summoner icons, offering more ways for + players to customize their profiles and express themselves in the game client. + @else + As a more recent addition to League's icon collection, the {{ $icon->title }} features + the modern design aesthetic that matches Riot's current approach to player + customization. @endif +

    -
  • - * Legacy Icons: Legacy Icons don't act the same as legacy - skins. - It seems like some icons that are marked as legacy are still obtainable or the other way - around - where some icons that are not marked as legacy are not obtainable anymore. -
  • -
+ @if ($icon->legacy) +
+

+ Legacy Status: This is considered a + legacy icon, which means it may have limited availability. Unlike legacy skins, + legacy icons don't follow consistent rules. Some can still be obtainable through + special events or promotions, while others might be permanently unavailable. +

+
+ @endif + + @if ($icon->icon_id === 6584) +
+

+ Special Guide: Wondering how to get + this icon? Check out our + href="/post/how-to-get-hatty-crabby-icon-in-league-of-legends" + class="text-orange-400 underline hover:text-orange-300">complete guide on + obtaining the Hatty Crabby Icon. +

+
+ @endif + + @if ($icon->icon_id === 6846) +
+

+ Special Guide: Wondering how to get + this icon? Check out our complete guide on + obtaining the Ez-be-real Icon. +

+
+ @endif
+ +
+
+

+ How to Obtain +

+
+

+ @if ($icon->legacy) + As a legacy icon from {{ $icon->release_year }}, the {{ $icon->title }} icon might not be + directly available for purchase. Legacy icons typically appear during special events, + promotions, or through hextech crafting. + + @if ($icon->esports_team || $icon->esports_region || $icon->esports_event) + Since this is an esports icon, it may reappear during relevant tournaments or team + promotions. + @endif + @else + The {{ $icon->title }} icon, released in {{ $icon->release_year }}, may be available + through the League of Legends store, event passes, missions, or hextech crafting. + + @if ($icon->esports_team || $icon->esports_region || $icon->esports_event) + As an esports-themed icon, it's often available during relevant tournaments or through + team support bundles. + @endif + @endif +

+ +

+ When available in the store, summoner icons usually cost 250 RP, though + special or limited editions may be priced differently. Some icons are also obtainable with Blue + Essence during special promotions or through the Essence Emporium when it's active. +

+ +

+ Riot occasionally brings back legacy content during special events like anniversaries, seasonal + celebrations, or game milestones. If you're specifically looking to add the {{ $icon->title }} + to your collection, watch for event announcements in the client or on the official League of + Legends website. +

+ +

+ Keep an eye on the in-game client for special promotions or events where this icon might become + available again. +

+
+
+ +
+

+ Technical Details +

+
+

+ Each summoner icon in League of Legends has some technical specifications. The + {{ $icon->title }} is identified in Riot's systems by the icon ID {{ $icon->icon_id }}. +

+ +
+
+
+ Icon ID + {{ $icon->icon_id }} +
+ +
+ Release Year + {{ $icon->release_year }} +
+ +
+ Legacy Status + {{ $icon->legacy ? 'Legacy' : 'Standard' }} +
+ +
+ Type + {{ $icon->esports_team || $icon->esports_region || $icon->esports_event ? 'Esports' : 'Standard' }} +
+
+
+
+
+
+ +
+

+ Design & Significance +

+
+

+ The {{ $icon->title }} features a classic design that captures its thematic elements in League + of Legends' iconic art style. A lot of players like to use icons to make their profile look nice, + and match with profile backgrounds, borders, etc. +

+ +

+ @if ($icon->esports_team) + As an esports team icon, it prominently displays {{ $icon->esports_team }}'s branding elements + and color scheme, allowing fans to show their support in the game client. Team icons often + become collectors' items, especially for teams with historical significance or memorable + tournament performances. + @elseif (strpos(strtolower($icon->title), 'poro') !== false) + This icon features League's beloved Poro character, the fluffy creature native to the Howling + Abyss. Poro-themed items are consistently popular among players due to their cute and whimsical + design aesthetic. + @elseif (strpos(strtolower($icon->title), 'champie') !== false || + strpos(strtolower($icon->description), 'champie') !== false || + strpos(strtolower($icon->title), 'illustration') !== false) + This champion-themed icon captures elements of a League character's identity, allowing fans of + that champion to showcase their preference or mastery. + @else + The art style and thematic elements of this icon reflect Riot's approach to visual design in + {{ $icon->release_year }}, with the characteristic attention to detail and distinctive style + that League of Legends is known for. + @endif +

+ +

+ Players often select icons that represent their main role, favorite champion, esports team they + like, or + just looks cool. The {{ $icon->title }} offers a way for summoners to personalize + their League experience and express themselves within the community. +

+
+
+ +
+

+ Related Content +

+
+

+ Interested in more summoner icons or related League of Legends content? Here are some resources that + might help: +

+ +

+ League of Legends has over 1500 summoner icons spanning more than a decade of the game's + history. They range from esports team icons to event commemorations, champion icons, and + ranked achievements. +

+ + +
+
+ +@push('bottom_scripts') + +@endpush diff --git a/resources/views/components/skins/grid_info.blade.php b/resources/views/components/skins/grid_info.blade.php index efde4e5..fb277d9 100644 --- a/resources/views/components/skins/grid_info.blade.php +++ b/resources/views/components/skins/grid_info.blade.php @@ -1,185 +1,663 @@

- SKIN DETAILS

+ Skin Spotlight +

- {{ $skin->skin_name }}

+ {{ $skin->skin_name }} +

- View - champion - info + View champion info - +

- -
-
-
-
- {{ $skin->skin_name }} Splash Art + -
- View in - HD + +
+ +
+
+
+ + +
+ {{ $skin->skin_name }} Loading + {{ $skin->skin_name }} Splash Art + + +
+ + +
+
+

{{ $skin->skin_name }}

+

{{ $skin->rarity }} Skin for + {{ $skin->champion->name }}

+ + View Full Art + + + + + +
+ + +
+ @if ($skin->rp_price == '99999') + Special Offer + @else + + + {{ $skin->rp_price }} RP + + @endif +
+ @if ($skin->release_date == '0000-00-00') + Coming Soon + @else + Released: {{ $skin->release_date }} + @endif +
+
+
+ +
+

+ Everything You Need to Know About {{ $skin->skin_name }} +

-
+
+
+
+

The Basics

+

+ Looking to spice up your games with a killer new look for {{ $skin->champion->name }}? + Let's + dive into everything you need to know about {{ $skin->skin_name }}, a + unique skin for + {{ $skin->champion->name }}. This skin is all about giving your favorite champion a fresh + new look! +

+
-

- {{ $skin->skin_name }} Details

- -
    -
  • - Price: - @if ($skin->rp_price == '99999') - Not Available for RP - @else - - {{ $skin->rp_price }} RP - @endif -
  • -
  • - Release Date: {{ $skin->release_date }} -
  • -
  • - Rarity: {{ $skin->rarity }} -
  • -
  • - Availability: {{ $skin->availability }} -
  • -
  • - Chromas: - @if ($skin->chromas->count() > 0) - {{ $skin->chromas->count() }} - @else - None - @endif -
  • -
  • - Lootable: {{ $skin->loot_eligible ? 'Yes' : 'No' }} -
  • -
  • - New Effects: {{ $skin->new_effects ? 'Yes' : 'No' }} -
  • -
  • - New Animations: {{ $skin->new_animations ? 'Yes' : 'No' }} -
  • -
  • - New Recall: {{ $skin->new_recall ? 'Yes' : 'No' }} -
  • -
  • - New Voice: {{ $skin->new_voice ? 'Yes' : 'No' }} -
  • -
  • - New Quotes: {{ $skin->new_quotes ? 'Yes' : 'No' }} -
  • -
  • - Voice Actor: - @if (count($skin->voice_actor) < 1) - Unknown - @else - @foreach ($skin->voice_actor as $voice_actor) - {{ $voice_actor }} - @endforeach - @endif -
  • -
  • - Splash Artist: - @if (count($skin->splash_artist) < 1) - Unknown - @else - @foreach ($skin->splash_artist as $key => $splash_artist) - {{ $splash_artist }} - @if ($key < count($skin->splash_artist) - 2) - , - @elseif ($key == count($skin->splash_artist) - 2) - & + +
    +

    Quick Facts

    +
    +

    Price: + @if ($skin->rp_price == '99999') + Special Availability + @else + {{ $skin->rp_price }} RP @endif - @endforeach - @endif -

  • +

    +

    Released: + @if ($skin->release_date == '0000-00-00') + Coming Soon + @else + {{ $skin->release_date }} + @endif +

    +

    Rarity: {{ $skin->rarity }}

    +

    Available: {{ $skin->availability }}

    +
+
+
- - -
- - -
-
-

- {{ $skin->name }} Lore

-

- @if ($skin->lore) - {!! $skin->lore !!} +

+ @if ($skin->release_date == '0000-00-00') + Riot hasn't dropped this skin on live servers just yet, but it's definitely on the way! + {{ $skin->skin_name }} + might already be available on PBE, or maybe already has a SkinSpotlights video. While we don't + have an exact + release date yet, this {{ $skin->rarity }} tier skin will be joining + {{ $skin->champion->name }}'s collection soon. + @else + Since its release on {{ $skin->release_date }}, this {{ $skin->rarity }} tier + skin has become + @if ($skin->availability == 'Available') + a popular pick among players who want to make their {{ $skin->champion->name }} stand out + from the crowd. + @elseif ($skin->availability == 'Legacy') + a legacy skin. This means it's no longer available for purchase in the store, but you might + be able to + get it from chests, rerolling skins, or during specific periods in the year when Riot brings + it back. + @elseif ($skin->availability == 'Limited') + an extremely rare sight on the Rift. If you spot someone rocking this skin, you know they're + either a long-time player or incredibly lucky. + @elseif ($skin->availability == 'Upcoming') + an upcoming skin addition to the game that some players can't wait to get their hands on. @else - Heimerdinger has looked far and wide but could not find any lore for - {{ $skin->skin_name }}. - But we're sure it's a great skin! The things we do know is that it was released on - {{ $skin->release_date }} and costs {{ $skin->rp_price }} RP. + a unique addition to {{ $skin->champion->name }}'s wardrobe that offers a fresh take on + this champion's look and feel. + @endif + @endif +

+ +

What Makes This Skin Special

+ +

+ Let's talk about what makes {{ $skin->skin_name }} worth your RP. + @if ($skin->rp_price == '99999') + This isn't your standard RP purchase - it's part of a special promotion or event, making it a + bit more exclusive than your typical skin. It might be available exclusively through a + battlepass, gacha systems (The Sanctum), or something else. + @else + At {{ $skin->rp_price }} RP, you're getting + @if ($skin->rp_price < 975) + a budget-friendly option that still gives {{ $skin->champion->name }} a fresh look, so you + can stand out. + @elseif ($skin->rp_price >= 975 && $skin->rp_price < 1350) + a relatively cheap skin with decent quality visuals, sometimes even some new animations or + effects. + @elseif ($skin->rp_price >= 1350 && $skin->rp_price < 1820) + a feature-rich skin with plenty of new visuals that really change how + {{ $skin->champion->name }} looks in-game. + @elseif ($skin->rp_price >= 1820) + a premium experience, likely with completely overhauled visuals, animations, and potentially + voice + work. + @endif + @endif +

+ +
+

+ @if ($skin->new_effects && $skin->new_animations && $skin->new_recall && $skin->new_voice && $skin->new_quotes) + This skin is loaded with upgrades! It's got completely new visual effects, fresh animations, + a custom recall, a new voice over, and unique voice lines. When you buy + {{ $skin->skin_name }}, you're basically getting a completely reimagined version of + {{ $skin->champion->name }}. + @else + Here's what you get with {{ $skin->skin_name }}: + @if ($skin->new_effects) + ✓ Brand new visual effects that add serious flair to your + abilities + @endif + @if ($skin->new_animations) + ✓ Fresh animations that make {{ $skin->champion->name }} move + in new, thematic ways + @endif + @if ($skin->new_recall) + ✓ A custom recall animation that's worth showing off before you + head back to base + @endif + @if ($skin->new_voice) + ✓ A completely new voice that transforms the champion's + personality + @endif + @if ($skin->new_quotes) + ✓ New voice lines that add depth and storytelling to the skin's + theme + @endif + @if (!$skin->new_effects && !$skin->new_animations && !$skin->new_recall && !$skin->new_voice && !$skin->new_quotes) + While this skin doesn't add new effects or animations, it offers a visual + redesign that gives {{ $skin->champion->name }} a fresh look on the Rift. + @endif @endif

-
-
-
-

- {{ $skin->name }} Chromas ({{ count($skin->chromas) }})

-
-
- @if (count($skin->chromas) < 1) -

- Sadly there are no chromas for {{ $skin->skin_name }} yet. -

- @endif - @foreach ($skin->chromas as $key => $chroma) -
- - {{ $chroma->chroma_name }} {{ $chroma->skin_name }} ScreenShot - -
+

+ @if (count($skin->chromas) > 0) + If one look isn't enough for you, {{ $skin->skin_name }} comes with + {{ $skin->chromas->count() }} different chroma options. That means once you + own the base skin, you can pick up these color variants to match your mood or your team comp. + Some players collect them all, while others just grab their favorite color. + @else + Unlike some skins that come with a rainbow of chromas, {{ $skin->skin_name }} keeps it focused + with just the base design. So sadly, no chroma options here. + @endif +

-

- - {{ $chroma->chroma_name }} - -

-
-
- @endforeach +

+ One thing to keep in mind: this skin is {{ $skin->loot_eligible ? 'available' : 'not available' }} + through the loot system. + @if ($skin->loot_eligible) + So if you're the type to save your RP, you might get lucky with a hextech chest or event orb. + But don't count on it - if you really want this skin, buying it directly is your best bet. + @else + That means you won't find it in hextech chests or event orbs, so direct purchase is your only + option if you want to add it to your collection. + @endif +

+ +
+

Who made {{ $skin->skin_name }}?

+

+ Ever wonder who's responsible for making these skins? We'll break it down for you: +

+ +

+ @if (count($skin->voice_actor) > 0) + When you hear {{ $skin->skin_name }} in game, you're listening to + @if (count($skin->voice_actor) == 1) + the work of voice actor {{ $skin->voice_actor[0] }}, who brings real personality to the + lines. + @else + a team of voice talents including + @foreach ($skin->voice_actor as $key => $voice_actor) + {{ $voice_actor }} + @if ($key < count($skin->voice_actor) - 2) + , + @elseif ($key == count($skin->voice_actor) - 2) + and + @endif + @endforeach, who collaborated to create the skin's unique sound. + @endif + @else + Riot hasn't shared who voiced {{ $skin->skin_name }}, but we hope you enjoy the new lines + and + personality they bring to the game anyway! + @endif +

+ +

+ @if (count($skin->splash_artist) > 0) + That splash art that caught your eye? It came from the tablet of + @if (count($skin->splash_artist) == 1) + {{ $skin->splash_artist[0] }}, one of Riot's talented artists who really captured the + essence of {{ $skin->skin_name }}. + @else + several artists working together: + @foreach ($skin->splash_artist as $key => $splash_artist) + {{ $splash_artist }} + @if ($key < count($skin->splash_artist) - 2) + , + @elseif ($key == count($skin->splash_artist) - 2) + and + @endif + @endforeach. This collaboration resulted in the amazing artwork you + see on the champion select screen. + @endif + @else + Riot hasn't revealed who created the splash art for {{ $skin->skin_name }}, but we can + appreciate the effort that went into it regardless. This could mean the splash art of + {{ $skin->skin_name }} + was created by Riot's internal team, or perhaps still a freelance artist that hasn't been + revealed yet. + @endif +

+
+
+ + +
+

The Story Behind {{ $skin->skin_name }}

+
+ @if ($skin->lore) + {!! $skin->lore !!} + @else +

+ We've dug through all of Riot's lore posts and cosmic archives, but sadly there's no + official backstory for + {{ $skin->skin_name }}... yet! + + @if ($skin->release_date == '0000-00-00') + Since this skin is still on its way to the live servers, we might get some juicy lore + when it officially drops. Keep an eye on Riot's social media and the client for universe + updates. + @else + Don't let that stop you from enjoying this skin though! It first arrived on + {{ $skin->release_date }} and costs + {{ $skin->rp_price == '99999' ? 'a special rate' : $skin->rp_price . ' RP' }}. + @endif + + You can always make up your own headcanon about how {{ $skin->champion->name }} came to + have this look. That's half the fun of League's multiverse of skin lines! +

+ @endif +
+
+ + + + @if (count($skin->chromas) > 0) +
+

+ Color Options: {{ $skin->skin_name }} Chromas +

+ +

+ Can't decide on just one look? We don't blame you! {{ $skin->skin_name }} comes with + {{ count($skin->chromas) }} different chroma options that let you customize your favorite skin. + Whether you want to match your team's color scheme or just feel like switching things up, these + variants have got you covered without changing any of the awesome features of the base skin. +

+ +
+
+ @foreach ($skin->chromas as $key => $chroma) +
+ + {{ $chroma->chroma_name }} {{ $chroma->skin_name }} ScreenShot + +

+ + {{ $chroma->chroma_name }} + +

+
+ @endforeach +
+
+ +

+ Each chroma costs 290 RP, or you can often grab them all in a bundle at a discount. Keep an eye out + for essence emporiums too, where you might be able to snag these with Blue Essence instead of RP. + Which one's your favorite? +

+
+ @endif + + +
+

+ Is {{ $skin->skin_name }} Worth It? +

+ +
+

+ So, should you pick up {{ $skin->skin_name }} for your collection? Let's break it down: +

+ +
+
+

Reasons to Buy:

+
    + @if ($skin->new_effects) +
  • Fresh visual effects that make abilities pop
  • + @endif + @if ($skin->new_animations) +
  • Smooth new animations that feel great to play
  • + @endif + @if ($skin->new_recall) +
  • A recall animation worth showing off
  • + @endif + @if ($skin->new_voice) +
  • New voice lines and personality
  • + @endif + @if (count($skin->chromas) > 0) +
  • {{ count($skin->chromas) }} chroma options for variety
  • + @endif +
  • {{ $skin->rarity }} tier quality visuals
  • + @if ($skin->availability == 'Limited' || $skin->availability == 'Legacy') +
  • Rare skin that not everyone has
  • + @endif +
+
+ +
+

Consider This:

+
    + @if ($skin->rp_price > 1350) +
  • Higher price point than basic skins
  • + @endif + @if (!$skin->new_effects) +
  • Doesn't have new visual effects
  • + @endif + @if (!$skin->new_animations) +
  • Uses the base animation set
  • + @endif + @if (!$skin->loot_eligible) +
  • Can't be obtained through loot
  • + @endif + @if ($skin->availability == 'Upcoming' || $skin->release_date == '0000-00-00') +
  • Not available just yet
  • + @endif + @if (count($skin->chromas) == 0) +
  • No chroma options for variety
  • + @endif +
+
+
+ +

+ @if ($skin->rp_price <= 975) + At just {{ $skin->rp_price }} RP, {{ $skin->skin_name }} offers good value for a visual + refresh on {{ $skin->champion->name }}. It's a budget-friendly option if you main this champion + or just want to change things up without breaking the bank. + @elseif ($skin->rp_price > 975 && $skin->rp_price <= 1350) + For {{ $skin->rp_price }} RP, {{ $skin->skin_name }} sits in the mid-range of skin pricing. It + offers a solid upgrade from the base skin with enough new features to feel fresh and exciting + while playing. {{ $skin->rp_price }} RP is a common price point for skins, so if you want to + invest a little more in your {{ $skin->champion->name }} experience, this skin could be a great + choice. If {{ $skin->rp_price }} RP is a bit steep, consider checking out our sale + rotation page from time to time + to see when it goes on sale. + @elseif ($skin->rp_price > 1350 && $skin->rp_price != 99999) + At {{ $skin->rp_price }} RP, {{ $skin->skin_name }} is definitely higher priced than most + skins. But for + dedicated {{ $skin->champion->name }} players, the comprehensive changes and high production + value make it worth considering if you spend a lot of time on this champion. If you're a casual + {{ $skin->champion->name }} player, you might want to wait for a sale or consider other skins + that + offer a better bang for your buck. To find out when this skin goes on sale, check out our sale + rotation page + @else + With its special availability, {{ $skin->skin_name }} is for the collectors and dedicated + {{ $skin->champion->name }} enthusiasts. If you're passionate about this champion or the skin's + theme, you'll want to keep an eye out for how to add this to your collection. + If you're still looking for a {{ $skin->champion->name }} skin, check out the champion + page for more options. + @endif +

+ +

+ Ultimately, skins are about personal preference and how much you enjoy playing + {{ $skin->champion->name }}. If you're looking for a fresh experience with this champion and the + theme of {{ $skin->skin_name }} appeals to you, it could be the perfect addition to your + collection! If you want to consider other options, check out our dedicated {{ $skin->champion->name }} + page for more {{ $skin->champion->name }} skins and their details. +

+
+ +
+
+

+ Frequently Asked Questions +

+ +
+
+

How can I get + {{ $skin->skin_name }} if it's not in the store?

+
+
+ @if ($skin->rp_price == '99999') + {{ $skin->skin_name }} is a special skin that can't be purchased directly with RP. + Instead, you need to + @if ($skin->availability == 'Limited') + obtain it through special events or promotions. This might include The Sanctum + (gacha system), Battle Pass progression, watching esports, or limited-time + promotions. Since it's a limited-access skin, check the League client news for the + specific method currently available. + @elseif ($skin->availability == 'Upcoming') + wait for its release, which will likely be part of a special event. When available, + it will be obtainable through alternative means like The Sanctum (gacha system), + Battle Pass progression, watching esports, or special promotions rather than direct + RP purchase. + @else + access it through special means such as The Sanctum (gacha system), Battle Pass + progression, watching esports, or limited-time promotions. Check the current event + details in the League client for the exact method. + @endif + @elseif ($skin->availability == 'Legacy') + While {{ $skin->skin_name }} is a legacy skin and not regularly available in the store, + you can still obtain it through hextech crafting, event orbs, or during special sales + when legacy vaults are temporarily opened. Keep an eye on the League client for events + like Lunar Revel, Snowdown, or special champion spotlights when legacy skins often + return. + @elseif ($skin->availability == 'Limited') + {{ $skin->skin_name }} is a limited skin, which means it's rare. Limited skins + typically don't return to the store, but in some cases, you might find it in special + bundles, through "Your Shop" personalized discounts, or during major game anniversaries + when Riot occasionally brings back limited content. + @elseif ($skin->availability == 'Upcoming') + {{ $skin->skin_name }} hasn't been released yet! Once it launches, you'll be able to + purchase it directly from the store for {{ $skin->rp_price }} RP. + @else + If {{ $skin->skin_name }} is not currently in your store, try restarting your client. + You can purchase it directly for {{ $skin->rp_price }} RP, get it through hextech + crafting (if you're lucky), or ask a friend to gift it to you. + @endif +
+
+
+ +
+

Can I gift + {{ $skin->skin_name }} to a friend?

+
+
+ @if ($skin->rp_price == '99999') + No, {{ $skin->skin_name }} cannot be gifted directly to friends. Since it's a special + skin obtained through + @if ($skin->availability == 'Upcoming') + upcoming special means (like Battle Pass, The Sanctum, or other events), there is no + direct gifting option. Your friend will need to participate in the event or + promotion to obtain it themselves once it becomes available. + @else + alternative means (like Battle Pass, The Sanctum, or other events) rather than + direct RP purchase, there is no gifting option available. Your friend will need to + participate in the event or promotion to obtain it themselves. + @endif + @elseif ($skin->availability == 'Available') + Yes! You can gift {{ $skin->skin_name }} to friends who have been on your friends list + for at least 24 hours. Just go to the store, select the gifting icon, find your friend, + and select the skin. Keep in mind that gifting costs the same amount + ({{ $skin->rp_price }} RP) as buying it for yourself. + @elseif ($skin->availability == 'Legacy' || $skin->availability == 'Limited') + When {{ $skin->skin_name }} becomes temporarily available during special events, you + can gift it to friends who have been on your friends list for at least 24 hours. Since + this is a {{ strtolower($skin->availability) }} skin, gifting it is a special surprise + that not everyone will have access to. + @elseif ($skin->availability == 'Upcoming') + Once {{ $skin->skin_name }} is released, you'll be able to gift it to any friend who + has been on your friends list for at least 24 hours. New skins are almost always + giftable upon release. + @else + Yes, as long as the person has been on your friends list for at least 24 hours, you can + gift this skin. Gifting costs the same ({{ $skin->rp_price }} RP) as buying it for + yourself. + @endif +
+
+
+ +
+

How does + {{ $skin->skin_name }} compare to other {{ $skin->champion->name }} skins?

+
+
+ @if ($skin->rp_price == '99999') + {{ $skin->skin_name }} is a special skin that can't be directly purchased + with RP, making it more exclusive than standard {{ $skin->champion->name }} skins. + These special skins often have production quality comparable to higher-tier skins (1350 + RP+) with unique thematic elements. + @else + {{ $skin->skin_name }} offers a {{ strtolower($skin->rarity) }} tier experience at + {{ $skin->rp_price }} RP, making it + {{ $skin->rp_price < 1350 ? 'more affordable than other skins' : 'one of the higher-end options' }} + for {{ $skin->champion->name }}. + @endif + + @if ($skin->new_effects && $skin->new_animations) + What sets it apart from lower-tier {{ $skin->champion->name }} skins is the + combination of custom visual effects and animations, which give a completely fresh feel + to the champion. + @elseif ($skin->new_effects) + Unlike some basic {{ $skin->champion->name }} skins, this one includes custom visual + effects that really change how your abilities look in game. + @elseif ($skin->new_animations) + The unique animations separate it from simpler {{ $skin->champion->name }} skins, + giving the champion new personality through movement. + @endif + + For a detailed comparison with all other {{ $skin->champion->name }} skins, check out our + {{ $skin->champion->name }} + page that lists all skins. +
+
+
+ +
+

+ @if ($skin->rp_price == '99999') + What's the best way to get {{ $skin->skin_name }}? + @else + When does {{ $skin->skin_name }} go on sale? + @endif +

+
+
+ @if ($skin->rp_price == '99999') + The most efficient way to obtain {{ $skin->skin_name }} depends on its specific + acquisition method. For Battle Pass skins, purchase the pass early and complete missions + consistently. For Sanctum skins, use the free orbs first, then strategically purchase + additional orbs if needed. For event-specific skins, check the event details in the + League client for the most efficient path. Sometimes these special skins reappear in + future events, but there's no guarantee, so it's best to grab them when initially + available. + @elseif ($skin->availability == 'Upcoming' || $skin->release_date == '0000-00-00') + New skins like {{ $skin->skin_name }} typically don't go on sale immediately after + release. You'll usually need to wait 4-6 months before seeing it in a regular sale + rotation. However, it might appear in "Your Shop" with a personalized discount if you + play {{ $skin->champion->name }} frequently. + @elseif ($skin->availability == 'Legacy' || $skin->availability == 'Limited') + Since {{ $skin->skin_name }} is a {{ strtolower($skin->availability) }} skin, it + doesn't follow the regular sale schedule. Instead, watch for special events when legacy + vaults open, usually at holidays or during champion updates. When available again, it + might be at full price or occasionally discounted as part of a bundle. + @else + Riot typically puts skins on sale approximately every 6-8 months. + {{ $skin->skin_name }} could appear in the weekly sale rotation for 30-50% off its + original price ({{ $skin->rp_price }} RP). The most reliable way to get a discount is + through "Your Shop," which offers personalized discounts on skins for champions you play + often. Check our sale rotation tracker to see if + this skin is on sale currently. + @endif
diff --git a/resources/views/skins/show.blade.php b/resources/views/skins/show.blade.php index ba4eba1..c157188 100644 --- a/resources/views/skins/show.blade.php +++ b/resources/views/skins/show.blade.php @@ -1,13 +1,77 @@ @extends('layouts.app') @section('title', $skin->skin_name . ' • Heimerdinger.LoL') -@section('description', 'Heimerdinger.LoL: ' . $skin->skin_name . ' details showing all the information about -the ' . $skin->rarity . ' ' . $skin->champion->name . ' skin. ' . substr($skin->lore, 0, 50) . '...') +@section('description', + 'Heimerdinger.LoL: ' . + $skin->skin_name . + ' details showing all the information about + the ' . + $skin->rarity . + ' ' . + $skin->champion->name . + ' skin. ' . + substr($skin->lore, 0, 50) . + '...') @section('content') - + @endsection @push('bottom_scripts') @vite('resources/js/vert-scroll.js') + @endpush