web-next: /recruit según el markup (Información + Panel RAF con recompensas)
- Reescrita la página: box «Información» con la guía completa de Recluta a un amigo (marca → nombre del reino) + box «Panel de Recluta a un amigo». - Nuevo RecruitPanel: estadísticas (cuenta reclutada, amigos reclutados, amigos al nivel 80, recompensas reclamadas X/6) + tabla de recompensas (objetivo, objeto con icono y color de calidad, estado) con botón Reclamar para las disponibles + sección «Recompensas disponibles». Sustituye a RecruitClaim. - lib/recruit-claim: getRecruitStats (isRecruited + recruitedCount). - Colores de calidad de objeto .q0-.q5 en globals.css. - Sembradas las 6 recompensas en home_recruitreward (seed en sql/). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2,9 +2,10 @@ import { getTranslations, setRequestLocale } from 'next-intl/server'
|
||||
import { Link } from '@/i18n/navigation'
|
||||
import { getSession } from '@/lib/session'
|
||||
import { getGameCharacters } from '@/lib/characters'
|
||||
import { getRecruitRewards, getRecruitedLevel80Count } from '@/lib/recruit-claim'
|
||||
import { getRecruitRewards, getRecruitedLevel80Count, getRecruitStats } from '@/lib/recruit-claim'
|
||||
import { getRealmName } from '@/lib/realm'
|
||||
import { PageShell } from '@/components/PageShell'
|
||||
import { RecruitClaim } from '@/components/RecruitClaim'
|
||||
import { RecruitPanel } from '@/components/RecruitPanel'
|
||||
|
||||
export const dynamic = 'force-dynamic'
|
||||
|
||||
@@ -13,20 +14,120 @@ export default async function RecruitPage({ params }: { params: Promise<{ locale
|
||||
setRequestLocale(locale)
|
||||
const t = await getTranslations('RecruitClaim')
|
||||
const session = await getSession()
|
||||
const realm = await getRealmName()
|
||||
|
||||
const rewards = await getRecruitRewards(session.accountId ?? null)
|
||||
const loggedIn = Boolean(session.accountId)
|
||||
const rewards = loggedIn ? await getRecruitRewards(session.accountId!) : []
|
||||
const level80Count = loggedIn ? await getRecruitedLevel80Count(session.accountId!) : 0
|
||||
const stats = loggedIn ? await getRecruitStats(session.accountId!) : { isRecruited: false, recruitedCount: 0 }
|
||||
const characters = loggedIn ? (await getGameCharacters(session.accountId!)).map((c) => c.name) : []
|
||||
|
||||
return (
|
||||
<PageShell title={t('title')}>
|
||||
<div className="box-content">
|
||||
<div className="title-box-content">
|
||||
<h2>Información</h2>
|
||||
<Link className="back-to-account" href="/account">Regresar a mi cuenta</Link>
|
||||
<Link className="back-to-account-responsive" href="/account">Regresar</Link>
|
||||
</div>
|
||||
<div className="body-box-content justified">
|
||||
<p>{t('intro')}</p>
|
||||
<br />
|
||||
{session.accountId ? (
|
||||
<RecruitClaim
|
||||
<span>¿Qué es Recluta a un amigo?</span>
|
||||
<p>Recluta a un amigo (También conocido como RAF) es un sistema en el cual un usuario de {realm} puede registrarse como referido/reclutado de otro usuario y así disfrutar de beneficios y varios premios para el usuario que ha referido/reclutado a otros.</p>
|
||||
<p>Sólo funciona para usuarios nuevos en el servidor y no tiene límites de hasta cuántas cuentas pueden reclutarse.</p>
|
||||
<p>Los beneficios funcionan para todos los personajes de cada cuenta y permanece para siempre.</p>
|
||||
<br />
|
||||
<p>- Quien se crea una cuenta completando el campo Personaje reclutante en el registro, es el referido/reclutante.</p>
|
||||
<p>- El personaje que se haya utilizado para crear la cuenta, es el referente/reclutante.</p>
|
||||
<br />
|
||||
<hr />
|
||||
<br />
|
||||
<span>¿Cómo reclutar a un amigo?</span>
|
||||
<p>Cuando tu amigo cree una cuenta, dile que en el campo 'Personaje reclutante' escriba el nombre de alguno de los personajes en tu cuenta.</p>
|
||||
<p>Una vez registrado como referido, ya podrán disfrutar de todos los beneficios.</p>
|
||||
<p>Asegúrate de elegir bien a tu referente y/o referido ya que la acción no es reversible.</p>
|
||||
<br />
|
||||
<hr />
|
||||
<br />
|
||||
<span>¿Cómo obtener los beneficios?</span>
|
||||
<p>- Ambos personajes tienen que estar leveando en grupo. Recuerda que deben estar ambos en lista de amigos para darse grupo.</p>
|
||||
<p>- Deben estar en una distancia relativamente cercana.</p>
|
||||
<p>- La diferencia máxima entre ambos jugadores debe ser de 4 niveles.</p>
|
||||
<br />
|
||||
<p>Si no se cumple alguna de las condiciones mencionadas, no se recibirá el bonus de experiencia.</p>
|
||||
<br />
|
||||
<hr />
|
||||
<br />
|
||||
<span>¿Cómo ver la experiencia obtenida?</span>
|
||||
<p>Podrás ver el bonus de experiencia recibida activando los mensajes de experiencia en el chat:</p>
|
||||
<p>1) Clic derecho en la pestaña de chat General.</p>
|
||||
<p>2) Clic izquierdo en Configuración.</p>
|
||||
<p>3) Clic izquierdo en Otros.</p>
|
||||
<p>4) Marca la casilla Experiencia.</p>
|
||||
<p>5) Clic izquierdo en Aceptar.</p>
|
||||
<br />
|
||||
<p>Al ganar experiencia, verás un mensaje detallado que muestra la cantidad obtenida y cuánto de ello proviene del bonus de Recluta a un amigo.</p>
|
||||
<br />
|
||||
<hr />
|
||||
<br />
|
||||
<span>¿Puedo desactivar el bonus de experiencia?</span>
|
||||
<p>El bonus será otorgado siempre y cuando se cumplan los requisitos.</p>
|
||||
<p>Si deseas dejar de obtenerlo, asegúrate de no cumplir alguna de las condiciones mencionadas en «¿Cómo obtener los beneficios?».</p>
|
||||
<br />
|
||||
<hr />
|
||||
<br />
|
||||
<span>¿Hay recompensas por reclutar amigos?</span>
|
||||
<p>Existen varias recompensas por reclutar amigos.</p>
|
||||
<p>En el recuadro debajo podrás ver cuáles son los objetivos de cada recompensa. (Debes estar conectado para ver el recuadro).</p>
|
||||
<br />
|
||||
<hr />
|
||||
<br />
|
||||
<span>¿Cuáles son los beneficios?</span>
|
||||
<p>Cuando un personaje del referente y un personaje del referido levean juntos, serán beneficiados por:</p>
|
||||
<p>Hasta nivel 60:</p>
|
||||
<p>- La habilidad de 'Invocar amigo'.</p>
|
||||
<p>- El personaje referido podrá dar niveles al personaje referente.</p>
|
||||
<br />
|
||||
<p>Hasta nivel 80:</p>
|
||||
<p>- Recibirán experiencia x2.</p>
|
||||
<p>- Un bonus de reputación.</p>
|
||||
<br />
|
||||
<hr />
|
||||
<br />
|
||||
<span>Invocar amigo</span>
|
||||
<p>Esta habilidad aparece en 2 lugares:</p>
|
||||
<p>- Como opción al hacer click derecho en el avatar del personaje referente/referido.</p>
|
||||
<p>- Si tienes al personaje referente/referido en la lista de amigos, aparece un ícono especial a la derecha de su nombre.</p>
|
||||
<br />
|
||||
<p>Al usar esta habilidad se debe tener en target al personaje referente/referido y no debe ser modificado hasta finalizar su casteo.</p>
|
||||
<p>Su tiempo de reutilización es de 1 hora.</p>
|
||||
<br />
|
||||
<hr />
|
||||
<br />
|
||||
<span>Otorgar niveles</span>
|
||||
<p>Esta habilidad aparece al hacer click derecho en el avatar del personaje referente y puede utilizarla solamente el personaje referido.</p>
|
||||
<p>Cuando el personaje referido tenga al menos 1 nivel más que el personaje referente, puede otorgar un nivel que deberá ser aceptado por el personaje referente.</p>
|
||||
<p>Para volver a otorgar un nivel, el personaje referido tendrá que subir 2 niveles más.</p>
|
||||
<br />
|
||||
<hr />
|
||||
<br />
|
||||
<span>¿Tienes dudas o problemas para reclutar amigos?</span>
|
||||
<p>Si a pesar de leer este instructivo aún tienes dudas, el equipo de {realm} podrá asesorarte en cualquier momento. Puedes colocar un ticket en el servidor solicitando ayuda para Reclutar a un amigo.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br />
|
||||
|
||||
<div className="box-content">
|
||||
<div className="title-box-content"><h2>Panel de Recluta a un amigo</h2></div>
|
||||
<div className="body-box-content centered">
|
||||
{loggedIn ? (
|
||||
<RecruitPanel
|
||||
rewards={rewards}
|
||||
characters={(await getGameCharacters(session.accountId)).map((c) => c.name)}
|
||||
level80Count={await getRecruitedLevel80Count(session.accountId)}
|
||||
characters={characters}
|
||||
level80Count={level80Count}
|
||||
isRecruited={stats.isRecruited}
|
||||
recruitedCount={stats.recruitedCount}
|
||||
/>
|
||||
) : (
|
||||
<p className="centered">
|
||||
|
||||
@@ -399,6 +399,14 @@ textarea:focus {
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
/* Colores de calidad de objeto (enlaces de recompensas RAF, etc.). */
|
||||
.q0 { color: #9d9d9d; }
|
||||
.q1 { color: #ffffff; }
|
||||
.q2 { color: #1eff00; }
|
||||
.q3 { color: #0070dd; }
|
||||
.q4 { color: #a335ee; }
|
||||
.q5 { color: #ff8000; }
|
||||
|
||||
/* Colores de clase de WoW (nombre de personaje) */
|
||||
.class-warrior { color: #c79c6e; }
|
||||
.class-paladin { color: #f58cba; }
|
||||
|
||||
Reference in New Issue
Block a user