= $max; if (!$is_max) { $next_need = (int) ($opt['upgrade_integral_' . ($level + 1)] ?? 0); if ($next_need <= $integral) { // Resolve again in case meta lag. $level = \AKSRT\User\Level::resolve_level($integral, $cfg); $is_max = $level >= $max; $next_need = $is_max ? $integral : (int) ($opt['upgrade_integral_' . ($level + 1)] ?? $integral); $name = (string) ($opt['name_' . $level] ?? ($prefix . $level)); } } if ($is_max) { $proportion = 100; $need_html = esc_html__('已为最高等级', 'aksrt'); $frac_html = esc_html((string) $integral) . '/' . esc_html((string) $integral); } else { $den = max(1, $next_need); $proportion = (int) min(100, max(0, ($integral / $den) * 100)); $need_left = max(0, $next_need - $integral); $need_html = sprintf( /* translators: %s: remaining XP */ esc_html__('升级还需%s经验', 'aksrt'), '' . esc_html((string) $need_left) . '' ); $frac_html = esc_html((string) $integral) . '/' . esc_html((string) $next_need); } $avatar = function_exists('aksrt_get_avatar_html') ? aksrt_get_avatar_html($user_id, 42, ['class' => 'avatar avatar-mini']) : get_avatar($user_id, 42); // Growth rows (next few levels). $growth = ''; $from = max(1, $level); $to = min($max, $level + 5); for ($i = $from; $i <= $to; $i++) { $need_i = (int) ($opt['upgrade_integral_' . $i] ?? 0); $nm = (string) ($opt['name_' . $i] ?? ($prefix . $i)); $state = $integral >= $need_i ? 'is-done' : ($i === $level + 1 ? 'is-next' : ''); $growth .= '
'; $growth .= '' . esc_html($prefix . $i) . ''; $growth .= '' . esc_html($nm) . ''; $growth .= '' . esc_html((string) $need_i) . ''; $growth .= '
'; } ?>