tormenta20 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +27 -0
- data/README.md +203 -12
- data/Rakefile +9 -0
- data/db/schema.sql +382 -0
- data/db/seeds.rb +377 -0
- data/db/tormenta20.sqlite3 +0 -0
- data/docs/armaduras.md +72 -0
- data/docs/armas.md +95 -0
- data/docs/classes.md +105 -0
- data/docs/divindades.md +77 -0
- data/docs/escudos.md +49 -0
- data/docs/itens.md +59 -0
- data/docs/magias.md +157 -0
- data/docs/materiais_especiais.md +50 -0
- data/docs/melhorias.md +55 -0
- data/docs/origens.md +61 -0
- data/docs/poderes.md +98 -0
- data/docs/regras.md +51 -0
- data/examples/database_usage.rb +155 -0
- data/src/json/classes/arcanista.json +86 -0
- data/src/json/classes/barbaro.json +85 -0
- data/src/json/classes/bardo.json +91 -0
- data/src/json/classes/bucaneiro.json +96 -0
- data/src/json/classes/cacador.json +96 -0
- data/src/json/classes/cavaleiro.json +87 -0
- data/src/json/classes/clerigo.json +82 -0
- data/src/json/classes/druida.json +88 -0
- data/src/json/classes/guerreiro.json +90 -0
- data/src/json/classes/inventor.json +100 -0
- data/src/json/classes/ladino.json +96 -0
- data/src/json/classes/lutador.json +90 -0
- data/src/json/classes/nobre.json +100 -0
- data/src/json/classes/paladino.json +93 -0
- data/src/json/deuses/aharadak.json +26 -0
- data/src/json/deuses/allihanna.json +26 -0
- data/src/json/deuses/arsenal.json +28 -0
- data/src/json/deuses/azgher.json +28 -0
- data/src/json/deuses/hyninn.json +28 -0
- data/src/json/deuses/kallyadranoch.json +28 -0
- data/src/json/deuses/khalmyr.json +27 -0
- data/src/json/deuses/lena.json +28 -0
- data/src/json/deuses/lin_wu.json +28 -0
- data/src/json/deuses/marah.json +28 -0
- data/src/json/deuses/megalokk.json +28 -0
- data/src/json/deuses/nimb.json +27 -0
- data/src/json/deuses/oceano.json +26 -0
- data/src/json/deuses/sszzaas.json +28 -0
- data/src/json/deuses/tanna_toh.json +28 -0
- data/src/json/deuses/tenebra.json +26 -0
- data/src/json/deuses/thwor.json +27 -0
- data/src/json/deuses/thyatis.json +26 -0
- data/src/json/deuses/valkaria.json +30 -0
- data/src/json/deuses/wynna.json +25 -0
- data/src/json/equipamentos/armaduras/leves/armadura_acolchoada.json +15 -0
- data/src/json/equipamentos/armaduras/leves/armadura_de_couro.json +13 -0
- data/src/json/equipamentos/armaduras/leves/couraca.json +13 -0
- data/src/json/equipamentos/armaduras/leves/couro_batido.json +13 -0
- data/src/json/equipamentos/armaduras/leves/gibao_de_peles.json +13 -0
- data/src/json/equipamentos/armaduras/pesadas/armadura_completa.json +19 -0
- data/src/json/equipamentos/armaduras/pesadas/brunea.json +17 -0
- data/src/json/equipamentos/armaduras/pesadas/cota_de_malha.json +17 -0
- data/src/json/equipamentos/armaduras/pesadas/loriga_segmentada.json +17 -0
- data/src/json/equipamentos/armaduras/pesadas/meia_armadura.json +17 -0
- data/src/json/equipamentos/armas/exoticas/chicote.json +23 -0
- data/src/json/equipamentos/armas/exoticas/corrente_de_espinhos.json +23 -0
- data/src/json/equipamentos/armas/exoticas/espada_bastarda.json +19 -0
- data/src/json/equipamentos/armas/exoticas/katana.json +19 -0
- data/src/json/equipamentos/armas/exoticas/machado_anao.json +19 -0
- data/src/json/equipamentos/armas/exoticas/machado_taurico.json +17 -0
- data/src/json/equipamentos/armas/exoticas/rede.json +41 -0
- data/src/json/equipamentos/armas/fogo/mosquete.json +21 -0
- data/src/json/equipamentos/armas/fogo/pistola.json +21 -0
- data/src/json/equipamentos/armas/marciais/alabarda.json +17 -0
- data/src/json/equipamentos/armas/marciais/alfange.json +17 -0
- data/src/json/equipamentos/armas/marciais/arco_longo.json +22 -0
- data/src/json/equipamentos/armas/marciais/besta_pesada.json +21 -0
- data/src/json/equipamentos/armas/marciais/cimitarra.json +17 -0
- data/src/json/equipamentos/armas/marciais/espada_longa.json +17 -0
- data/src/json/equipamentos/armas/marciais/florete.json +17 -0
- data/src/json/equipamentos/armas/marciais/gadanho.json +17 -0
- data/src/json/equipamentos/armas/marciais/lanca_montada.json +20 -0
- data/src/json/equipamentos/armas/marciais/machadinha.json +19 -0
- data/src/json/equipamentos/armas/marciais/machado_de_batalha.json +17 -0
- data/src/json/equipamentos/armas/marciais/machado_de_guerra.json +17 -0
- data/src/json/equipamentos/armas/marciais/mangual.json +21 -0
- data/src/json/equipamentos/armas/marciais/marreta.json +17 -0
- data/src/json/equipamentos/armas/marciais/martelo_de_guerra.json +17 -0
- data/src/json/equipamentos/armas/marciais/montante.json +17 -0
- data/src/json/equipamentos/armas/marciais/picareta.json +17 -0
- data/src/json/equipamentos/armas/marciais/tridente.json +22 -0
- data/src/json/equipamentos/armas/simples/adaga.json +21 -0
- data/src/json/equipamentos/armas/simples/arco_curto.json +21 -0
- data/src/json/equipamentos/armas/simples/azagaia.json +20 -0
- data/src/json/equipamentos/armas/simples/besta_leve.json +21 -0
- data/src/json/equipamentos/armas/simples/bordao.json +17 -0
- data/src/json/equipamentos/armas/simples/clava.json +17 -0
- data/src/json/equipamentos/armas/simples/espada_curta.json +17 -0
- data/src/json/equipamentos/armas/simples/foice.json +17 -0
- data/src/json/equipamentos/armas/simples/funda.json +23 -0
- data/src/json/equipamentos/armas/simples/lanca.json +19 -0
- data/src/json/equipamentos/armas/simples/maca.json +17 -0
- data/src/json/equipamentos/armas/simples/pique.json +17 -0
- data/src/json/equipamentos/armas/simples/tacape.json +17 -0
- data/src/json/equipamentos/escudos/escudo_leve.json +22 -0
- data/src/json/equipamentos/escudos/escudo_pesado.json +22 -0
- data/src/json/equipamentos/itens/alimentacao/batata_valkariana.json +14 -0
- data/src/json/equipamentos/itens/alimentacao/gorad_quente.json +12 -0
- data/src/json/equipamentos/itens/alimentacao/macarrao_de_yuvalin.json +12 -0
- data/src/json/equipamentos/itens/alimentacao/prato_do_aventureiro.json +13 -0
- data/src/json/equipamentos/itens/alimentacao/racao_de_viagem.json +14 -0
- data/src/json/equipamentos/itens/alimentacao/refeicao_comum.json +9 -0
- data/src/json/equipamentos/itens/alimentacao/sopa_de_peixe.json +13 -0
- data/src/json/equipamentos/itens/alquimicos/catalisadores/baga_de_fogo.json +17 -0
- data/src/json/equipamentos/itens/alquimicos/catalisadores/dente_de_dragao.json +17 -0
- data/src/json/equipamentos/itens/alquimicos/catalisadores/essencia_abissal.json +22 -0
- data/src/json/equipamentos/itens/alquimicos/catalisadores/liquen_lilas.json +18 -0
- data/src/json/equipamentos/itens/alquimicos/catalisadores/musgo_purpura.json +18 -0
- data/src/json/equipamentos/itens/alquimicos/catalisadores/ossos_de_monstro.json +17 -0
- data/src/json/equipamentos/itens/alquimicos/catalisadores/po_de_cristal.json +18 -0
- data/src/json/equipamentos/itens/alquimicos/catalisadores/po_de_giz.json +18 -0
- data/src/json/equipamentos/itens/alquimicos/catalisadores/ramo_verdejante.json +16 -0
- data/src/json/equipamentos/itens/alquimicos/catalisadores/saco_de_sal.json +18 -0
- data/src/json/equipamentos/itens/alquimicos/catalisadores/seixo_de_ambar.json +18 -0
- data/src/json/equipamentos/itens/alquimicos/catalisadores/terra_de_cemiterio.json +18 -0
- data/src/json/equipamentos/itens/alquimicos/preparados/acido.json +19 -0
- data/src/json/equipamentos/itens/alquimicos/preparados/balsamo_restaurador.json +16 -0
- data/src/json/equipamentos/itens/alquimicos/preparados/bomba.json +30 -0
- data/src/json/equipamentos/itens/alquimicos/preparados/cosmetico.json +18 -0
- data/src/json/equipamentos/itens/alquimicos/preparados/elixir_do_amor.json +23 -0
- data/src/json/equipamentos/itens/alquimicos/preparados/essencia_de_mana.json +16 -0
- data/src/json/equipamentos/itens/alquimicos/preparados/fogo_alquimico.json +27 -0
- data/src/json/equipamentos/itens/alquimicos/preparados/po_do_desaparecimento.json +18 -0
- data/src/json/equipamentos/itens/alquimicos/venenos/beladona.json +22 -0
- data/src/json/equipamentos/itens/alquimicos/venenos/bruma_sonolenta.json +21 -0
- data/src/json/equipamentos/itens/alquimicos/venenos/cicuta.json +22 -0
- data/src/json/equipamentos/itens/alquimicos/venenos/essencia_de_sombra.json +20 -0
- data/src/json/equipamentos/itens/alquimicos/venenos/nevoa_toxica.json +22 -0
- data/src/json/equipamentos/itens/alquimicos/venenos/peconha_comum.json +24 -0
- data/src/json/equipamentos/itens/alquimicos/venenos/peconha_concentrada.json +22 -0
- data/src/json/equipamentos/itens/alquimicos/venenos/peconha_potente.json +22 -0
- data/src/json/equipamentos/itens/alquimicos/venenos/po_de_lich.json +23 -0
- data/src/json/equipamentos/itens/alquimicos/venenos/riso_de_nimb.json +21 -0
- data/src/json/equipamentos/itens/animais/alforje.json +11 -0
- data/src/json/equipamentos/itens/animais/cao_de_caca.json +18 -0
- data/src/json/equipamentos/itens/animais/cavalo.json +20 -0
- data/src/json/equipamentos/itens/animais/cavalo_de_guerra.json +17 -0
- data/src/json/equipamentos/itens/animais/estabulo.json +10 -0
- data/src/json/equipamentos/itens/animais/ponei.json +21 -0
- data/src/json/equipamentos/itens/animais/ponei_de_guerra.json +18 -0
- data/src/json/equipamentos/itens/animais/trobo.json +14 -0
- data/src/json/equipamentos/itens/aventura/agua_benta.json +23 -0
- data/src/json/equipamentos/itens/aventura/algemas.json +35 -0
- data/src/json/equipamentos/itens/aventura/arpeu.json +18 -0
- data/src/json/equipamentos/itens/aventura/bandoleira_de_pocoes.json +15 -0
- data/src/json/equipamentos/itens/aventura/barraca.json +14 -0
- data/src/json/equipamentos/itens/aventura/corda.json +26 -0
- data/src/json/equipamentos/itens/aventura/espelho.json +10 -0
- data/src/json/equipamentos/itens/aventura/lampiao.json +19 -0
- data/src/json/equipamentos/itens/aventura/mochila.json +12 -0
- data/src/json/equipamentos/itens/aventura/mochila_de_aventureiro.json +14 -0
- data/src/json/equipamentos/itens/aventura/oleo.json +19 -0
- data/src/json/equipamentos/itens/aventura/organizador_de_pergaminhos.json +14 -0
- data/src/json/equipamentos/itens/aventura/pe_de_cabra.json +18 -0
- data/src/json/equipamentos/itens/aventura/saco_de_dormir.json +13 -0
- data/src/json/equipamentos/itens/aventura/simbolo_sagrado.json +15 -0
- data/src/json/equipamentos/itens/aventura/tocha.json +28 -0
- data/src/json/equipamentos/itens/aventura/vara_de_madeira.json +12 -0
- data/src/json/equipamentos/itens/esotericos/bolsa_de_po.json +17 -0
- data/src/json/equipamentos/itens/esotericos/cajado_arcano.json +20 -0
- data/src/json/equipamentos/itens/esotericos/cetro_elemental.json +22 -0
- data/src/json/equipamentos/itens/esotericos/costela_de_lich.json +18 -0
- data/src/json/equipamentos/itens/esotericos/dedo_de_ente.json +21 -0
- data/src/json/equipamentos/itens/esotericos/luva_de_ferro.json +17 -0
- data/src/json/equipamentos/itens/esotericos/medalhao_de_prata.json +16 -0
- data/src/json/equipamentos/itens/esotericos/orbe_cristalino.json +15 -0
- data/src/json/equipamentos/itens/esotericos/tomo_hermetico.json +17 -0
- data/src/json/equipamentos/itens/esotericos/varinha_arcana.json +15 -0
- data/src/json/equipamentos/itens/ferramentas/alaude_elfico.json +16 -0
- data/src/json/equipamentos/itens/ferramentas/colecao_de_livros.json +16 -0
- data/src/json/equipamentos/itens/ferramentas/equipamento_de_viagem.json +19 -0
- data/src/json/equipamentos/itens/ferramentas/estojo_de_disfarces.json +18 -0
- data/src/json/equipamentos/itens/ferramentas/flauta_mistica.json +17 -0
- data/src/json/equipamentos/itens/ferramentas/gazua.json +18 -0
- data/src/json/equipamentos/itens/ferramentas/instrumento_musical.json +20 -0
- data/src/json/equipamentos/itens/ferramentas/instrumentos_de_oficio.json +21 -0
- data/src/json/equipamentos/itens/ferramentas/luneta.json +15 -0
- data/src/json/equipamentos/itens/ferramentas/maleta_de_medicamentos.json +17 -0
- data/src/json/equipamentos/itens/ferramentas/sela.json +19 -0
- data/src/json/equipamentos/itens/ferramentas/tambor_das_profundezas.json +17 -0
- data/src/json/equipamentos/itens/servicos/conducao.json +19 -0
- data/src/json/equipamentos/itens/servicos/curandeiro.json +9 -0
- data/src/json/equipamentos/itens/servicos/estadia.json +42 -0
- data/src/json/equipamentos/itens/servicos/magia.json +23 -0
- data/src/json/equipamentos/itens/servicos/mensageiro.json +10 -0
- data/src/json/equipamentos/itens/veiculos/balao_goblin.json +34 -0
- data/src/json/equipamentos/itens/veiculos/canoa.json +18 -0
- data/src/json/equipamentos/itens/veiculos/carroca.json +20 -0
- data/src/json/equipamentos/itens/veiculos/carruagem.json +21 -0
- data/src/json/equipamentos/itens/veiculos/veleiro.json +11 -0
- data/src/json/equipamentos/itens/vestuario/andrajos_de_aldeao.json +16 -0
- data/src/json/equipamentos/itens/vestuario/bandana.json +14 -0
- data/src/json/equipamentos/itens/vestuario/botas_reforcadas.json +15 -0
- data/src/json/equipamentos/itens/vestuario/camisa_bufante.json +14 -0
- data/src/json/equipamentos/itens/vestuario/capa_esvoacante.json +14 -0
- data/src/json/equipamentos/itens/vestuario/capa_pesada.json +14 -0
- data/src/json/equipamentos/itens/vestuario/casaco_longo.json +15 -0
- data/src/json/equipamentos/itens/vestuario/chapeu_arcano.json +15 -0
- data/src/json/equipamentos/itens/vestuario/enfeite_de_elmo.json +15 -0
- data/src/json/equipamentos/itens/vestuario/farrapos_de_ermitao.json +16 -0
- data/src/json/equipamentos/itens/vestuario/gorro_de_ervas.json +14 -0
- data/src/json/equipamentos/itens/vestuario/luva_de_pelica.json +14 -0
- data/src/json/equipamentos/itens/vestuario/manopla.json +15 -0
- data/src/json/equipamentos/itens/vestuario/manto_camuflado.json +20 -0
- data/src/json/equipamentos/itens/vestuario/manto_eclesiastico.json +14 -0
- data/src/json/equipamentos/itens/vestuario/robe_mistico.json +14 -0
- data/src/json/equipamentos/itens/vestuario/sapatos_de_camurca.json +14 -0
- data/src/json/equipamentos/itens/vestuario/tabardo.json +14 -0
- data/src/json/equipamentos/itens/vestuario/traje_da_corte.json +19 -0
- data/src/json/equipamentos/itens/vestuario/traje_de_viajante.json +13 -0
- data/src/json/equipamentos/itens/vestuario/veste_de_seda.json +14 -0
- data/src/json/equipamentos/municoes/balas.json +13 -0
- data/src/json/equipamentos/municoes/flechas.json +13 -0
- data/src/json/equipamentos/municoes/pedras.json +14 -0
- data/src/json/equipamentos/municoes/virotes.json +14 -0
- data/src/json/itens_superiores/materiais_especiais/aco_rubi.json +44 -0
- data/src/json/itens_superiores/materiais_especiais/adamante.json +35 -0
- data/src/json/itens_superiores/materiais_especiais/gelo_eterno.json +33 -0
- data/src/json/itens_superiores/materiais_especiais/madeira_tollon.json +31 -0
- data/src/json/itens_superiores/materiais_especiais/materia_vermelha.json +51 -0
- data/src/json/itens_superiores/materiais_especiais/mitral.json +38 -0
- data/src/json/itens_superiores/melhorias/armaduras_escudos/ajustada.json +11 -0
- data/src/json/itens_superiores/melhorias/armaduras_escudos/delicada.json +15 -0
- data/src/json/itens_superiores/melhorias/armaduras_escudos/espinhosa.json +15 -0
- data/src/json/itens_superiores/melhorias/armaduras_escudos/espinhoso.json +11 -0
- data/src/json/itens_superiores/melhorias/armaduras_escudos/polida.json +13 -0
- data/src/json/itens_superiores/melhorias/armaduras_escudos/reforcada.json +13 -0
- data/src/json/itens_superiores/melhorias/armaduras_escudos/selada.json +14 -0
- data/src/json/itens_superiores/melhorias/armaduras_escudos/sob_medida.json +13 -0
- data/src/json/itens_superiores/melhorias/armas/atroz.json +11 -0
- data/src/json/itens_superiores/melhorias/armas/certeira.json +11 -0
- data/src/json/itens_superiores/melhorias/armas/cruel.json +11 -0
- data/src/json/itens_superiores/melhorias/armas/equilibrada.json +11 -0
- data/src/json/itens_superiores/melhorias/armas/harmonizada.json +13 -0
- data/src/json/itens_superiores/melhorias/armas/injecao_alquimica.json +14 -0
- data/src/json/itens_superiores/melhorias/armas/macica.json +12 -0
- data/src/json/itens_superiores/melhorias/armas/mira_telescopica.json +16 -0
- data/src/json/itens_superiores/melhorias/armas/precisa.json +12 -0
- data/src/json/itens_superiores/melhorias/armas/pungente.json +11 -0
- data/src/json/itens_superiores/melhorias/esotericos/canalizador.json +11 -0
- data/src/json/itens_superiores/melhorias/esotericos/energetico.json +12 -0
- data/src/json/itens_superiores/melhorias/esotericos/harmonizado.json +16 -0
- data/src/json/itens_superiores/melhorias/esotericos/poderoso.json +11 -0
- data/src/json/itens_superiores/melhorias/esotericos/vigilante.json +11 -0
- data/src/json/itens_superiores/melhorias/ferramentas_vestuario/aprimorado.json +15 -0
- data/src/json/itens_superiores/melhorias/geral/banhado_a_ouro.json +17 -0
- data/src/json/itens_superiores/melhorias/geral/cravejado_de_gemas.json +12 -0
- data/src/json/itens_superiores/melhorias/geral/discreto.json +13 -0
- data/src/json/itens_superiores/melhorias/geral/macabro.json +12 -0
- data/src/json/itens_superiores/melhorias/geral/material_especial.json +13 -0
- data/src/json/origens/acolito.json +11 -0
- data/src/json/origens/amigo_dos_animais.json +11 -0
- data/src/json/origens/amnesico.json +10 -0
- data/src/json/origens/aristocrata.json +11 -0
- data/src/json/origens/artesao.json +11 -0
- data/src/json/origens/artista.json +11 -0
- data/src/json/origens/assistente_de_laboratorio.json +11 -0
- data/src/json/origens/batedor.json +11 -0
- data/src/json/origens/capanga.json +11 -0
- data/src/json/origens/charlatao.json +11 -0
- data/src/json/origens/circense.json +11 -0
- data/src/json/origens/criminoso.json +11 -0
- data/src/json/origens/curandeiro.json +11 -0
- data/src/json/origens/eremita.json +11 -0
- data/src/json/origens/escravo.json +11 -0
- data/src/json/origens/estudioso.json +11 -0
- data/src/json/origens/fazendeiro.json +11 -0
- data/src/json/origens/forasteiro.json +11 -0
- data/src/json/origens/gladiador.json +11 -0
- data/src/json/origens/guarda.json +11 -0
- data/src/json/origens/herdeiro.json +11 -0
- data/src/json/origens/heroi_campones.json +11 -0
- data/src/json/origens/marujo.json +11 -0
- data/src/json/origens/mateiro.json +11 -0
- data/src/json/origens/membro_de_guilda.json +11 -0
- data/src/json/origens/mercador.json +11 -0
- data/src/json/origens/minerador.json +11 -0
- data/src/json/origens/nomade.json +11 -0
- data/src/json/origens/pivete.json +11 -0
- data/src/json/origens/refugiado.json +11 -0
- data/src/json/origens/seguidor.json +11 -0
- data/src/json/origens/selvagem.json +11 -0
- data/src/json/origens/soldado.json +11 -0
- data/src/json/origens/taverneiro.json +11 -0
- data/src/json/origens/trabalhador.json +11 -0
- data/src/json/poderes/habilidades_unicas_de_origem/a_prova_de_tudo.json +14 -0
- data/src/json/poderes/habilidades_unicas_de_origem/agua_no_feijao.json +14 -0
- data/src/json/poderes/habilidades_unicas_de_origem/alpinista_social.json +9 -0
- data/src/json/poderes/habilidades_unicas_de_origem/amigo_especial.json +16 -0
- data/src/json/poderes/habilidades_unicas_de_origem/antigo_mestre.json +15 -0
- data/src/json/poderes/habilidades_unicas_de_origem/busca_interior.json +13 -0
- data/src/json/poderes/habilidades_unicas_de_origem/confissao.json +14 -0
- data/src/json/poderes/habilidades_unicas_de_origem/coracao_heroico.json +13 -0
- data/src/json/poderes/habilidades_unicas_de_origem/cultura_exotica.json +13 -0
- data/src/json/poderes/habilidades_unicas_de_origem/desejo_de_liberdade.json +12 -0
- data/src/json/poderes/habilidades_unicas_de_origem/detetive.json +14 -0
- data/src/json/poderes/habilidades_unicas_de_origem/dom_artistico.json +10 -0
- data/src/json/poderes/habilidades_unicas_de_origem/escavador.json +13 -0
- data/src/json/poderes/habilidades_unicas_de_origem/esforcado.json +13 -0
- data/src/json/poderes/habilidades_unicas_de_origem/esse_cheiro.json +14 -0
- data/src/json/poderes/habilidades_unicas_de_origem/estoico.json +16 -0
- data/src/json/poderes/habilidades_unicas_de_origem/frutos_do_trabalho.json +19 -0
- data/src/json/poderes/habilidades_unicas_de_origem/gororoba.json +12 -0
- data/src/json/poderes/habilidades_unicas_de_origem/heranca.json +13 -0
- data/src/json/poderes/habilidades_unicas_de_origem/influencia_militar.json +14 -0
- data/src/json/poderes/habilidades_unicas_de_origem/lembrancas_graduais.json +14 -0
- data/src/json/poderes/habilidades_unicas_de_origem/medico_de_campo.json +12 -0
- data/src/json/poderes/habilidades_unicas_de_origem/membro_da_igreja.json +14 -0
- data/src/json/poderes/habilidades_unicas_de_origem/mochileiro.json +9 -0
- data/src/json/poderes/habilidades_unicas_de_origem/negociacao.json +12 -0
- data/src/json/poderes/habilidades_unicas_de_origem/palpite_fundamentado.json +13 -0
- data/src/json/poderes/habilidades_unicas_de_origem/pao_e_circo.json +11 -0
- data/src/json/poderes/habilidades_unicas_de_origem/passagem_de_navio.json +13 -0
- data/src/json/poderes/habilidades_unicas_de_origem/punguista.json +15 -0
- data/src/json/poderes/habilidades_unicas_de_origem/quebra_galho.json +14 -0
- data/src/json/poderes/habilidades_unicas_de_origem/rede_de_contatos.json +14 -0
- data/src/json/poderes/habilidades_unicas_de_origem/sangue_azul.json +12 -0
- data/src/json/poderes/habilidades_unicas_de_origem/truque_de_magica.json +14 -0
- data/src/json/poderes/habilidades_unicas_de_origem/vendedor_de_carcacas.json +13 -0
- data/src/json/poderes/habilidades_unicas_de_origem/vida_rustica.json +13 -0
- data/src/json/poderes/poderes_concedidos/afinidade_com_a_tormenta.json +14 -0
- data/src/json/poderes/poderes_concedidos/almejar_o_impossivel.json +13 -0
- data/src/json/poderes/poderes_concedidos/anfibio.json +13 -0
- data/src/json/poderes/poderes_concedidos/apostar_com_o_trapaceiro.json +12 -0
- data/src/json/poderes/poderes_concedidos/armas_da_ambicao.json +12 -0
- data/src/json/poderes/poderes_concedidos/arsenal_das_profundezas.json +14 -0
- data/src/json/poderes/poderes_concedidos/astucia_da_serpente.json +14 -0
- data/src/json/poderes/poderes_concedidos/ataque_piedoso.json +13 -0
- data/src/json/poderes/poderes_concedidos/aura_de_medo.json +17 -0
- data/src/json/poderes/poderes_concedidos/aura_de_paz.json +18 -0
- data/src/json/poderes/poderes_concedidos/aura_restauradora.json +13 -0
- data/src/json/poderes/poderes_concedidos/bencao_do_mana.json +10 -0
- data/src/json/poderes/poderes_concedidos/caricia_sombria.json +26 -0
- data/src/json/poderes/poderes_concedidos/centelha_magica.json +13 -0
- data/src/json/poderes/poderes_concedidos/compreender_os_ermos.json +17 -0
- data/src/json/poderes/poderes_concedidos/conhecimento_enciclopedico.json +13 -0
- data/src/json/poderes/poderes_concedidos/conjurar_arma.json +19 -0
- data/src/json/poderes/poderes_concedidos/coragem_total.json +11 -0
- data/src/json/poderes/poderes_concedidos/cura_gentil.json +10 -0
- data/src/json/poderes/poderes_concedidos/curandeira_perfeita.json +15 -0
- data/src/json/poderes/poderes_concedidos/dedo_verde.json +14 -0
- data/src/json/poderes/poderes_concedidos/descanso_natural.json +10 -0
- data/src/json/poderes/poderes_concedidos/dom_da_esperanca.json +15 -0
- data/src/json/poderes/poderes_concedidos/dom_da_imortalidade.json +8 -0
- data/src/json/poderes/poderes_concedidos/dom_da_profecia.json +6 -0
- data/src/json/poderes/poderes_concedidos/dom_da_ressurreicao.json +8 -0
- data/src/json/poderes/poderes_concedidos/dom_da_verdade.json +15 -0
- data/src/json/poderes/poderes_concedidos/escamas_draconicas.json +13 -0
- data/src/json/poderes/poderes_concedidos/escudo_magico.json +12 -0
- data/src/json/poderes/poderes_concedidos/espada_justiceira.json +13 -0
- data/src/json/poderes/poderes_concedidos/espada_solar.json +16 -0
- data/src/json/poderes/poderes_concedidos/extase_da_loucura.json +12 -0
- data/src/json/poderes/poderes_concedidos/familiar_ofidico.json +13 -0
- data/src/json/poderes/poderes_concedidos/farsa_do_fingidor.json +14 -0
- data/src/json/poderes/poderes_concedidos/fe_guerreira.json +20 -0
- data/src/json/poderes/poderes_concedidos/forma_de_macaco.json +20 -0
- data/src/json/poderes/poderes_concedidos/fulgor_solar.json +18 -0
- data/src/json/poderes/poderes_concedidos/furia_divina.json +20 -0
- data/src/json/poderes/poderes_concedidos/golpista_divino.json +14 -0
- data/src/json/poderes/poderes_concedidos/habitante_do_deserto.json +14 -0
- data/src/json/poderes/poderes_concedidos/inimigo_de_tenebra.json +14 -0
- data/src/json/poderes/poderes_concedidos/kiai_divino.json +13 -0
- data/src/json/poderes/poderes_concedidos/liberdade_divina.json +12 -0
- data/src/json/poderes/poderes_concedidos/manto_da_penumbra.json +14 -0
- data/src/json/poderes/poderes_concedidos/mente_analitica.json +16 -0
- data/src/json/poderes/poderes_concedidos/mente_vazia.json +16 -0
- data/src/json/poderes/poderes_concedidos/mestre_dos_mares.json +18 -0
- data/src/json/poderes/poderes_concedidos/olhar_amedrontador.json +14 -0
- data/src/json/poderes/poderes_concedidos/palavras_de_bondade.json +14 -0
- data/src/json/poderes/poderes_concedidos/percepcao_temporal.json +17 -0
- data/src/json/poderes/poderes_concedidos/pesquisa_abencoada.json +15 -0
- data/src/json/poderes/poderes_concedidos/poder_oculto.json +21 -0
- data/src/json/poderes/poderes_concedidos/presas_primordiais.json +23 -0
- data/src/json/poderes/poderes_concedidos/presas_venenosas.json +16 -0
- data/src/json/poderes/poderes_concedidos/rejeicao_divina.json +13 -0
- data/src/json/poderes/poderes_concedidos/reparar_injustica.json +13 -0
- data/src/json/poderes/poderes_concedidos/sangue_de_ferro.json +13 -0
- data/src/json/poderes/poderes_concedidos/sangue_ofidico.json +14 -0
- data/src/json/poderes/poderes_concedidos/servos_do_dragao.json +24 -0
- data/src/json/poderes/poderes_concedidos/sopro_do_mar.json +25 -0
- data/src/json/poderes/poderes_concedidos/sorte_dos_loucos.json +13 -0
- data/src/json/poderes/poderes_concedidos/talento_artistico.json +14 -0
- data/src/json/poderes/poderes_concedidos/teurgista_mistico.json +11 -0
- data/src/json/poderes/poderes_concedidos/tradicao_de_lin_wu.json +14 -0
- data/src/json/poderes/poderes_concedidos/transmissao_da_loucura.json +17 -0
- data/src/json/poderes/poderes_concedidos/tropas_duyshidakk.json +24 -0
- data/src/json/poderes/poderes_concedidos/urro_divino.json +13 -0
- data/src/json/poderes/poderes_concedidos/visao_nas_trevas.json +10 -0
- data/src/json/poderes/poderes_concedidos/voz_da_civilizacao.json +10 -0
- data/src/json/poderes/poderes_concedidos/voz_da_natureza.json +18 -0
- data/src/json/poderes/poderes_concedidos/voz_dos_monstros.json +11 -0
- data/src/json/poderes/poderes_concedidos/zumbificar.json +18 -0
- data/src/json/poderes/poderes_da_tormenta/anatomia_insana.json +12 -0
- data/src/json/poderes/poderes_da_tormenta/antenas.json +18 -0
- data/src/json/poderes/poderes_da_tormenta/armamento_aberrante.json +14 -0
- data/src/json/poderes/poderes_da_tormenta/articulacoes_flexiveis.json +15 -0
- data/src/json/poderes/poderes_da_tormenta/asas_insetoides.json +17 -0
- data/src/json/poderes/poderes_da_tormenta/carapaca.json +12 -0
- data/src/json/poderes/poderes_da_tormenta/corpo_aberrante.json +13 -0
- data/src/json/poderes/poderes_da_tormenta/cuspir_enxame.json +20 -0
- data/src/json/poderes/poderes_da_tormenta/dentes_afiados.json +19 -0
- data/src/json/poderes/poderes_da_tormenta/desprezar_a_realidade.json +21 -0
- data/src/json/poderes/poderes_da_tormenta/empunhadura_rubra.json +13 -0
- data/src/json/poderes/poderes_da_tormenta/fome_de_mana.json +11 -0
- data/src/json/poderes/poderes_da_tormenta/larva_explosiva.json +17 -0
- data/src/json/poderes/poderes_da_tormenta/legiao_aberrante.json +19 -0
- data/src/json/poderes/poderes_da_tormenta/maos_membranosas.json +18 -0
- data/src/json/poderes/poderes_da_tormenta/membros_estendidos.json +12 -0
- data/src/json/poderes/poderes_da_tormenta/membros_extras.json +27 -0
- data/src/json/poderes/poderes_da_tormenta/mente_aberrante.json +20 -0
- data/src/json/poderes/poderes_da_tormenta/olhos_vermelhos.json +12 -0
- data/src/json/poderes/poderes_da_tormenta/pele_corrompida.json +13 -0
- data/src/json/poderes/poderes_da_tormenta/sangue_acido.json +13 -0
- data/src/json/poderes/poderes_da_tormenta/visco_rubro.json +15 -0
- data/src/json/regras/alcances.json +33 -0
- data/src/json/regras/carga.json +47 -0
- data/src/json/regras/critico.json +32 -0
- data/src/json/regras/dinheiro_inicial.json +27 -0
- data/src/json/regras/empunhaduras.json +22 -0
- data/src/json/regras/habilidades_armas.json +37 -0
- data/src/json/regras/itens_superiores.json +19 -0
- data/src/json/regras/limites_uso.json +22 -0
- data/src/json/regras/moedas.json +32 -0
- data/src/json/regras/passos_dano.json +20 -0
- data/src/json/regras/proficiencias.json +32 -0
- data/src/json/regras/propositos_armas.json +37 -0
- data/src/json/regras/tipos_dano.json +25 -0
- data/src/json/regras/venenos.json +45 -0
- data/src/ruby/tormenta20/database.rb +224 -0
- data/src/ruby/tormenta20/models/arma.rb +123 -0
- data/src/ruby/tormenta20/models/armadura.rb +96 -0
- data/src/ruby/tormenta20/models/base.rb +19 -0
- data/src/ruby/tormenta20/models/classe.rb +134 -0
- data/src/ruby/tormenta20/models/divindade.rb +98 -0
- data/src/ruby/tormenta20/models/escudo.rb +59 -0
- data/src/ruby/tormenta20/models/item.rb +61 -0
- data/src/ruby/tormenta20/models/magia.rb +226 -0
- data/src/ruby/tormenta20/models/material_especial.rb +52 -0
- data/src/ruby/tormenta20/models/melhoria.rb +52 -0
- data/src/ruby/tormenta20/models/origem.rb +71 -0
- data/src/ruby/tormenta20/models/poder.rb +120 -0
- data/src/ruby/tormenta20/models/regra.rb +47 -0
- data/src/ruby/tormenta20/seeder.rb +267 -0
- data/src/ruby/tormenta20/version.rb +1 -1
- data/src/ruby/tormenta20.rb +169 -7
- data/src/schema/magia.schema.json +277 -0
- data/src/schema/tormenta20.sql +433 -0
- data/tasks/jsonlint.rb +6 -4
- data/tools/pdf_extractor/README.md +171 -0
- data/tools/pdf_extractor/__init__.py +17 -0
- data/tools/pdf_extractor/pdf_extractor.py +441 -0
- data/tools/pdf_extractor/pipeline.py +450 -0
- data/tools/pdf_extractor/prompts.py +789 -0
- data/tools/pdf_extractor/requirements.txt +4 -0
- metadata +488 -12
- data/src/ruby/open_struct_json.rb +0 -35
- data/src/ruby/tormenta20/classes.rb +0 -0
- data/src/ruby/tormenta20/equipment.rb +0 -0
- data/src/ruby/tormenta20/magias.rb +0 -35
- data/src/ruby/tormenta20/origins.rb +0 -0
- data/src/ruby/tormenta20/races.rb +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 775c13dccef6b13bcd76ea3efc8e2cf8b4c5221faf4fb73dffce3ce9b265a101
|
|
4
|
+
data.tar.gz: 88618dbc1c4c5d1e6c6e9127e39b1c2726423bf79b0c8229452dc5c767273d0f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 759238af753ee81ef3619f372a7938c6a8a656988d63dca357bf997fdbe2dea6df45a2a1dbda5fc5374a4e49f52cb07c71f30d1ce33435e86a88332da4aa8f39
|
|
7
|
+
data.tar.gz: d3ead8b84ef084bdd77c6399d1b92fcafb8773cacd0b6a965bab9437356657246121ff880af605172baf6f2e129956a235ea8fc9566b6b21e37bcd01557ce91e
|
data/.rubocop.yml
CHANGED
|
@@ -6,3 +6,30 @@ Style/StringLiterals:
|
|
|
6
6
|
|
|
7
7
|
Style/StringLiteralsInInterpolation:
|
|
8
8
|
EnforcedStyle: double_quotes
|
|
9
|
+
|
|
10
|
+
Metrics/AbcSize:
|
|
11
|
+
Enabled: false
|
|
12
|
+
|
|
13
|
+
Metrics/BlockLength:
|
|
14
|
+
Enabled: false
|
|
15
|
+
|
|
16
|
+
Metrics/ClassLength:
|
|
17
|
+
Enabled: false
|
|
18
|
+
|
|
19
|
+
Metrics/CyclomaticComplexity:
|
|
20
|
+
Enabled: false
|
|
21
|
+
|
|
22
|
+
Metrics/MethodLength:
|
|
23
|
+
Enabled: false
|
|
24
|
+
|
|
25
|
+
Metrics/ModuleLength:
|
|
26
|
+
Enabled: false
|
|
27
|
+
|
|
28
|
+
Metrics/ParameterLists:
|
|
29
|
+
Enabled: false
|
|
30
|
+
|
|
31
|
+
Metrics/PerceivedComplexity:
|
|
32
|
+
Enabled: false
|
|
33
|
+
|
|
34
|
+
Layout/LineLength:
|
|
35
|
+
Max: 200
|
data/README.md
CHANGED
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
# Tormenta20
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Uma biblioteca Ruby com dados do RPG de mesa brasileiro Tormenta20.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
A gem inclui um banco de dados SQLite pré-populado com informações sobre magias, classes, origens, divindades, poderes e equipamentos do sistema Tormenta20.
|
|
6
6
|
|
|
7
7
|
## Installation
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Adicione ao Gemfile da sua aplicacao:
|
|
10
|
+
|
|
11
|
+
```ruby
|
|
12
|
+
gem 'tormenta20'
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
E execute:
|
|
10
16
|
|
|
11
17
|
```bash
|
|
12
|
-
bundle
|
|
18
|
+
bundle install
|
|
13
19
|
```
|
|
14
20
|
|
|
15
|
-
|
|
21
|
+
Ou instale diretamente:
|
|
16
22
|
|
|
17
23
|
```bash
|
|
18
24
|
gem install tormenta20
|
|
@@ -20,22 +26,207 @@ gem install tormenta20
|
|
|
20
26
|
|
|
21
27
|
## Usage
|
|
22
28
|
|
|
23
|
-
|
|
29
|
+
A gem ja vem com o banco de dados populado. Basta fazer require e usar:
|
|
30
|
+
|
|
31
|
+
```ruby
|
|
32
|
+
require 'tormenta20'
|
|
33
|
+
|
|
34
|
+
# Magias
|
|
35
|
+
Tormenta20.magias.count # => 198
|
|
36
|
+
Tormenta20.magias.arcanas # Magias arcanas
|
|
37
|
+
Tormenta20.magias.divinas # Magias divinas
|
|
38
|
+
Tormenta20.magias.by_circle("3") # Magias do 3o circulo
|
|
39
|
+
Tormenta20.magias.by_school('evoc') # Magias de evocacao
|
|
40
|
+
Tormenta20.magias.arcanas.by_circle("1") # Combinar filtros
|
|
41
|
+
|
|
42
|
+
# Classes
|
|
43
|
+
Tormenta20.classes.all
|
|
44
|
+
Tormenta20.classes.conjuradores # Classes com magia
|
|
45
|
+
|
|
46
|
+
# Origens
|
|
47
|
+
Tormenta20.origens.all
|
|
48
|
+
Tormenta20.origens.find('soldado')
|
|
49
|
+
Tormenta20.origens.with_unique_power # Origens com poder unico
|
|
50
|
+
|
|
51
|
+
# Divindades
|
|
52
|
+
Tormenta20.divindades.all
|
|
53
|
+
Tormenta20.divindades.energia_positiva # Deuses de energia positiva
|
|
54
|
+
Tormenta20.divindades.energia_negativa # Deuses de energia negativa
|
|
55
|
+
|
|
56
|
+
# Poderes
|
|
57
|
+
Tormenta20.poderes.all
|
|
58
|
+
Tormenta20.poderes.habilidades_unicas # Habilidades unicas de origem
|
|
59
|
+
Tormenta20.poderes.poderes_concedidos # Poderes concedidos por divindades
|
|
60
|
+
Tormenta20.poderes.poderes_tormenta # Poderes da Tormenta
|
|
61
|
+
|
|
62
|
+
# Equipamentos
|
|
63
|
+
Tormenta20.armas.all
|
|
64
|
+
Tormenta20.armas.simples # Armas simples
|
|
65
|
+
Tormenta20.armas.marciais # Armas marciais
|
|
66
|
+
Tormenta20.armaduras.all
|
|
67
|
+
Tormenta20.armaduras.leves # Armaduras leves
|
|
68
|
+
Tormenta20.escudos.all
|
|
69
|
+
|
|
70
|
+
# Itens Superiores
|
|
71
|
+
Tormenta20.materiais_especiais.all
|
|
72
|
+
|
|
73
|
+
# Regras
|
|
74
|
+
Tormenta20.regras.all
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Query Interface
|
|
78
|
+
|
|
79
|
+
A gem oferece uma interface de consulta simplificada. Todos os metodos retornam modelos ActiveRecord, permitindo encadeamento de scopes e queries:
|
|
80
|
+
|
|
81
|
+
```ruby
|
|
82
|
+
# Accessors disponiveis
|
|
83
|
+
Tormenta20.origens # => Tormenta20::Models::Origem
|
|
84
|
+
Tormenta20.poderes # => Tormenta20::Models::Poder
|
|
85
|
+
Tormenta20.divindades # => Tormenta20::Models::Divindade
|
|
86
|
+
Tormenta20.classes # => Tormenta20::Models::Classe
|
|
87
|
+
Tormenta20.magias # => Tormenta20::Models::Magia
|
|
88
|
+
Tormenta20.armas # => Tormenta20::Models::Arma
|
|
89
|
+
Tormenta20.armaduras # => Tormenta20::Models::Armadura
|
|
90
|
+
Tormenta20.escudos # => Tormenta20::Models::Escudo
|
|
91
|
+
Tormenta20.itens # => Tormenta20::Models::Item
|
|
92
|
+
Tormenta20.materiais_especiais # => Tormenta20::Models::MaterialEspecial
|
|
93
|
+
Tormenta20.melhorias # => Tormenta20::Models::Melhoria
|
|
94
|
+
Tormenta20.regras # => Tormenta20::Models::Regra
|
|
95
|
+
|
|
96
|
+
# Exemplos de queries ActiveRecord
|
|
97
|
+
Tormenta20.magias.where(type: 'arcana')
|
|
98
|
+
Tormenta20.magias.where(school: 'evoc').order(:name)
|
|
99
|
+
Tormenta20.poderes.where("name LIKE ?", "%Furia%")
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Models Disponiveis
|
|
103
|
+
|
|
104
|
+
| Model | Descricao | Quantidade | Documentacao |
|
|
105
|
+
|-------|-----------|------------|--------------|
|
|
106
|
+
| `Magia` | Magias arcanas, divinas e universais | 198 | [docs/magias.md](docs/magias.md) |
|
|
107
|
+
| `Classe` | Classes de personagem | 14 | [docs/classes.md](docs/classes.md) |
|
|
108
|
+
| `Origem` | Origens de personagem | 35 | [docs/origens.md](docs/origens.md) |
|
|
109
|
+
| `Divindade` | Deuses do Panteao | 20 | [docs/divindades.md](docs/divindades.md) |
|
|
110
|
+
| `Poder` | Poderes (habilidades unicas, concedidos, tormenta) | 129 | [docs/poderes.md](docs/poderes.md) |
|
|
111
|
+
| `Arma` | Armas | - | [docs/armas.md](docs/armas.md) |
|
|
112
|
+
| `Armadura` | Armaduras | - | [docs/armaduras.md](docs/armaduras.md) |
|
|
113
|
+
| `Escudo` | Escudos | 2 | [docs/escudos.md](docs/escudos.md) |
|
|
114
|
+
| `Item` | Itens gerais | - | [docs/itens.md](docs/itens.md) |
|
|
115
|
+
| `MaterialEspecial` | Materiais especiais | 6 | [docs/materiais_especiais.md](docs/materiais_especiais.md) |
|
|
116
|
+
| `Melhoria` | Melhorias magicas | - | [docs/melhorias.md](docs/melhorias.md) |
|
|
117
|
+
| `Regra` | Regras e dados de referencia | 14 | [docs/regras.md](docs/regras.md) |
|
|
118
|
+
|
|
119
|
+
> Cada link de documentacao contem a lista completa de atributos, scopes, metodos e exemplos de uso.
|
|
120
|
+
|
|
121
|
+
### Exemplos
|
|
122
|
+
|
|
123
|
+
```ruby
|
|
124
|
+
# Buscar uma magia especifica
|
|
125
|
+
bola_de_fogo = Tormenta20.magias.find('bola_de_fogo')
|
|
126
|
+
puts bola_de_fogo.name # => "Bola de Fogo"
|
|
127
|
+
puts bola_de_fogo.circle # => "3"
|
|
128
|
+
puts bola_de_fogo.school # => "evoc"
|
|
129
|
+
puts bola_de_fogo.description
|
|
130
|
+
|
|
131
|
+
# Listar poderes de uma divindade
|
|
132
|
+
khalmyr = Tormenta20.divindades.find('khalmyr')
|
|
133
|
+
puts khalmyr.name # => "Khalmyr"
|
|
134
|
+
puts khalmyr.granted_powers # => ["coragem_total", "espada_justiceira", ...]
|
|
135
|
+
|
|
136
|
+
# Buscar poderes concedidos
|
|
137
|
+
Tormenta20.poderes.poderes_concedidos.each do |poder|
|
|
138
|
+
puts "#{poder.name}: #{poder.deities.join(', ')}"
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# Classe com informacoes de magia
|
|
142
|
+
mago = Tormenta20.classes.find('arcanista')
|
|
143
|
+
puts mago.initial_hp # PV inicial
|
|
144
|
+
puts mago.mp_per_level # PM por nivel
|
|
145
|
+
puts mago.conjurador? # => true
|
|
146
|
+
|
|
147
|
+
# Filtrar magias arcanas do 1o circulo da escola de evocacao
|
|
148
|
+
Tormenta20.magias.arcanas.by_circle("1").by_school("evoc").each do |magia|
|
|
149
|
+
puts "#{magia.name} - #{magia.description}"
|
|
150
|
+
end
|
|
151
|
+
```
|
|
24
152
|
|
|
25
153
|
## Development
|
|
26
154
|
|
|
27
|
-
|
|
155
|
+
### Pre-requisitos
|
|
156
|
+
|
|
157
|
+
- Ruby >= 3.0.0
|
|
158
|
+
- Bundler
|
|
159
|
+
|
|
160
|
+
### Setup
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
git clone https://github.com/LuanGB/tormenta20.git
|
|
164
|
+
cd tormenta20
|
|
165
|
+
bundle install
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Construir o Banco de Dados
|
|
169
|
+
|
|
170
|
+
O banco de dados SQLite e construido a partir dos arquivos JSON em `src/json/`:
|
|
28
171
|
|
|
29
|
-
|
|
172
|
+
```bash
|
|
173
|
+
# Construir apenas o banco
|
|
174
|
+
rake build_db
|
|
175
|
+
|
|
176
|
+
# Build completo da gem (inclui build_db automaticamente)
|
|
177
|
+
rake build
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Estrutura do Projeto
|
|
181
|
+
|
|
182
|
+
```
|
|
183
|
+
tormenta20/
|
|
184
|
+
├── src/
|
|
185
|
+
│ ├── json/ # Dados em formato JSON
|
|
186
|
+
│ │ ├── magias/
|
|
187
|
+
│ │ ├── classes/
|
|
188
|
+
│ │ ├── origens/
|
|
189
|
+
│ │ ├── deuses/
|
|
190
|
+
│ │ ├── poderes/
|
|
191
|
+
│ │ │ ├── habilidades_unicas_de_origem/
|
|
192
|
+
│ │ │ ├── poderes_concedidos/
|
|
193
|
+
│ │ │ └── poderes_da_tormenta/
|
|
194
|
+
│ │ ├── equipamentos/
|
|
195
|
+
│ │ ├── itens_superiores/
|
|
196
|
+
│ │ └── regras/
|
|
197
|
+
│ └── ruby/ # Codigo Ruby
|
|
198
|
+
│ └── tormenta20/
|
|
199
|
+
│ ├── models/ # ActiveRecord models
|
|
200
|
+
│ ├── database.rb # Conexao com banco
|
|
201
|
+
│ └── seeder.rb # Import de dados
|
|
202
|
+
├── db/
|
|
203
|
+
│ ├── schema.sql # Schema SQLite
|
|
204
|
+
│ ├── seeds.rb # Script de seed (desenvolvimento)
|
|
205
|
+
│ └── tormenta20.sqlite3 # Banco pre-construido (gerado)
|
|
206
|
+
└── bin/
|
|
207
|
+
└── build_db # Script de build do banco
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Testes
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
rake spec
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Linting
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
rake rubocop
|
|
220
|
+
```
|
|
30
221
|
|
|
31
222
|
## Contributing
|
|
32
223
|
|
|
33
|
-
Bug reports
|
|
224
|
+
Bug reports e pull requests sao bem-vindos em https://github.com/LuanGB/tormenta20.
|
|
34
225
|
|
|
35
226
|
## License
|
|
36
227
|
|
|
37
|
-
|
|
228
|
+
Disponivel como open source sob os termos da [MIT License](https://opensource.org/licenses/MIT).
|
|
38
229
|
|
|
39
|
-
##
|
|
230
|
+
## Aviso Legal
|
|
40
231
|
|
|
41
|
-
|
|
232
|
+
Tormenta20 e uma marca registrada da Jambo Editora. Esta biblioteca e um projeto de fa nao oficial e nao e afiliada, endossada ou patrocinada pela Jambo Editora.
|
data/Rakefile
CHANGED
|
@@ -10,3 +10,12 @@ require "rubocop/rake_task"
|
|
|
10
10
|
RuboCop::RakeTask.new
|
|
11
11
|
|
|
12
12
|
task default: %i[spec rubocop]
|
|
13
|
+
|
|
14
|
+
# Database build task
|
|
15
|
+
desc "Build the SQLite database with all JSON data"
|
|
16
|
+
task :build_db do
|
|
17
|
+
ruby "bin/build_db"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Ensure database is built before gem packaging
|
|
21
|
+
Rake::Task[:build].enhance([:build_db])
|
data/db/schema.sql
ADDED
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
-- =============================================================================
|
|
2
|
+
-- TORMENTA 20 SQLITE SCHEMA
|
|
3
|
+
-- =============================================================================
|
|
4
|
+
-- Schema para todos os tipos de dados do sistema Tormenta 20
|
|
5
|
+
-- Usa SQLite com JSON para campos flexíveis
|
|
6
|
+
-- =============================================================================
|
|
7
|
+
|
|
8
|
+
-- -----------------------------------------------------------------------------
|
|
9
|
+
-- ORIGENS (Character Origins)
|
|
10
|
+
-- -----------------------------------------------------------------------------
|
|
11
|
+
CREATE TABLE IF NOT EXISTS origens (
|
|
12
|
+
id TEXT PRIMARY KEY,
|
|
13
|
+
name TEXT NOT NULL,
|
|
14
|
+
description TEXT,
|
|
15
|
+
items JSON DEFAULT '[]',
|
|
16
|
+
benefits JSON DEFAULT '{}',
|
|
17
|
+
unique_power TEXT,
|
|
18
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
19
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
CREATE INDEX IF NOT EXISTS idx_origens_name ON origens(name);
|
|
23
|
+
|
|
24
|
+
CREATE TRIGGER IF NOT EXISTS update_origens_timestamp
|
|
25
|
+
AFTER UPDATE ON origens
|
|
26
|
+
BEGIN
|
|
27
|
+
UPDATE origens SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
|
|
28
|
+
END;
|
|
29
|
+
|
|
30
|
+
-- -----------------------------------------------------------------------------
|
|
31
|
+
-- PODERES (Powers) - Tabela unificada para todos os tipos de poderes
|
|
32
|
+
-- -----------------------------------------------------------------------------
|
|
33
|
+
CREATE TABLE IF NOT EXISTS poderes (
|
|
34
|
+
id TEXT PRIMARY KEY,
|
|
35
|
+
name TEXT NOT NULL,
|
|
36
|
+
type TEXT NOT NULL CHECK(type IN (
|
|
37
|
+
'habilidade_unica_origem',
|
|
38
|
+
'poder_concedido',
|
|
39
|
+
'poder_tormenta',
|
|
40
|
+
'poder_classe',
|
|
41
|
+
'poder_geral',
|
|
42
|
+
'poder_combate',
|
|
43
|
+
'poder_destino',
|
|
44
|
+
'poder_magia'
|
|
45
|
+
)),
|
|
46
|
+
description TEXT,
|
|
47
|
+
effects JSON DEFAULT '{}',
|
|
48
|
+
prerequisites JSON DEFAULT '[]',
|
|
49
|
+
origin_id TEXT,
|
|
50
|
+
deities JSON DEFAULT '[]',
|
|
51
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
52
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
CREATE INDEX IF NOT EXISTS idx_poderes_type ON poderes(type);
|
|
56
|
+
CREATE INDEX IF NOT EXISTS idx_poderes_name ON poderes(name);
|
|
57
|
+
CREATE INDEX IF NOT EXISTS idx_poderes_origin ON poderes(origin_id);
|
|
58
|
+
|
|
59
|
+
CREATE TRIGGER IF NOT EXISTS update_poderes_timestamp
|
|
60
|
+
AFTER UPDATE ON poderes
|
|
61
|
+
BEGIN
|
|
62
|
+
UPDATE poderes SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
|
|
63
|
+
END;
|
|
64
|
+
|
|
65
|
+
-- -----------------------------------------------------------------------------
|
|
66
|
+
-- DIVINDADES (Deities)
|
|
67
|
+
-- -----------------------------------------------------------------------------
|
|
68
|
+
CREATE TABLE IF NOT EXISTS divindades (
|
|
69
|
+
id TEXT PRIMARY KEY,
|
|
70
|
+
name TEXT NOT NULL,
|
|
71
|
+
title TEXT,
|
|
72
|
+
description TEXT,
|
|
73
|
+
beliefs_objectives JSON DEFAULT '[]',
|
|
74
|
+
holy_symbol TEXT,
|
|
75
|
+
energy TEXT NOT NULL DEFAULT 'qualquer' CHECK(energy IN ('positiva', 'negativa', 'qualquer')),
|
|
76
|
+
preferred_weapon TEXT,
|
|
77
|
+
devotees JSON DEFAULT '{}',
|
|
78
|
+
granted_powers JSON DEFAULT '[]',
|
|
79
|
+
obligations_restrictions TEXT,
|
|
80
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
81
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
CREATE INDEX IF NOT EXISTS idx_divindades_name ON divindades(name);
|
|
85
|
+
CREATE INDEX IF NOT EXISTS idx_divindades_energy ON divindades(energy);
|
|
86
|
+
|
|
87
|
+
CREATE TRIGGER IF NOT EXISTS update_divindades_timestamp
|
|
88
|
+
AFTER UPDATE ON divindades
|
|
89
|
+
BEGIN
|
|
90
|
+
UPDATE divindades SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
|
|
91
|
+
END;
|
|
92
|
+
|
|
93
|
+
-- -----------------------------------------------------------------------------
|
|
94
|
+
-- CLASSES (Character Classes)
|
|
95
|
+
-- -----------------------------------------------------------------------------
|
|
96
|
+
CREATE TABLE IF NOT EXISTS classes (
|
|
97
|
+
id TEXT PRIMARY KEY,
|
|
98
|
+
name TEXT NOT NULL,
|
|
99
|
+
hit_points JSON NOT NULL,
|
|
100
|
+
mana_points JSON NOT NULL,
|
|
101
|
+
skills JSON NOT NULL,
|
|
102
|
+
proficiencies JSON NOT NULL,
|
|
103
|
+
abilities JSON DEFAULT '[]',
|
|
104
|
+
powers JSON DEFAULT '[]',
|
|
105
|
+
progression JSON DEFAULT '[]',
|
|
106
|
+
spellcasting JSON,
|
|
107
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
108
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
CREATE INDEX IF NOT EXISTS idx_classes_name ON classes(name);
|
|
112
|
+
|
|
113
|
+
CREATE TRIGGER IF NOT EXISTS update_classes_timestamp
|
|
114
|
+
AFTER UPDATE ON classes
|
|
115
|
+
BEGIN
|
|
116
|
+
UPDATE classes SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
|
|
117
|
+
END;
|
|
118
|
+
|
|
119
|
+
-- -----------------------------------------------------------------------------
|
|
120
|
+
-- MAGIAS (Spells)
|
|
121
|
+
-- -----------------------------------------------------------------------------
|
|
122
|
+
CREATE TABLE IF NOT EXISTS magias (
|
|
123
|
+
id TEXT PRIMARY KEY,
|
|
124
|
+
name TEXT NOT NULL,
|
|
125
|
+
type TEXT NOT NULL CHECK(type IN ('arcana', 'divina', 'universal')),
|
|
126
|
+
circle TEXT NOT NULL,
|
|
127
|
+
school TEXT NOT NULL CHECK(school IN ('abjur', 'adiv', 'conv', 'encan', 'evoc', 'ilus', 'necro', 'trans')),
|
|
128
|
+
execution TEXT NOT NULL,
|
|
129
|
+
execution_details TEXT,
|
|
130
|
+
range TEXT NOT NULL,
|
|
131
|
+
duration TEXT NOT NULL,
|
|
132
|
+
duration_details TEXT,
|
|
133
|
+
counterspell TEXT,
|
|
134
|
+
description TEXT NOT NULL,
|
|
135
|
+
|
|
136
|
+
-- Target information
|
|
137
|
+
target_amount INTEGER,
|
|
138
|
+
target_up_to INTEGER,
|
|
139
|
+
target_type TEXT,
|
|
140
|
+
|
|
141
|
+
-- Effect information
|
|
142
|
+
effect TEXT,
|
|
143
|
+
effect_shape TEXT,
|
|
144
|
+
effect_dimention TEXT,
|
|
145
|
+
effect_size TEXT,
|
|
146
|
+
effect_other_details TEXT,
|
|
147
|
+
|
|
148
|
+
-- Alternative effect fields
|
|
149
|
+
area_effect TEXT,
|
|
150
|
+
area_effect_details TEXT,
|
|
151
|
+
|
|
152
|
+
-- Resistance information
|
|
153
|
+
resistence_effect TEXT,
|
|
154
|
+
resistence_skill TEXT,
|
|
155
|
+
|
|
156
|
+
-- Extra costs
|
|
157
|
+
extra_costs_material_component TEXT,
|
|
158
|
+
extra_costs_material_cost TEXT,
|
|
159
|
+
extra_costs_pm_debuff TEXT,
|
|
160
|
+
extra_costs_pm_sacrifice TEXT,
|
|
161
|
+
|
|
162
|
+
-- Complex nested data stored as JSON
|
|
163
|
+
enhancements JSON NOT NULL DEFAULT '[]',
|
|
164
|
+
effects JSON NOT NULL DEFAULT '[]',
|
|
165
|
+
|
|
166
|
+
-- Metadata
|
|
167
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
168
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
169
|
+
);
|
|
170
|
+
|
|
171
|
+
CREATE INDEX IF NOT EXISTS idx_magias_type ON magias(type);
|
|
172
|
+
CREATE INDEX IF NOT EXISTS idx_magias_circle ON magias(circle);
|
|
173
|
+
CREATE INDEX IF NOT EXISTS idx_magias_school ON magias(school);
|
|
174
|
+
CREATE INDEX IF NOT EXISTS idx_magias_name ON magias(name);
|
|
175
|
+
|
|
176
|
+
CREATE TRIGGER IF NOT EXISTS update_magias_timestamp
|
|
177
|
+
AFTER UPDATE ON magias
|
|
178
|
+
BEGIN
|
|
179
|
+
UPDATE magias SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
|
|
180
|
+
END;
|
|
181
|
+
|
|
182
|
+
-- -----------------------------------------------------------------------------
|
|
183
|
+
-- EQUIPAMENTOS - ARMAS (Weapons)
|
|
184
|
+
-- -----------------------------------------------------------------------------
|
|
185
|
+
CREATE TABLE IF NOT EXISTS armas (
|
|
186
|
+
id TEXT PRIMARY KEY,
|
|
187
|
+
name TEXT NOT NULL,
|
|
188
|
+
category TEXT NOT NULL CHECK(category IN ('simples', 'marciais', 'exoticas', 'fogo')),
|
|
189
|
+
price INTEGER,
|
|
190
|
+
damage TEXT,
|
|
191
|
+
damage_type TEXT,
|
|
192
|
+
critical TEXT,
|
|
193
|
+
range TEXT,
|
|
194
|
+
weight REAL,
|
|
195
|
+
properties JSON DEFAULT '[]',
|
|
196
|
+
description TEXT,
|
|
197
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
198
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
199
|
+
);
|
|
200
|
+
|
|
201
|
+
CREATE INDEX IF NOT EXISTS idx_armas_category ON armas(category);
|
|
202
|
+
CREATE INDEX IF NOT EXISTS idx_armas_name ON armas(name);
|
|
203
|
+
|
|
204
|
+
CREATE TRIGGER IF NOT EXISTS update_armas_timestamp
|
|
205
|
+
AFTER UPDATE ON armas
|
|
206
|
+
BEGIN
|
|
207
|
+
UPDATE armas SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
|
|
208
|
+
END;
|
|
209
|
+
|
|
210
|
+
-- -----------------------------------------------------------------------------
|
|
211
|
+
-- EQUIPAMENTOS - ARMADURAS (Armors)
|
|
212
|
+
-- -----------------------------------------------------------------------------
|
|
213
|
+
CREATE TABLE IF NOT EXISTS armaduras (
|
|
214
|
+
id TEXT PRIMARY KEY,
|
|
215
|
+
name TEXT NOT NULL,
|
|
216
|
+
category TEXT NOT NULL CHECK(category IN ('leve', 'pesada')),
|
|
217
|
+
price INTEGER,
|
|
218
|
+
defense_bonus INTEGER NOT NULL,
|
|
219
|
+
armor_penalty INTEGER DEFAULT 0,
|
|
220
|
+
weight REAL,
|
|
221
|
+
properties JSON DEFAULT '[]',
|
|
222
|
+
description TEXT,
|
|
223
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
224
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
225
|
+
);
|
|
226
|
+
|
|
227
|
+
CREATE INDEX IF NOT EXISTS idx_armaduras_category ON armaduras(category);
|
|
228
|
+
CREATE INDEX IF NOT EXISTS idx_armaduras_name ON armaduras(name);
|
|
229
|
+
|
|
230
|
+
CREATE TRIGGER IF NOT EXISTS update_armaduras_timestamp
|
|
231
|
+
AFTER UPDATE ON armaduras
|
|
232
|
+
BEGIN
|
|
233
|
+
UPDATE armaduras SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
|
|
234
|
+
END;
|
|
235
|
+
|
|
236
|
+
-- -----------------------------------------------------------------------------
|
|
237
|
+
-- EQUIPAMENTOS - ESCUDOS (Shields)
|
|
238
|
+
-- -----------------------------------------------------------------------------
|
|
239
|
+
CREATE TABLE IF NOT EXISTS escudos (
|
|
240
|
+
id TEXT PRIMARY KEY,
|
|
241
|
+
name TEXT NOT NULL,
|
|
242
|
+
price INTEGER,
|
|
243
|
+
defense_bonus INTEGER NOT NULL,
|
|
244
|
+
armor_penalty INTEGER DEFAULT 0,
|
|
245
|
+
weight REAL,
|
|
246
|
+
properties JSON DEFAULT '[]',
|
|
247
|
+
description TEXT,
|
|
248
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
249
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
250
|
+
);
|
|
251
|
+
|
|
252
|
+
CREATE INDEX IF NOT EXISTS idx_escudos_name ON escudos(name);
|
|
253
|
+
|
|
254
|
+
CREATE TRIGGER IF NOT EXISTS update_escudos_timestamp
|
|
255
|
+
AFTER UPDATE ON escudos
|
|
256
|
+
BEGIN
|
|
257
|
+
UPDATE escudos SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
|
|
258
|
+
END;
|
|
259
|
+
|
|
260
|
+
-- -----------------------------------------------------------------------------
|
|
261
|
+
-- EQUIPAMENTOS - ITENS GERAIS (General Items)
|
|
262
|
+
-- -----------------------------------------------------------------------------
|
|
263
|
+
CREATE TABLE IF NOT EXISTS itens (
|
|
264
|
+
id TEXT PRIMARY KEY,
|
|
265
|
+
name TEXT NOT NULL,
|
|
266
|
+
category TEXT,
|
|
267
|
+
price INTEGER,
|
|
268
|
+
weight REAL,
|
|
269
|
+
description TEXT,
|
|
270
|
+
effects JSON DEFAULT '{}',
|
|
271
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
272
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
273
|
+
);
|
|
274
|
+
|
|
275
|
+
CREATE INDEX IF NOT EXISTS idx_itens_category ON itens(category);
|
|
276
|
+
CREATE INDEX IF NOT EXISTS idx_itens_name ON itens(name);
|
|
277
|
+
|
|
278
|
+
CREATE TRIGGER IF NOT EXISTS update_itens_timestamp
|
|
279
|
+
AFTER UPDATE ON itens
|
|
280
|
+
BEGIN
|
|
281
|
+
UPDATE itens SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
|
|
282
|
+
END;
|
|
283
|
+
|
|
284
|
+
-- -----------------------------------------------------------------------------
|
|
285
|
+
-- ITENS SUPERIORES - MATERIAIS ESPECIAIS (Special Materials)
|
|
286
|
+
-- -----------------------------------------------------------------------------
|
|
287
|
+
CREATE TABLE IF NOT EXISTS materiais_especiais (
|
|
288
|
+
id TEXT PRIMARY KEY,
|
|
289
|
+
name TEXT NOT NULL,
|
|
290
|
+
description TEXT,
|
|
291
|
+
applicable_to JSON DEFAULT '[]',
|
|
292
|
+
price_modifier JSON,
|
|
293
|
+
effects JSON DEFAULT '{}',
|
|
294
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
295
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
296
|
+
);
|
|
297
|
+
|
|
298
|
+
CREATE INDEX IF NOT EXISTS idx_materiais_especiais_name ON materiais_especiais(name);
|
|
299
|
+
|
|
300
|
+
CREATE TRIGGER IF NOT EXISTS update_materiais_especiais_timestamp
|
|
301
|
+
AFTER UPDATE ON materiais_especiais
|
|
302
|
+
BEGIN
|
|
303
|
+
UPDATE materiais_especiais SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
|
|
304
|
+
END;
|
|
305
|
+
|
|
306
|
+
-- -----------------------------------------------------------------------------
|
|
307
|
+
-- ITENS SUPERIORES - MELHORIAS (Enhancements)
|
|
308
|
+
-- -----------------------------------------------------------------------------
|
|
309
|
+
CREATE TABLE IF NOT EXISTS melhorias (
|
|
310
|
+
id TEXT PRIMARY KEY,
|
|
311
|
+
name TEXT NOT NULL,
|
|
312
|
+
description TEXT,
|
|
313
|
+
applicable_to JSON DEFAULT '[]',
|
|
314
|
+
price INTEGER,
|
|
315
|
+
effects JSON DEFAULT '{}',
|
|
316
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
317
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
318
|
+
);
|
|
319
|
+
|
|
320
|
+
CREATE INDEX IF NOT EXISTS idx_melhorias_name ON melhorias(name);
|
|
321
|
+
|
|
322
|
+
CREATE TRIGGER IF NOT EXISTS update_melhorias_timestamp
|
|
323
|
+
AFTER UPDATE ON melhorias
|
|
324
|
+
BEGIN
|
|
325
|
+
UPDATE melhorias SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
|
|
326
|
+
END;
|
|
327
|
+
|
|
328
|
+
-- -----------------------------------------------------------------------------
|
|
329
|
+
-- REGRAS (Rules/Reference Data)
|
|
330
|
+
-- -----------------------------------------------------------------------------
|
|
331
|
+
CREATE TABLE IF NOT EXISTS regras (
|
|
332
|
+
id TEXT PRIMARY KEY,
|
|
333
|
+
name TEXT NOT NULL,
|
|
334
|
+
description TEXT,
|
|
335
|
+
data JSON NOT NULL,
|
|
336
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
337
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
338
|
+
);
|
|
339
|
+
|
|
340
|
+
CREATE INDEX IF NOT EXISTS idx_regras_name ON regras(name);
|
|
341
|
+
|
|
342
|
+
CREATE TRIGGER IF NOT EXISTS update_regras_timestamp
|
|
343
|
+
AFTER UPDATE ON regras
|
|
344
|
+
BEGIN
|
|
345
|
+
UPDATE regras SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
|
|
346
|
+
END;
|
|
347
|
+
|
|
348
|
+
-- =============================================================================
|
|
349
|
+
-- VIEWS ÚTEIS
|
|
350
|
+
-- =============================================================================
|
|
351
|
+
|
|
352
|
+
-- View de resumo de magias
|
|
353
|
+
CREATE VIEW IF NOT EXISTS magias_summary AS
|
|
354
|
+
SELECT
|
|
355
|
+
id,
|
|
356
|
+
name,
|
|
357
|
+
type,
|
|
358
|
+
circle,
|
|
359
|
+
school,
|
|
360
|
+
execution,
|
|
361
|
+
range,
|
|
362
|
+
duration
|
|
363
|
+
FROM magias;
|
|
364
|
+
|
|
365
|
+
-- View de poderes por tipo
|
|
366
|
+
CREATE VIEW IF NOT EXISTS poderes_por_tipo AS
|
|
367
|
+
SELECT
|
|
368
|
+
type,
|
|
369
|
+
COUNT(*) as total,
|
|
370
|
+
GROUP_CONCAT(name, ', ') as nomes
|
|
371
|
+
FROM poderes
|
|
372
|
+
GROUP BY type;
|
|
373
|
+
|
|
374
|
+
-- View de divindades com contagem de poderes
|
|
375
|
+
CREATE VIEW IF NOT EXISTS divindades_resumo AS
|
|
376
|
+
SELECT
|
|
377
|
+
d.id,
|
|
378
|
+
d.name,
|
|
379
|
+
d.title,
|
|
380
|
+
d.energy,
|
|
381
|
+
json_array_length(d.granted_powers) as total_poderes
|
|
382
|
+
FROM divindades d;
|