public function danoDeGolpe(Golpe $golpe, $fulminante = false) { $golpe->setAcertou(true); $inimigo = $golpe->getChar(); $corpo = Sessao::listarCorpoParte(); $posicao = $golpe->getPosicao(); $danoOriginal = $inimigo->calcularDanoBasico($golpe->getMao(), $golpe->getGolpe()); $danoOriginal += $golpe->getDanoExtra(); if ($golpe instanceof GolpeArremesso) { $meioAlcance = $golpe->getArma()->getAlcanceMeio(); if ($golpe->getDistancia() > $meioAlcance) { $danoOriginal = floor($danoOriginal / 2); } } $danoBasico = $danoOriginal; $rd = $this->getRD($posicao); $mensagem = ''; if ($fulminante) { $cabeca = array(CORPO_CABECA, CORPO_CEREBRO, CORPO_OLHOS); if (in_array($posicao, $cabeca)) { $this->golpeFulminanteCabeca($golpe, $danoBasico, $rd, $mensagem); } else { $this->golpeFulminante($posicao, $danoBasico, $rd, $mensagem); } } $mensagem .= ' ' . $inimigo->getNome() . ' causou ' . $danoBasico . " de dano por " . $this->descreverTipoGolpe($golpe->getGolpe()) . ' na ' . $corpo[$posicao]['nome'] . ' em ' . $this->getNome() . '.'; if ($rd > 0) { $danoBasico -= $rd; if ($danoBasico <= 0) { $danoBasico = 0; $mensagem .= " O dano foi totalmente absorvido pela RD ({$rd})."; $mensagem = trim($mensagem); Sessao::escreverlog($mensagem, $inimigo->getIdOriginal(), LOG_FALHA); if ($golpe->getGolpe() == CORTE || $golpe->getGolpe() == CONTUSAO) { $this->projetar($golpe, $danoOriginal); } if ($golpe instanceof GolpeArremesso) { $this->derrubarArmaArremesso($golpe); } return; } else { $mensagem .= " {$rd} de dano foi absorvido pela RD."; } } if ($golpe->getGolpe() == PERFURACAO) { $danoBasico = $danoBasico * 2; $mensagem .= " O dano por perfuração restante é {$danoBasico}."; } elseif ($golpe->getGolpe() == CORTE) { $danoBasico = floor($danoBasico * 1.5); $mensagem .= " O dano por corte restante é {$danoBasico}."; } else { $mensagem .= " O dano por contusão restante é {$danoBasico}."; } $mensagem = trim($mensagem); Sessao::escreverlog($mensagem, $inimigo->getIdOriginal(), LOG_ATAQUE); if ($golpe->getGolpe() == CONTUSAO) { $this->projetar($golpe, $danoOriginal); } $this->sofreDano($danoBasico, $posicao, $golpe->getGolpe()); if ($golpe instanceof GolpeArremesso) { $this->derrubarArmaArremesso($golpe); } }
public function __construct($char, $mao, $arma, $golpe, $posicao, $sentido, $dano_extra, $distancia) { parent::__construct($char, $mao, $arma, $golpe, $posicao, $sentido, $dano_extra); $this->distancia = $distancia; }