tormenta20 0.2.0 → 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
data/db/seeds.rb
ADDED
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../src/ruby/tormenta20"
|
|
4
|
+
require "json"
|
|
5
|
+
|
|
6
|
+
# Seed script to import JSON data into SQLite database
|
|
7
|
+
|
|
8
|
+
module Tormenta20
|
|
9
|
+
# Seeds module for importing JSON data into the SQLite database.
|
|
10
|
+
#
|
|
11
|
+
# This module provides methods to import all Tormenta20 game data
|
|
12
|
+
# from JSON files into the database.
|
|
13
|
+
#
|
|
14
|
+
# @example Import all data
|
|
15
|
+
# Tormenta20::Seeds.import_all
|
|
16
|
+
#
|
|
17
|
+
# @example Clear and reimport
|
|
18
|
+
# Tormenta20::Seeds.clear_all
|
|
19
|
+
# Tormenta20::Seeds.import_all
|
|
20
|
+
module Seeds
|
|
21
|
+
JSON_BASE_PATH = File.expand_path("../src/json", __dir__)
|
|
22
|
+
|
|
23
|
+
class << self
|
|
24
|
+
def import_all
|
|
25
|
+
puts "Starting data import..."
|
|
26
|
+
puts "=" * 60
|
|
27
|
+
|
|
28
|
+
import_origens
|
|
29
|
+
import_poderes_habilidades_unicas
|
|
30
|
+
import_divindades
|
|
31
|
+
import_poderes_concedidos
|
|
32
|
+
import_poderes_tormenta
|
|
33
|
+
import_classes
|
|
34
|
+
import_magias
|
|
35
|
+
import_equipamentos
|
|
36
|
+
import_itens_superiores
|
|
37
|
+
import_regras
|
|
38
|
+
|
|
39
|
+
puts "=" * 60
|
|
40
|
+
puts "Data import completed!"
|
|
41
|
+
print_summary
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# =======================================================================
|
|
45
|
+
# ORIGENS
|
|
46
|
+
# =======================================================================
|
|
47
|
+
def import_origens
|
|
48
|
+
import_json_files(
|
|
49
|
+
"origens",
|
|
50
|
+
Models::Origem,
|
|
51
|
+
%i[id name description items benefits unique_power]
|
|
52
|
+
)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# =======================================================================
|
|
56
|
+
# PODERES - HABILIDADES ÚNICAS DE ORIGEM
|
|
57
|
+
# =======================================================================
|
|
58
|
+
def import_poderes_habilidades_unicas
|
|
59
|
+
import_json_files(
|
|
60
|
+
"poderes/habilidades_unicas_de_origem",
|
|
61
|
+
Models::Poder,
|
|
62
|
+
%i[id name description effects prerequisites],
|
|
63
|
+
extra_attrs: { type: "habilidade_unica_origem" },
|
|
64
|
+
transform: lambda { |data|
|
|
65
|
+
data[:origin_id] = data.delete(:origin) if data[:origin]
|
|
66
|
+
data
|
|
67
|
+
}
|
|
68
|
+
)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# =======================================================================
|
|
72
|
+
# DIVINDADES
|
|
73
|
+
# =======================================================================
|
|
74
|
+
def import_divindades
|
|
75
|
+
import_json_files(
|
|
76
|
+
"deuses",
|
|
77
|
+
Models::Divindade,
|
|
78
|
+
%i[id name title description beliefs_objectives holy_symbol energy
|
|
79
|
+
preferred_weapon devotees granted_powers obligations_restrictions]
|
|
80
|
+
)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# =======================================================================
|
|
84
|
+
# PODERES CONCEDIDOS
|
|
85
|
+
# =======================================================================
|
|
86
|
+
def import_poderes_concedidos
|
|
87
|
+
import_json_files(
|
|
88
|
+
"poderes/poderes_concedidos",
|
|
89
|
+
Models::Poder,
|
|
90
|
+
%i[id name description effects prerequisites deities],
|
|
91
|
+
extra_attrs: { type: "poder_concedido" }
|
|
92
|
+
)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# =======================================================================
|
|
96
|
+
# PODERES DA TORMENTA
|
|
97
|
+
# =======================================================================
|
|
98
|
+
def import_poderes_tormenta
|
|
99
|
+
import_json_files(
|
|
100
|
+
"poderes/poderes_da_tormenta",
|
|
101
|
+
Models::Poder,
|
|
102
|
+
%i[id name description effects prerequisites],
|
|
103
|
+
extra_attrs: { type: "poder_tormenta" }
|
|
104
|
+
)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# =======================================================================
|
|
108
|
+
# CLASSES
|
|
109
|
+
# =======================================================================
|
|
110
|
+
def import_classes
|
|
111
|
+
import_json_files(
|
|
112
|
+
"classes",
|
|
113
|
+
Models::Classe,
|
|
114
|
+
%i[id name hit_points mana_points skills proficiencies abilities powers progression spellcasting]
|
|
115
|
+
)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# =======================================================================
|
|
119
|
+
# MAGIAS
|
|
120
|
+
# =======================================================================
|
|
121
|
+
def import_magias
|
|
122
|
+
puts "\nImporting magias..."
|
|
123
|
+
|
|
124
|
+
json_dir = File.join(JSON_BASE_PATH, "magias")
|
|
125
|
+
return puts " Directory not found: #{json_dir}" unless Dir.exist?(json_dir)
|
|
126
|
+
|
|
127
|
+
files = Dir.glob(File.join(json_dir, "*.json"))
|
|
128
|
+
puts " Found #{files.size} magia files"
|
|
129
|
+
|
|
130
|
+
success_count = 0
|
|
131
|
+
error_count = 0
|
|
132
|
+
|
|
133
|
+
files.each_with_index do |file, index|
|
|
134
|
+
data = JSON.parse(File.read(file), symbolize_names: true)
|
|
135
|
+
import_magia(data)
|
|
136
|
+
success_count += 1
|
|
137
|
+
print "\r Imported: #{index + 1}/#{files.size}" if ((index + 1) % 10).zero?
|
|
138
|
+
rescue StandardError => e
|
|
139
|
+
error_count += 1
|
|
140
|
+
puts "\n Error importing #{File.basename(file)}: #{e.message}"
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
puts "\n Successfully imported #{success_count} magias"
|
|
144
|
+
puts " Failed to import #{error_count} magias" if error_count.positive?
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def import_magia(data)
|
|
148
|
+
raw_target = data[:target]
|
|
149
|
+
target = if raw_target.is_a?(Hash)
|
|
150
|
+
raw_target
|
|
151
|
+
else
|
|
152
|
+
(raw_target.is_a?(Array) ? raw_target.first || {} : {})
|
|
153
|
+
end
|
|
154
|
+
effect_details = data[:effect_details].is_a?(Hash) ? data[:effect_details] : {}
|
|
155
|
+
resistence = data[:resistence].is_a?(Hash) ? data[:resistence] : {}
|
|
156
|
+
extra_costs = data[:extra_costs].is_a?(Hash) ? data[:extra_costs] : {}
|
|
157
|
+
|
|
158
|
+
Models::Magia.find_or_initialize_by(id: data[:id]).tap do |magia|
|
|
159
|
+
magia.name = data[:name]
|
|
160
|
+
magia.type = data[:type]
|
|
161
|
+
magia.circle = data[:circle]
|
|
162
|
+
magia.school = data[:school]
|
|
163
|
+
magia.execution = data[:execution]
|
|
164
|
+
magia.execution_details = data[:execution_details]
|
|
165
|
+
magia.range = data[:range]
|
|
166
|
+
magia.duration = data[:duration]
|
|
167
|
+
magia.duration_details = data[:duration_details]
|
|
168
|
+
magia.counterspell = data[:counterspell]
|
|
169
|
+
magia.description = data[:description] || ""
|
|
170
|
+
|
|
171
|
+
magia.target_amount = target[:amount]
|
|
172
|
+
magia.target_up_to = if target[:up_to].nil?
|
|
173
|
+
nil
|
|
174
|
+
else
|
|
175
|
+
(target[:up_to] ? 1 : 0)
|
|
176
|
+
end
|
|
177
|
+
magia.target_type = target[:type]
|
|
178
|
+
|
|
179
|
+
magia.effect = data[:effect]
|
|
180
|
+
magia.effect_shape = effect_details[:shape]
|
|
181
|
+
magia.effect_dimention = effect_details[:dimention]
|
|
182
|
+
magia.effect_size = effect_details[:size]
|
|
183
|
+
magia.effect_other_details = effect_details[:other_details]
|
|
184
|
+
|
|
185
|
+
magia.area_effect = data[:area_effect]
|
|
186
|
+
magia.area_effect_details = data[:area_effect_details]
|
|
187
|
+
|
|
188
|
+
magia.resistence_effect = resistence[:effect]
|
|
189
|
+
magia.resistence_skill = resistence[:skill]
|
|
190
|
+
|
|
191
|
+
magia.extra_costs_material_component = extra_costs[:material_component]
|
|
192
|
+
magia.extra_costs_material_cost = extra_costs[:material_component_cost]
|
|
193
|
+
magia.extra_costs_pm_debuff = extra_costs[:pm_debuff]
|
|
194
|
+
magia.extra_costs_pm_sacrifice = extra_costs[:pm_sacrifice]
|
|
195
|
+
|
|
196
|
+
magia.enhancements = data[:enhancements] || []
|
|
197
|
+
magia.effects = data[:effects] || []
|
|
198
|
+
|
|
199
|
+
magia.save!
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
# =======================================================================
|
|
204
|
+
# EQUIPAMENTOS
|
|
205
|
+
# =======================================================================
|
|
206
|
+
def import_equipamentos
|
|
207
|
+
import_armas
|
|
208
|
+
import_armaduras
|
|
209
|
+
import_escudos
|
|
210
|
+
import_itens
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
def import_armas
|
|
214
|
+
import_json_files(
|
|
215
|
+
"equipamentos/armas",
|
|
216
|
+
Models::Arma,
|
|
217
|
+
%i[id name category price damage damage_type critical range weight properties description]
|
|
218
|
+
)
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
def import_armaduras
|
|
222
|
+
import_json_files(
|
|
223
|
+
"equipamentos/armaduras",
|
|
224
|
+
Models::Armadura,
|
|
225
|
+
%i[id name category price defense_bonus armor_penalty weight properties description]
|
|
226
|
+
)
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
def import_escudos
|
|
230
|
+
import_json_files(
|
|
231
|
+
"equipamentos/escudos",
|
|
232
|
+
Models::Escudo,
|
|
233
|
+
%i[id name price defense_bonus armor_penalty weight properties description],
|
|
234
|
+
transform: lambda { |data|
|
|
235
|
+
data[:price] ||= data.delete(:preco)
|
|
236
|
+
data[:defense_bonus] ||= data.delete(:bonus_defesa)
|
|
237
|
+
data[:armor_penalty] ||= data.delete(:penalidade_armadura)
|
|
238
|
+
data[:weight] ||= data.delete(:espacos)
|
|
239
|
+
data
|
|
240
|
+
}
|
|
241
|
+
)
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
def import_itens
|
|
245
|
+
import_json_files(
|
|
246
|
+
"equipamentos/itens",
|
|
247
|
+
Models::Item,
|
|
248
|
+
%i[id name category price weight description effects]
|
|
249
|
+
)
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
# =======================================================================
|
|
253
|
+
# ITENS SUPERIORES
|
|
254
|
+
# =======================================================================
|
|
255
|
+
def import_itens_superiores
|
|
256
|
+
import_materiais_especiais
|
|
257
|
+
import_melhorias
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
def import_materiais_especiais
|
|
261
|
+
import_json_files(
|
|
262
|
+
"itens_superiores/materiais_especiais",
|
|
263
|
+
Models::MaterialEspecial,
|
|
264
|
+
%i[id name description applicable_to price_modifier effects]
|
|
265
|
+
)
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
def import_melhorias
|
|
269
|
+
import_json_files(
|
|
270
|
+
"itens_superiores/melhorias",
|
|
271
|
+
Models::Melhoria,
|
|
272
|
+
%i[id name description applicable_to price effects]
|
|
273
|
+
)
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
# =======================================================================
|
|
277
|
+
# REGRAS
|
|
278
|
+
# =======================================================================
|
|
279
|
+
def import_regras
|
|
280
|
+
import_json_files(
|
|
281
|
+
"regras",
|
|
282
|
+
Models::Regra,
|
|
283
|
+
%i[id name description data],
|
|
284
|
+
transform: lambda { |raw|
|
|
285
|
+
base_keys = %i[id name description]
|
|
286
|
+
data_content = raw.reject { |k, _| base_keys.include?(k) }
|
|
287
|
+
{ id: raw[:id], name: raw[:name], description: raw[:description], data: data_content }
|
|
288
|
+
}
|
|
289
|
+
)
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
# =======================================================================
|
|
293
|
+
# UTILITY METHODS
|
|
294
|
+
# =======================================================================
|
|
295
|
+
def clear_all
|
|
296
|
+
puts "Clearing all data..."
|
|
297
|
+
[
|
|
298
|
+
Models::Origem, Models::Poder, Models::Divindade, Models::Classe,
|
|
299
|
+
Models::Magia, Models::Arma, Models::Armadura, Models::Escudo,
|
|
300
|
+
Models::Item, Models::MaterialEspecial, Models::Melhoria, Models::Regra
|
|
301
|
+
].each(&:delete_all)
|
|
302
|
+
puts "Data cleared!"
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
def print_summary
|
|
306
|
+
puts "\nDatabase Summary:"
|
|
307
|
+
puts "-" * 40
|
|
308
|
+
puts " Origens: #{Models::Origem.count}"
|
|
309
|
+
puts " Poderes: #{Models::Poder.count}"
|
|
310
|
+
puts " - Hab. Unicas: #{Models::Poder.habilidades_unicas.count}"
|
|
311
|
+
puts " - Concedidos: #{Models::Poder.poderes_concedidos.count}"
|
|
312
|
+
puts " - Tormenta: #{Models::Poder.poderes_tormenta.count}"
|
|
313
|
+
puts " Divindades: #{Models::Divindade.count}"
|
|
314
|
+
puts " Classes: #{Models::Classe.count}"
|
|
315
|
+
puts " Magias: #{Models::Magia.count}"
|
|
316
|
+
puts " Armas: #{Models::Arma.count}"
|
|
317
|
+
puts " Armaduras: #{Models::Armadura.count}"
|
|
318
|
+
puts " Escudos: #{Models::Escudo.count}"
|
|
319
|
+
puts " Itens: #{Models::Item.count}"
|
|
320
|
+
puts " Materiais Esp.: #{Models::MaterialEspecial.count}"
|
|
321
|
+
puts " Melhorias: #{Models::Melhoria.count}"
|
|
322
|
+
puts " Regras: #{Models::Regra.count}"
|
|
323
|
+
puts "-" * 40
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
private
|
|
327
|
+
|
|
328
|
+
def import_json_files(subdir, model, attrs, extra_attrs: {}, transform: nil)
|
|
329
|
+
entity_name = subdir.split("/").last
|
|
330
|
+
puts "\nImporting #{entity_name}..."
|
|
331
|
+
|
|
332
|
+
json_dir = File.join(JSON_BASE_PATH, subdir)
|
|
333
|
+
unless Dir.exist?(json_dir)
|
|
334
|
+
puts " Directory not found: #{json_dir}"
|
|
335
|
+
return
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
files = Dir.glob(File.join(json_dir, "*.json"))
|
|
339
|
+
puts " Found #{files.size} files"
|
|
340
|
+
|
|
341
|
+
return if files.empty?
|
|
342
|
+
|
|
343
|
+
success_count = 0
|
|
344
|
+
error_count = 0
|
|
345
|
+
|
|
346
|
+
files.each_with_index do |file, index|
|
|
347
|
+
data = JSON.parse(File.read(file), symbolize_names: true)
|
|
348
|
+
data = transform.call(data) if transform
|
|
349
|
+
|
|
350
|
+
record = model.find_or_initialize_by(id: data[:id])
|
|
351
|
+
attrs.each do |attr|
|
|
352
|
+
record.send("#{attr}=", data[attr]) if data.key?(attr)
|
|
353
|
+
end
|
|
354
|
+
extra_attrs.each do |attr, value|
|
|
355
|
+
record.send("#{attr}=", value)
|
|
356
|
+
end
|
|
357
|
+
record.save!
|
|
358
|
+
|
|
359
|
+
success_count += 1
|
|
360
|
+
print "\r Imported: #{index + 1}/#{files.size}" if ((index + 1) % 10).zero?
|
|
361
|
+
rescue StandardError => e
|
|
362
|
+
error_count += 1
|
|
363
|
+
puts "\n Error importing #{File.basename(file)}: #{e.message}"
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
puts "\n Successfully imported #{success_count} #{entity_name}"
|
|
367
|
+
puts " Failed to import #{error_count} #{entity_name}" if error_count.positive?
|
|
368
|
+
end
|
|
369
|
+
end
|
|
370
|
+
end
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
# Run seeds if this file is executed directly
|
|
374
|
+
if __FILE__ == $PROGRAM_NAME
|
|
375
|
+
Tormenta20::Database.setup(mode: :build)
|
|
376
|
+
Tormenta20::Seeds.import_all
|
|
377
|
+
end
|
|
Binary file
|
data/docs/armaduras.md
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Armaduras
|
|
2
|
+
|
|
3
|
+
Acesso: `Tormenta20.armaduras`
|
|
4
|
+
|
|
5
|
+
## Atributos
|
|
6
|
+
|
|
7
|
+
| Atributo | Tipo | Descricao |
|
|
8
|
+
|----------|------|-----------|
|
|
9
|
+
| `id` | String | Identificador unico |
|
|
10
|
+
| `name` | String | Nome da armadura |
|
|
11
|
+
| `category` | String | Categoria: `leve`, `pesada` |
|
|
12
|
+
| `price` | String | Preco |
|
|
13
|
+
| `defense_bonus` | Integer | Bonus de defesa |
|
|
14
|
+
| `armor_penalty` | Integer | Penalidade de armadura |
|
|
15
|
+
| `weight` | String | Peso/espacos |
|
|
16
|
+
| `properties` | Array | Propriedades especiais |
|
|
17
|
+
| `description` | String | Descricao |
|
|
18
|
+
|
|
19
|
+
## Scopes (Filtros)
|
|
20
|
+
|
|
21
|
+
### Por Categoria
|
|
22
|
+
|
|
23
|
+
```ruby
|
|
24
|
+
Tormenta20.armaduras.leves # Armaduras leves
|
|
25
|
+
Tormenta20.armaduras.pesadas # Armaduras pesadas
|
|
26
|
+
Tormenta20.armaduras.by_category("leve")
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Metodos de Instancia
|
|
30
|
+
|
|
31
|
+
```ruby
|
|
32
|
+
armadura = Tormenta20.armaduras.find("couro")
|
|
33
|
+
|
|
34
|
+
armadura.leve? # Verifica se e armadura leve
|
|
35
|
+
# => true
|
|
36
|
+
|
|
37
|
+
armadura.pesada? # Verifica se e armadura pesada
|
|
38
|
+
# => false
|
|
39
|
+
|
|
40
|
+
armadura.to_h # Converte para Hash completo
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Exemplos
|
|
44
|
+
|
|
45
|
+
```ruby
|
|
46
|
+
# Listar todas as armaduras
|
|
47
|
+
Tormenta20.armaduras.all.each do |a|
|
|
48
|
+
puts "#{a.name}: +#{a.defense_bonus} Defesa, -#{a.armor_penalty} penalidade"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Armaduras leves
|
|
52
|
+
Tormenta20.armaduras.leves.each do |a|
|
|
53
|
+
puts "#{a.name} - #{a.price}"
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Armaduras pesadas ordenadas por bonus de defesa
|
|
57
|
+
Tormenta20.armaduras.pesadas.order(defense_bonus: :desc).each do |a|
|
|
58
|
+
puts "#{a.name}: +#{a.defense_bonus}"
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Buscar armadura especifica
|
|
62
|
+
brunea = Tormenta20.armaduras.find("brunea")
|
|
63
|
+
puts brunea.name # => "Brunea"
|
|
64
|
+
puts brunea.defense_bonus # Bonus de defesa
|
|
65
|
+
puts brunea.armor_penalty # Penalidade
|
|
66
|
+
|
|
67
|
+
# Armadura com maior bonus de defesa
|
|
68
|
+
Tormenta20.armaduras.order(defense_bonus: :desc).first
|
|
69
|
+
|
|
70
|
+
# Armaduras sem penalidade
|
|
71
|
+
Tormenta20.armaduras.where(armor_penalty: 0)
|
|
72
|
+
```
|
data/docs/armas.md
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Armas
|
|
2
|
+
|
|
3
|
+
Acesso: `Tormenta20.armas`
|
|
4
|
+
|
|
5
|
+
## Atributos
|
|
6
|
+
|
|
7
|
+
| Atributo | Tipo | Descricao |
|
|
8
|
+
|----------|------|-----------|
|
|
9
|
+
| `id` | String | Identificador unico |
|
|
10
|
+
| `name` | String | Nome da arma |
|
|
11
|
+
| `category` | String | Categoria: `simples`, `marciais`, `exoticas`, `fogo` |
|
|
12
|
+
| `price` | String | Preco |
|
|
13
|
+
| `damage` | String | Dano (ex: "1d8") |
|
|
14
|
+
| `damage_type` | String | Tipo de dano (corte, perfuracao, etc) |
|
|
15
|
+
| `critical` | String | Critico (ex: "19/x2") |
|
|
16
|
+
| `range` | String | Alcance (para armas de distancia) |
|
|
17
|
+
| `weight` | String | Peso/espacos |
|
|
18
|
+
| `properties` | Array | Propriedades especiais |
|
|
19
|
+
| `description` | String | Descricao |
|
|
20
|
+
|
|
21
|
+
## Scopes (Filtros)
|
|
22
|
+
|
|
23
|
+
### Por Categoria
|
|
24
|
+
|
|
25
|
+
```ruby
|
|
26
|
+
Tormenta20.armas.simples # Armas simples
|
|
27
|
+
Tormenta20.armas.marciais # Armas marciais
|
|
28
|
+
Tormenta20.armas.exoticas # Armas exoticas
|
|
29
|
+
Tormenta20.armas.fogo # Armas de fogo
|
|
30
|
+
Tormenta20.armas.by_category("simples")
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Por Tipo de Dano
|
|
34
|
+
|
|
35
|
+
```ruby
|
|
36
|
+
Tormenta20.armas.by_damage_type("corte")
|
|
37
|
+
Tormenta20.armas.by_damage_type("perfuracao")
|
|
38
|
+
Tormenta20.armas.by_damage_type("impacto")
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Por Alcance
|
|
42
|
+
|
|
43
|
+
```ruby
|
|
44
|
+
Tormenta20.armas.ranged # Armas de distancia (com alcance)
|
|
45
|
+
Tormenta20.armas.melee # Armas corpo a corpo (sem alcance)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Metodos de Instancia
|
|
49
|
+
|
|
50
|
+
```ruby
|
|
51
|
+
arma = Tormenta20.armas.find("espada_longa")
|
|
52
|
+
|
|
53
|
+
arma.ranged? # Verifica se e arma de distancia
|
|
54
|
+
# => false
|
|
55
|
+
|
|
56
|
+
arma.to_h # Converte para Hash completo
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Exemplos
|
|
60
|
+
|
|
61
|
+
```ruby
|
|
62
|
+
# Listar todas as armas
|
|
63
|
+
Tormenta20.armas.all.each do |a|
|
|
64
|
+
puts "#{a.name}: #{a.damage} (#{a.damage_type})"
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Armas simples
|
|
68
|
+
Tormenta20.armas.simples.each do |a|
|
|
69
|
+
puts "#{a.name} - #{a.price}"
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Armas de distancia
|
|
73
|
+
Tormenta20.armas.ranged.each do |a|
|
|
74
|
+
puts "#{a.name}: alcance #{a.range}"
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Armas de corte
|
|
78
|
+
Tormenta20.armas.by_damage_type("corte").each do |a|
|
|
79
|
+
puts "#{a.name}: #{a.damage}"
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Buscar arma especifica
|
|
83
|
+
espada = Tormenta20.armas.find("espada_longa")
|
|
84
|
+
puts espada.name # => "Espada Longa"
|
|
85
|
+
puts espada.damage # => "1d8"
|
|
86
|
+
puts espada.critical # => "19/x2"
|
|
87
|
+
puts espada.properties # Propriedades especiais
|
|
88
|
+
|
|
89
|
+
# Armas ordenadas por dano
|
|
90
|
+
Tormenta20.armas.order(:damage).reverse
|
|
91
|
+
|
|
92
|
+
# Contar armas por categoria
|
|
93
|
+
Tormenta20.armas.group(:category).count
|
|
94
|
+
# => {"simples"=>15, "marciais"=>20, "exoticas"=>10, "fogo"=>5}
|
|
95
|
+
```
|
data/docs/classes.md
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Classes
|
|
2
|
+
|
|
3
|
+
Acesso: `Tormenta20.classes`
|
|
4
|
+
|
|
5
|
+
## Atributos
|
|
6
|
+
|
|
7
|
+
| Atributo | Tipo | Descricao |
|
|
8
|
+
|----------|------|-----------|
|
|
9
|
+
| `id` | String | Identificador unico |
|
|
10
|
+
| `name` | String | Nome da classe |
|
|
11
|
+
| `hit_points` | Hash | Pontos de vida (initial, per_level) |
|
|
12
|
+
| `mana_points` | Hash | Pontos de mana (per_level) |
|
|
13
|
+
| `skills` | Hash | Pericias (mandatory, choose_amount, choose_from) |
|
|
14
|
+
| `proficiencies` | Hash | Proficiencias (weapons, armors, shields) |
|
|
15
|
+
| `abilities` | Array | Habilidades da classe |
|
|
16
|
+
| `powers` | Array | Poderes disponiveis |
|
|
17
|
+
| `progression` | Hash | Progressao por nivel |
|
|
18
|
+
| `spellcasting` | Hash | Informacoes de conjuracao (se aplicavel) |
|
|
19
|
+
|
|
20
|
+
## Scopes (Filtros)
|
|
21
|
+
|
|
22
|
+
```ruby
|
|
23
|
+
# Classes que podem conjurar magias
|
|
24
|
+
Tormenta20.classes.conjuradores
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Metodos de Instancia
|
|
28
|
+
|
|
29
|
+
### Pontos de Vida e Mana
|
|
30
|
+
|
|
31
|
+
```ruby
|
|
32
|
+
classe = Tormenta20.classes.find("guerreiro")
|
|
33
|
+
|
|
34
|
+
classe.initial_hp # PV inicial (ex: 20)
|
|
35
|
+
classe.hp_per_level # PV por nivel (ex: 5)
|
|
36
|
+
classe.mp_per_level # PM por nivel (ex: 3)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Pericias
|
|
40
|
+
|
|
41
|
+
```ruby
|
|
42
|
+
classe.mandatory_skills # Pericias obrigatorias
|
|
43
|
+
# => ["Luta", "Fortitude"]
|
|
44
|
+
|
|
45
|
+
classe.choose_skills_amount # Quantidade de pericias a escolher
|
|
46
|
+
# => 4
|
|
47
|
+
|
|
48
|
+
classe.available_skills # Pericias disponiveis para escolha
|
|
49
|
+
# => ["Atletismo", "Cavalgar", "Intimidacao", ...]
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Proficiencias
|
|
53
|
+
|
|
54
|
+
```ruby
|
|
55
|
+
classe.weapon_proficiencies # Proficiencias em armas
|
|
56
|
+
# => ["simples", "marciais"]
|
|
57
|
+
|
|
58
|
+
classe.armor_proficiencies # Proficiencias em armaduras
|
|
59
|
+
# => ["leves", "pesadas"]
|
|
60
|
+
|
|
61
|
+
classe.shield_proficiency? # Proficiencia em escudos
|
|
62
|
+
# => true
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Conjuracao
|
|
66
|
+
|
|
67
|
+
```ruby
|
|
68
|
+
classe.conjurador? # Verifica se a classe conjura magias
|
|
69
|
+
# => false (para Guerreiro)
|
|
70
|
+
# => true (para Arcanista)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Conversao
|
|
74
|
+
|
|
75
|
+
```ruby
|
|
76
|
+
classe.to_h # Converte para Hash completo
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Exemplos
|
|
80
|
+
|
|
81
|
+
```ruby
|
|
82
|
+
# Listar todas as classes
|
|
83
|
+
Tormenta20.classes.all.each do |c|
|
|
84
|
+
puts "#{c.name}: #{c.initial_hp} PV inicial, +#{c.hp_per_level}/nivel"
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Classes conjuradoras
|
|
88
|
+
Tormenta20.classes.conjuradores.each do |c|
|
|
89
|
+
puts "#{c.name} - PM/nivel: #{c.mp_per_level}"
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Buscar classe especifica
|
|
93
|
+
arcanista = Tormenta20.classes.find("arcanista")
|
|
94
|
+
puts arcanista.name # => "Arcanista"
|
|
95
|
+
puts arcanista.conjurador? # => true
|
|
96
|
+
puts arcanista.available_skills # Lista de pericias
|
|
97
|
+
|
|
98
|
+
# Classes com mais PV inicial
|
|
99
|
+
Tormenta20.classes.all.sort_by { |c| -c.initial_hp }.each do |c|
|
|
100
|
+
puts "#{c.name}: #{c.initial_hp} PV"
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# Classes com proficiencia em armaduras pesadas
|
|
104
|
+
Tormenta20.classes.select { |c| c.armor_proficiencies.include?("pesadas") }
|
|
105
|
+
```
|