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;
 }
示例#2
0
 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;
 }
示例#3
0
 public function executar($id_quest, $grupo)
 {
     $quest = $this->pegar($id_quest);
     if (is_null($quest)) {
         throw new Exception(_('Quest not found!'));
     }
     $quest->elegivel = $this->elegivel($quest, $grupo);
     if ($quest->elegivel !== true) {
         throw new Exception(_('You are not eligible for this quest!'));
     }
     $mensagens = array();
     if (isset($quest->teste)) {
         foreach ($quest->teste as $pericia => $dados) {
             $GLOBALS['_pericia'] = $pericia;
             usort($grupo, function ($a, $b) {
                 $nh1 = $a->pericias[$GLOBALS['_pericia']]->nh;
                 $nh2 = $b->pericias[$GLOBALS['_pericia']]->nh;
                 if ($nh1 == $nh2) {
                     return 0;
                 }
                 return $nh1 > $nh2 ? -1 : 1;
             });
             $efetuada = false;
             foreach ($grupo as $personagem) {
                 $nh = $personagem->pericias[$pericia]->nh;
                 $resultado = jogar($nh, $dados->dificuldade);
                 $str = $personagem->nome;
                 $str .= " testou ";
                 $str .= $personagem->pericias[$pericia]->nome;
                 if ($resultado >= $dados->requisito) {
                     if ($resultado > 1) {
                         $str .= " e obteve " . $resultado . " sucessos.";
                     } elseif ($resultado == 1) {
                         $str .= " e obteve sucesso.";
                     } elseif ($resultado == 0) {
                         $str .= " e falhou.";
                     } else {
                         $str .= " e obteve uma falha crítica.";
                     }
                     $mensagens[] = $str;
                     switch ($dados->sucesso) {
                         case ACAO_SUCESSO:
                             $this->sucesso($quest, $grupo, $resultado, $mensagens);
                             $efetuada = true;
                             break;
                         case ACAO_COMBATE_PERTO:
                             $this->combatePerto($quest, $grupo, $mensagens);
                             break;
                         case ACAO_COMBATE_DISTANCIA:
                             $this->combateDistancia($quest, $grupo, $mensagens);
                             break;
                     }
                     break;
                 } else {
                     if ($resultado < 0) {
                         $str .= " e obteve uma falha crítica.";
                     } else {
                         $str .= " e falhou.";
                     }
                     $mensagens[] = $str;
                     //$this->falha($quest, $grupo, $mensagens);
                 }
             }
             if (!$efetuada) {
                 $this->falha($quest, $grupo, $mensagens);
                 break;
             }
         }
     }
     //var_dump($quest);
     //if ()
     return $mensagens;
 }