public function construir($id_personagem, $id_cidade, $slug)
 {
     $tipos = $this->listarTipo();
     if (!array_key_exists($slug, $tipos)) {
         throw new Exception(sprintf(_('%s is not a valid type of construction.'), $slug));
     }
     $tipo = $tipos[$slug];
     $query = "\n            SELECT\n                personagem.nome,\n                personagem.ouro,\n                personagem_terreno.terreno\n            FROM personagem\n            INNER JOIN personagem_terreno ON personagem_terreno.id_personagem = personagem.id_personagem\n            WHERE personagem.id_personagem = '" . do_escape($id_personagem) . "'\n            AND personagem.id_cidade = '" . do_escape($id_cidade) . "'\n        ";
     $dados = get_first_result($query);
     if ($tipo->ouro > $dados->ouro) {
         throw new Exception(sprintf(_('Your have %s gold, but you need %s'), $dados->ouro, $tipo->ouro));
     }
     if ($tipo->terreno > $dados->terreno) {
         throw new Exception(sprintf(_('Your have %s terrain, but you need %s'), $dados->terreno, $tipo->terreno));
     }
     $regraPersonagem = new Personagem();
     $regraPersonagem->gastarOuro($id_personagem, $tipo->ouro);
     $regraPersonagem->gastarTerreno($id_personagem, $id_cidade, $tipo->terreno);
     $construcao = new stdClass();
     $construcao->id_cidade = $id_cidade;
     $construcao->id_personagem = $id_personagem;
     $construcao->nome = $dados->nome . "'s " . $tipo->nome;
     $construcao->tipo = $slug;
     $construcao->terreno = $dados->terreno;
     $construcao->cod_situacao = EM_CONSTRUCAO;
     return $this->inserir($construcao);
 }