public function trabalhar($id_personagem, $id_construcao, $slug, $turno)
 {
     //var_dump($id_personagem, $id_construcao, $slug, $turno);
     $mensagens = array();
     $regraPersonagem = new Personagem();
     $personagem = $regraPersonagem->pegar($id_personagem);
     $construcao = $this->pegar($id_construcao);
     if ($construcao->id_personagem != $id_personagem) {
         $construdor = $regraPersonagem->pegar($construcao->id_personagem);
         $ouro = $construdor->ouro;
         //var_dump($construdor);
     }
     $nh = $personagem->pericias[$slug]->nh;
     $turno = $personagem->turno;
     $maximo = $construcao->teste[$slug]->maximo - $construcao->teste[$slug]->quantidade;
     $sucessos = 0;
     for ($i = 0; $i < 10; $i++) {
         if ($turno <= 0) {
             $mensagens[] = 'A quantidade de turnos acabou.';
             break;
         }
         if ($construcao->id_personagem != $id_personagem) {
             $ouro -= VALOR_TRABALHO;
             if ($ouro < 0) {
                 $mensagens[] = 'Seu ouro acabou.';
                 break;
             }
             $regraPersonagem->gastarOuro($construcao->id_personagem, VALOR_TRABALHO);
             $regraPersonagem->pagarOuro($id_personagem, VALOR_TRABALHO);
         }
         $sucesso = jogar($nh, 8);
         $mensagem = $personagem->nome . ' testeu ' . $personagem->pericias[$slug]->nome;
         if ($sucesso > 0) {
             $mensagem .= ' e obteve ' . $sucesso . ' sucesso(s).';
         } elseif ($sucesso == 0) {
             $mensagem .= ' e não obteve nenhum sucesso.';
         } elseif ($sucesso < 0) {
             $mensagem .= ' e obteve uma falha crítica.';
         }
         if ($construcao->id_personagem != $id_personagem) {
             $mensagem .= ' Você pagou ' . VALOR_TRABALHO . ' gold pelo trabalho.';
         }
         $sucessos += $sucesso;
         $regraPersonagem->gastarTurno($id_personagem, 1);
         $turno--;
         $this->adicionarPericia($id_construcao, $slug, $sucesso);
         if ($sucessos >= $maximo) {
             $mensagens[] = 'Essa parte da obra foi concluída.';
             break;
         }
         $mensagens[] = $mensagem;
     }
     $this->verificar($id_construcao);
     return $mensagens;
 }
 public function executar($personagem, $id_profissao, $profissional = null)
 {
     if (is_null($profissional)) {
         $profissional = $personagem;
     }
     $profissao = $this->pegar($id_profissao);
     if ($this->temMaterial($personagem, $profissao->material) == false) {
         throw new Exception(_('Dont have enoght materials!'));
     }
     if ($this->elegivel($personagem, $profissao) == false) {
         throw new Exception(_('No elegible!'));
     }
     $regraPersonagem = new Personagem();
     $regraItem = new Item();
     //var_dump($profissao);
     $criou = true;
     foreach ($profissao->teste as $pericia => $dados) {
         $nh = $profissional->pericias[$pericia]->nh;
         $resultado = jogar($nh, $dados->dificuldade);
         $str = $profissional->nome;
         $str .= " testou ";
         $str .= $profissional->pericias[$pericia]->nome;
         if ($resultado >= $dados->requisito) {
             $resultado -= $dados->requisito;
             if ($resultado <= 0) {
                 $resultado = 1;
             }
             if ($resultado > 1) {
                 $str .= " e obteve " . $resultado . " sucessos.";
             } elseif ($resultado == 1) {
                 $str .= " e obteve sucesso.";
             }
         } else {
             if ($resultado < 0) {
                 $str .= " e obteve uma falha crítica.";
             } else {
                 $str .= " e falhou.";
             }
             $criou = false;
             break;
         }
     }
     if ($criou === true) {
         //var_dump($resultado);
         if ($resultado <= 0) {
             $resultado = 1;
         }
         if (array_key_exists($resultado, $profissao->loot)) {
             $loot = $profissao->loot[$resultado];
         } else {
             $loot = null;
             foreach ($profissao->loot as $_loot => $quantidade) {
                 $loot = $_loot;
             }
             //reset($profissao->loot);
             //$loot = $profissao->loot[end($profissao->loot)];
             //var_dump($loot);
             //exit();
         }
         //var_dump($profissao->loot, $loot); echo '<hr>';
         //exit();
         if (is_array($loot)) {
             $sorteio = array();
             foreach ($loot as $item => $quantidade) {
                 for ($i = 0; $i < $quantidade; $i++) {
                     $sorteio[] = $item;
                 }
             }
             //var_dump($sorteio);
             $slug = $sorteio[array_rand($sorteio)];
         } else {
             $slug = $loot;
         }
         $_item = $GLOBALS['_itens'][$slug];
         //var_dump($slug, $_item);
         $item = new stdClass();
         $item->id_personagem = $personagem->id_personagem;
         $item->nivel = 0;
         $item->slug = $slug;
         $item->nome = $_item['nome'];
         $item->quantidade = 1;
         $item->peso = $_item['peso'];
         $regraItem->inserir($item);
         $str .= ' ' . $personagem->nome . ' recebeu ' . $item->nome . '.';
     }
     $regraPersonagem->gastarTurno($personagem->id_personagem, $profissao->turno);
     if (count($profissao->material) > 0) {
         $this->removerMaterial($personagem, $profissao->material);
     }
     //var_dump($str, $profissao);
     $mensagem = new stdClass();
     $mensagem->sucesso = $criou;
     $mensagem->mensagem = $str;
     return $mensagem;
 }
Example #3
0
 private function falha($quest, $grupo, &$mensagem)
 {
     $regraPersonagem = new Personagem();
     foreach ($grupo as $personagem) {
         $regraPersonagem->gastarTurno($personagem->id_personagem, $quest->turno);
     }
     $query = "\n            UPDATE quest SET\n                cod_situacao = '" . QUEST_FALHA . "'\n            WHERE id_quest = '" . do_escape($quest->id_quest) . "'\n        ";
     do_update($query);
 }