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