ammyland 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. #!/usr/bin/env bash
  2. _DEBUG="off" # on/off debug mode.
  3. #========HEADER=====================================================|
  4. #AUTOR
  5. # Jefferson Rocha <lrcjefferson@gmail.com>
  6. #
  7. #PROGRAMA
  8. # Ammyland - Terror em Ammyland
  9. #
  10. #DESCRICAO
  11. # Jogo de terror onde você é o detetive, baseado em text-adventure,
  12. # um categoria de sucesso nos anos 80*. a história é
  13. # fictícia e elaborada pelo autor do programa, porém tem inspiração
  14. # em a lenda do "pântano de Manchac". Divirta-se!
  15. #
  16. #LICENÇA
  17. # MIT
  18. #
  19. #CHANGELOG
  20. # Externo, veja CHANGELOG.txt
  21. #===================================================================|
  22. #=======VARIAVEIS GLOBAIS==========#
  23. nome_versao="Terror em Ammyland, versão Beta 0.4"
  24. dependencias=("ogg123" "pv")
  25. #=Inicializando váriaveis
  26. usuario_save=""
  27. nome_do_player=""
  28. #==================================#
  29. #=======TESTES INICIAIS============#
  30. for dep in "${dependencias[@]}"; do # Dependências estão no sistema?
  31. if ! type -P "$dep" >/dev/null 2>&1; then
  32. [[ "$dep" = "ogg123" ]] && dep="vorbis-tools"
  33. echo -e "\t\E[31;1mVOCÊ NECESSITA DO PACOTE \"$dep\" para continuar.\E[m"
  34. exit 1
  35. fi
  36. done
  37. # Diretório usuarios existe?
  38. [[ ! -d "usuarios" ]] && mkdir "usuarios"
  39. #==================================#
  40. #=======BIBLIOTECAS================#
  41. source ammyland.conf # Arquivo configuração
  42. source biblioteca/notas.sh
  43. source biblioteca/configuracao.sh # Configuracao do menu.
  44. source biblioteca/jornais.sh # função para jornal
  45. source biblioteca/email.sh # Email do usuário
  46. source biblioteca/internet.sh # Internet
  47. source biblioteca/casos.sh # função para casos
  48. #===Rooms
  49. source biblioteca/rooms/skyller/lago_saint.sh #
  50. #==================================#
  51. #=======FUNCOES====================#
  52. # Função de inicio do jogo
  53. function principal(){
  54. clear
  55. # Música Inicial
  56. if [[ "$som" = "1" ]]; then
  57. ogg123 -r "musicas/ambiente-inicial.ogg" >/dev/null 2>&1 &
  58. fi
  59. while true; do
  60. echo -e "----------------------------------------------------------"
  61. echo -e "Escritório"
  62. echo -e "$(date "+%A, %d de %B 1992, %H:%M")\nDetetive: ${nome_do_player^}, Cargo: ${cargo^}, Medalhas: ${medalhas}"
  63. echo -e "----------------------------------------------------------
  64. ${menu_selecao}Config${desliga} | ${menu_selecao}Sair${desliga} | ${menu_selecao}Notas${desliga} | ${menu_selecao}Email${desliga} | ${menu_selecao}Internet${desliga} | ${desliga}${menu_selecao}Jornal${desliga} | ${desliga}${menu_selecao}Casos${desliga}
  65. "
  66. read -p $'\E[31;1m▶\E[m ' entrada
  67. entrada="${entrada,,}" # Tudo em minusculo.
  68. case "$entrada" in
  69. config) configuracao ;; # Função Configuracao
  70. sair) die; exit 0 ;; # Mata ogg e sai.
  71. notas|nota) die; nota ;;
  72. email|e-mail) email ;; # Chamada ao email
  73. internet|net) die; internet ;; # Chamada internet
  74. jornal) die; jornal ;; # Chamada Função
  75. casos) die; casos ;; # Chamada Função
  76. ajuda) die; ajuda ;; # Função de ajuda
  77. *)
  78. echo -e "\t\E[31;1mOpção Inválida!\033[m digite ajuda."
  79. sleep 1s; clear
  80. ;; # Chamada Função
  81. esac
  82. done
  83. }
  84. function formulario(){
  85. clear
  86. echo -e "${azul}Formulário para novos Detetives!\nDigite sua Credencial que pode ser:${desliga} '${vermelho}nick${desliga}' ${azul}ou${desliga} '${vermelho}nome${desliga}'."
  87. until [[ -n "$nome_do_player" ]]; do # Até que tenha entrada
  88. read -p $'\n\E[31;1mQual sua credencial Detetive?:\E[m ' nome_do_player
  89. if ! grep -iwo "$nome_do_player" "$usuario_save" >/dev/null 2>&1; then
  90. if [[ -n "$nome_do_player" ]]; then
  91. read -p "Confirma? [SIM/nao]: " confirma
  92. [[ "$confirma" != "sim" ]] && nome_do_player=""; continue || break
  93. fi
  94. else
  95. echo "Este nome já existe!"
  96. nome_do_player="" # Zerando váriavel novamente para voltar loop.
  97. continue
  98. fi
  99. done
  100. #ID=$(($(wc -l < "$configuracao_de_usuarios")+1)) # Gerando ID única.
  101. nome_do_player="${nome_do_player,,}" # Tudo em minusculo
  102. usuario_save="usuarios/${nome_do_player}.conf" # Carregando PROFILE do usuário
  103. medalhas="0" # Iniciando Medalhas base em 0
  104. cargo="recruta" # Iniciando cargo base para novos usuários
  105. echo -e "#### NÃO MODIFICAR! ####\n" >> "$usuario_save" # Mensagem de aviso.
  106. # Enviando para o banco de dados.
  107. echo -e "readonly nome_do_player=\"${nome_do_player}\"\ncargo=\"${cargo}\"\nmedalhas=\"0\"" >> "$usuario_save"
  108. }
  109. function reconhecimento_do_player(){
  110. # Dados informativos do player.
  111. read -p $'\E[31;1m Olá Detetive, qual sua identificação?: \E[m' nome_do_player
  112. usuario_save="usuarios/${nome_do_player}.conf"
  113. if ! grep -oiw "$nome_do_player" "$usuario_save" >/dev/null 2>&1; then
  114. echo -e "${vermelho}\tDetetive sua credencial não foi encontrada!${desliga}"
  115. read -p $'\tDeseja criar uma credencial? [SIM/nao]: ' resposta
  116. resposta="${resposta:=sim}"; resposta="${resposta,,}" # enter sim, tudo em minusculo
  117. [[ "$resposta" != "sim" ]] && { die; echo "Saindo!"; exit 0 ;} || formulario # Chamada funcao
  118. else
  119. echo -e "${azul}Credencial Encontrada...${desliga}" | pv -qL "$padrao_escrita"
  120. source "$usuario_save" # Chamando Profile do player.
  121. sleep 0.3s
  122. fi
  123. }
  124. #=====FUNÇÕES DE CONFIGURAÇÕES===
  125. function DEBUG(){
  126. [[ "${_DEBUG}" = "on" ]] && set -x
  127. }
  128. function ctrl_c(){
  129. die # Mate ogg123
  130. echo -e "\nCTRL + C Pressionado, saindo..."
  131. exit 0 # tchau!
  132. }
  133. # Morre ogg123!
  134. function die(){
  135. killall ogg123 >/dev/null 2>&1
  136. sleep 0.3s
  137. }
  138. #=====FUNÇÃO DE AJUDA===
  139. function ajuda(){
  140. cat <<EOF | less
  141. ${nome_versao}
  142. O QUE É AMMYLAND?
  143. -----------------
  144. Ammyland é um jogo fictício com uma historia própria onde você
  145. é o detetive e precisa desvendar os casos que surgem.
  146. Muita criptografia, esteganografia e raxa cuca estão ligados
  147. á neste jogo.
  148. COMO JOGAR?
  149. -----------
  150. Na maiora das partes você necessida entrar com comandos para
  151. o jogo interpretar, entretando salvo exceções em menus por exemplo
  152. de entrada, você necessita apenas digitar teclas como:
  153. 0 1 2, etc... Assim o sistema entende qual a escolha.
  154. AUTOR
  155. Escrito por Jefferson Rocha
  156. BUGS
  157. lrcjefferson@gmail.com
  158. LICENÇA
  159. MIT
  160. PARA SAIR PRESSIONE <q>
  161. EOF
  162. if [[ "$em_linha" = "on" ]]; then # Chamou em linha?
  163. { exit 0 ;}
  164. else
  165. clear
  166. fi
  167. }
  168. #==================================#
  169. # Usuário chamou ajuda em linha?
  170. [[ "$1" = "-a" ]] || [[ "$1" = "--ajuda" ]] && { em_linha="on"; ajuda "$@" ;}
  171. # Mensagem Principal do jogo
  172. clear
  173. echo -e \
  174. "
  175. \E[31;1m
  176. ~|~ _ _ _ _ _ _ _ _ /\ _ _ _ _ | _ _ _|
  177. | (/_| | (_)| (/_| | | /~~\| | || | |\/|(_|| |(_|
  178. /
  179. \E[m
  180. "
  181. # Armadilha para o ctrl + c
  182. trap ctrl_c INT
  183. DEBUG # Debugador
  184. # Chamada função para
  185. # reconheciento do player.
  186. reconhecimento_do_player
  187. # Chamando função principal
  188. principal