final class hunter { public function __construct( private StatusSystem $statuses, private DamageSystem $damage, private CombatUnit $units ) {} public function useSkill( array &$state, string $skill, array &$player, array &$enemy ): void { switch ($skill) { case 'glass_arrow': $damage = $p['attack'] * 1.15; $dealt = $this->dealPhysical($state, $p, $e, $damage, 30); $this->log($state, $state['turn'], $p['name'], "Flecha de Vidro: {$dealt} de dano, com +30 pontos efetivos de crítico."); break; case 'thorn_rain': $damage = $p['attack'] * 0.85; $dealt = $this->dealPhysical($state, $p, $e, $damage); $this->addStatus($e, 'bleed', 3, ['damage'=>45]); $this->addStatus($p, 'prepared', 1); $this->log($state, $state['turn'], $p['name'], "Chuva de Espinhos: {$dealt} de dano e Sangramento por 3 turnos."); break; case 'predator_mark': $this->addStatus($e, 'predator_mark', 3, ['damage_taken_bonus'=>18]); $this->log($state, $state['turn'], $p['name'], 'Marca do Predador: ataques contra o alvo marcado causam +18% de dano por 3 turnos.'); break; case 'last_line': $damage = $p['attack'] * ($this->hasStatus($e, 'predator_mark') ? 1.75 : 1.05); $dealt = $this->dealPhysical($state, $p, $e, $damage); $this->log($state, $state['turn'], $p['name'], "Última Linha: {$dealt} de dano." . ($this->hasStatus($e, 'predator_mark') ? ' A Marca do Predador foi explorada.' : '')); break; } } }final class survivor { public function __construct( private StatusSystem $statuses, private DamageSystem $damage, private CombatUnit $units ) {} public function useSkill( array &$state, string $skill, array &$player, array &$enemy ): void { switch ($skill) { case 'revitalizing_arrow': $damage = $p['attack'] * 0.90; $dealt = $this->dealPhysical($state, $p, $e, $damage); $heal = (int)($dealt * 0.55); $this->heal($p, $heal); $this->log($state, $state['turn'], $p['name'], "Flecha Revigorante: {$dealt} de dano e cura de {$heal}."); break; case 'ghost_step': $this->addStatus($p, 'ghost_step', 2, ['dodge_bonus'=>30]); $this->log($state, $state['turn'], $p['name'], 'Passo Fantasma: +30% esquiva por 2 turnos.'); break; case 'vital_pulse': $missing = $p['max_hp'] - $p['hp']; $heal = (int)($missing * 0.38) + 80; $this->heal($p, $heal); $this->log($state, $state['turn'], $p['name'], "Pulso Vital: recupera {$heal} HP."); break; case 'last_breath': if (!in_array('last_breath', $p['flags'], true)) { $this->addStatus($p, 'last_breath', 3, ['fatal_save'=>true]); $p['flags'][] = 'last_breath'; $shield = (int)($p['max_hp'] * 0.18); $p['shield'] = ($p['shield'] ?? 0) + $shield; $this->log($state, $state['turn'], $p['name'], "Último Fôlego: ativa proteção contra a próxima morte e cria {$shield} de barreira."); } else { $this->heal($p, 120); $this->log($state, $state['turn'], $p['name'], 'Último Fôlego já foi usado nesta batalha; restauração menor aplicada.'); } break; } } }final class Arcanist { public function __construct( private StatusSystem $statuses, private DamageSystem $damage, private CombatUnit $units ) {} public function useSkill( array &$state, string $skill, array &$player, array &$enemy ): void { switch ($skill) { case 'astral_spear': $damage = $p['magic_power'] * 1.30; $dealt = $this->dealMagic($state, $p, $e, $damage, 25); $this->log($state, $state['turn'], $p['name'], "Lança Astral: {$dealt} de dano mágico, ignorando 25% da resistência."); break; case 'arcane_break': $damage = $p['magic_power'] * 0.70; $dealt = $this->dealMagic($state, $p, $e, $damage); $this->addStatus($e, 'arcane_fracture', 3, ['magic_taken_bonus'=>25]); $this->log($state, $state['turn'], $p['name'], "Ruptura Arcana: {$dealt} de dano e +25% dano mágico recebido por 3 turnos."); break; case 'reverse_meteor': $damage = $p['magic_power'] * 1.85; $dealt = $this->dealMagic($state, $p, $e, $damage); $this->addStatus($p, 'meteor_cooldown', 2); $this->log($state, $state['turn'], $p['name'], "Meteoro Invertido: {$dealt} de dano mágico."); break; case 'collapse': $bonus = $this->hasStatus($e, 'arcane_fracture') ? 0.65 : 0; $damage = $p['magic_power'] * (0.95 + $bonus); $dealt = $this->dealMagic($state, $p, $e, $damage); $this->log($state, $state['turn'], $p['name'], "Colapso: {$dealt} de dano." . ($bonus > 0 ? ' A Fratura Arcana amplificou o impacto.' : '')); break; } } }final class Support { public function __construct( private StatusSystem $statuses, private DamageSystem $damage, private CombatUnit $units ) {} public function useSkill( array &$state, string $skill, array &$player, array &$enemy ): void { switch ($skill) { case 'aurora_veil': $shield = (int)($p['max_hp'] * 0.24 + $p['magic_power'] * 0.45); $p['shield'] = ($p['shield'] ?? 0) + $shield; $this->addStatus($p, 'aurora_veil', 2, ['cc_resist_bonus'=>35]); $this->log($state, $state['turn'], $p['name'], "Véu da Aurora: {$shield} de escudo e +35% resistência a controle."); break; case 'restoring_bond': $heal = (int)($p['magic_power'] * 1.25); $this->heal($p, $heal); $this->log($state, $state['turn'], $p['name'], "Elo Restaurador: cura {$heal} HP."); break; case 'convergence_hymn': $this->addStatus($p, 'convergence', 3, ['attack_bonus'=>18,'speed_bonus'=>18]); $this->log($state, $state['turn'], $p['name'], 'Hino da Convergência: +18% ataque e +18 velocidade por 3 turnos.'); break; case 'fate_reversal': $heal = (int)(($p['max_hp'] - $p['hp']) * 0.55); $this->heal($p, $heal); $this->addStatus($p, 'fate_reversal', 1); $this->log($state, $state['turn'], $p['name'], "Reversão do Destino: recupera {$heal} HP."); break; } } }Criar conta

Criar conta

Voltar