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); }