A Razor UI panel that displays a skill info card: icon badge, localized name, grade, role, passive/active type, effect description, bonus, trigger, stamina cost and cooldown, plus linked synergy skills. Reads from `SkillInstance` passed in as a parameter and localizes text via `GamePreferences.Russian`.
@using Sandbox
@using Sandbox.UI
@using Socer
@using System
@inherits Panel
@if(Instance!=null && UniqueSkills.Get(Instance.Skill) is { } ability)
{
<root class="skill-info-card [email protected] localized-text">
<div class="skill-info-heading"><SkillBadgeView Skill="@Instance.Skill" Grade="@Instance.Grade" CssClass="skill-info-icon" /><div class="skill-info-copy"><label class="skill-info-name">@ability.Name(GamePreferences.Russian)</label><label class="skill-info-grade">@($"{UniqueSkills.GradeName(Instance.Grade,GamePreferences.Russian)} · {ability.Role(GamePreferences.Russian)}")</label></div><label class="skill-info-type">@(ability.IsPassive?T("Постоянный","Passive"):T("Приём","Active"))</label></div>
<label class="skill-info-description">@UniqueSkills.EffectDescription(Instance,GamePreferences.Russian)</label>
@if(!string.IsNullOrEmpty(ability.Bonus(GamePreferences.Russian,Instance.Grade))){<label class="skill-info-bonus">@ability.Bonus(GamePreferences.Russian,Instance.Grade)</label>}
<label class="skill-info-trigger">@ability.Trigger(GamePreferences.Russian)</label>
@if(!ability.IsPassive){<div class="skill-info-cost"><label>@T($"Стамина −{ability.StaminaCost*100:0}% · требуется {ability.MinimumStamina*100:0}%",$"Stamina −{ability.StaminaCost*100:0}% · requires {ability.MinimumStamina*100:0}%")</label><label>@T($"Перезарядка {ability.CooldownSeconds/4:0.#} мин. матча",$"Cooldown {ability.CooldownSeconds/4:0.#} match minutes")</label></div>}
@if(UniqueSkills.LinkedSkills(Instance.Skill).Count>0 || !string.IsNullOrEmpty(ability.Synergy(GamePreferences.Russian)))
{
<div class="skill-info-synergy">
<label>@T("Связка","Combination")</label>
@if(UniqueSkills.LinkedSkills(Instance.Skill).Count>0)
{
<div class="skill-info-links">
@foreach(var linkedSkill in UniqueSkills.LinkedSkills(Instance.Skill))
{
@if(UniqueSkills.Get(linkedSkill) is { } linkedAbility)
{
<div class="skill-info-linked"><div class="skill-info-linked-icon" style="@($"background-image:url('{UniqueSkills.ArtPath(linkedSkill,1)}');")"></div><label class="skill-info-linked-name">@linkedAbility.Name(GamePreferences.Russian)</label></div>
}
}
</div>
}
@if(!string.IsNullOrEmpty(ability.Synergy(GamePreferences.Russian))){<label>@ability.Synergy(GamePreferences.Russian)</label>}
</div>
}
</root>
}
@code {
[Parameter] public SkillInstance Instance {get;set;}
static string T(string ru,string en)=>GamePreferences.Russian?ru:en;
protected override int BuildHash()=>HashCode.Combine(Instance?.Skill,Instance?.Grade,GamePreferences.Russian);
}