tormenta20 0.2.17 → 0.2.19

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.
Files changed (199) hide show
  1. checksums.yaml +4 -4
  2. data/db/schema.sql +122 -0
  3. data/db/tormenta20.sqlite3 +0 -0
  4. data/src/json/itens_magicos/acessorios/amuleto_da_robustez.json +14 -0
  5. data/src/json/itens_magicos/acessorios/anel_da_energia.json +12 -0
  6. data/src/json/itens_magicos/acessorios/anel_da_liberdade.json +10 -0
  7. data/src/json/itens_magicos/acessorios/anel_da_protecao.json +12 -0
  8. data/src/json/itens_magicos/acessorios/anel_da_regeneracao.json +12 -0
  9. data/src/json/itens_magicos/acessorios/anel_da_vitalidade.json +12 -0
  10. data/src/json/itens_magicos/acessorios/anel_de_invisibilidade.json +10 -0
  11. data/src/json/itens_magicos/acessorios/anel_de_telecinesia.json +19 -0
  12. data/src/json/itens_magicos/acessorios/anel_do_escudo_mental.json +10 -0
  13. data/src/json/itens_magicos/acessorios/anel_do_sustento.json +10 -0
  14. data/src/json/itens_magicos/acessorios/anel_refletor.json +19 -0
  15. data/src/json/itens_magicos/acessorios/bainha_magica.json +19 -0
  16. data/src/json/itens_magicos/acessorios/bola_de_cristal.json +19 -0
  17. data/src/json/itens_magicos/acessorios/botas_aladas.json +19 -0
  18. data/src/json/itens_magicos/acessorios/botas_velozes.json +20 -0
  19. data/src/json/itens_magicos/acessorios/bracadeiras_do_arqueiro.json +12 -0
  20. data/src/json/itens_magicos/acessorios/braceletes_de_bronze.json +13 -0
  21. data/src/json/itens_magicos/acessorios/braceletes_de_ouro.json +13 -0
  22. data/src/json/itens_magicos/acessorios/brincos_da_sagacidade.json +14 -0
  23. data/src/json/itens_magicos/acessorios/brincos_de_marah.json +10 -0
  24. data/src/json/itens_magicos/acessorios/caveira_maldita.json +10 -0
  25. data/src/json/itens_magicos/acessorios/chapeu_do_disfarce.json +19 -0
  26. data/src/json/itens_magicos/acessorios/cinto_da_forca_do_gigante.json +14 -0
  27. data/src/json/itens_magicos/acessorios/cinto_do_campeao.json +14 -0
  28. data/src/json/itens_magicos/acessorios/colar_guardiao.json +12 -0
  29. data/src/json/itens_magicos/acessorios/corda_da_escalada.json +10 -0
  30. data/src/json/itens_magicos/acessorios/coroa_majestosa.json +14 -0
  31. data/src/json/itens_magicos/acessorios/elmo_do_teletransporte.json +25 -0
  32. data/src/json/itens_magicos/acessorios/espelho_da_oposicao.json +10 -0
  33. data/src/json/itens_magicos/acessorios/espelho_do_aprisionamento.json +10 -0
  34. data/src/json/itens_magicos/acessorios/estatueta_animista.json +10 -0
  35. data/src/json/itens_magicos/acessorios/estola_da_serenidade.json +14 -0
  36. data/src/json/itens_magicos/acessorios/faixas_do_pugilista.json +13 -0
  37. data/src/json/itens_magicos/acessorios/ferraduras_da_velocidade.json +10 -0
  38. data/src/json/itens_magicos/acessorios/flauta_fantasma.json +19 -0
  39. data/src/json/itens_magicos/acessorios/garrafa_da_fumaca_eterna.json +19 -0
  40. data/src/json/itens_magicos/acessorios/gema_da_luminosidade.json +19 -0
  41. data/src/json/itens_magicos/acessorios/gema_da_telepatia.json +25 -0
  42. data/src/json/itens_magicos/acessorios/gema_elemental.json +19 -0
  43. data/src/json/itens_magicos/acessorios/lanterna_da_revelacao.json +10 -0
  44. data/src/json/itens_magicos/acessorios/luvas_da_delicadeza.json +14 -0
  45. data/src/json/itens_magicos/acessorios/manoplas_da_forca_do_ogro.json +14 -0
  46. data/src/json/itens_magicos/acessorios/manto_da_aranha.json +20 -0
  47. data/src/json/itens_magicos/acessorios/manto_da_resistencia.json +12 -0
  48. data/src/json/itens_magicos/acessorios/manto_do_fascinio.json +14 -0
  49. data/src/json/itens_magicos/acessorios/manto_do_morcego.json +22 -0
  50. data/src/json/itens_magicos/acessorios/manto_elfico.json +14 -0
  51. data/src/json/itens_magicos/acessorios/manual_da_saude_corporal.json +10 -0
  52. data/src/json/itens_magicos/acessorios/manual_do_bom_exercicio.json +10 -0
  53. data/src/json/itens_magicos/acessorios/manual_dos_movimentos_precisos.json +10 -0
  54. data/src/json/itens_magicos/acessorios/medalhao_de_lena.json +10 -0
  55. data/src/json/itens_magicos/acessorios/mochila_de_carga.json +10 -0
  56. data/src/json/itens_magicos/acessorios/orbe_das_tempestades.json +25 -0
  57. data/src/json/itens_magicos/acessorios/pingente_da_saude.json +10 -0
  58. data/src/json/itens_magicos/acessorios/pingente_da_sensatez.json +14 -0
  59. data/src/json/itens_magicos/acessorios/pulseiras_da_celeridade.json +14 -0
  60. data/src/json/itens_magicos/acessorios/robe_do_arquimago.json +10 -0
  61. data/src/json/itens_magicos/acessorios/simbolo_aben/303/247oado.json +10 -0
  62. data/src/json/itens_magicos/acessorios/tapete_voador.json +10 -0
  63. data/src/json/itens_magicos/acessorios/tiara_da_sapiencia.json +14 -0
  64. data/src/json/itens_magicos/acessorios/tomo_da_compreensao.json +10 -0
  65. data/src/json/itens_magicos/acessorios/tomo_da_lideranca_e_influencia.json +10 -0
  66. data/src/json/itens_magicos/acessorios/tomo_dos_grandes_pensamentos.json +10 -0
  67. data/src/json/itens_magicos/acessorios/torque_do_vigor.json +14 -0
  68. data/src/json/itens_magicos/acessorios/vassoura_voadora.json +10 -0
  69. data/src/json/itens_magicos/pocoes/aben/303/247oar_alimentos.json +13 -0
  70. data/src/json/itens_magicos/pocoes/alterar_tamanho.json +13 -0
  71. data/src/json/itens_magicos/pocoes/aparencia_perfeita.json +13 -0
  72. data/src/json/itens_magicos/pocoes/area_escorregadia.json +13 -0
  73. data/src/json/itens_magicos/pocoes/arma_magica.json +13 -0
  74. data/src/json/itens_magicos/pocoes/arma_magica_maior.json +13 -0
  75. data/src/json/itens_magicos/pocoes/armamento_da_natureza.json +13 -0
  76. data/src/json/itens_magicos/pocoes/bola_de_fogo.json +13 -0
  77. data/src/json/itens_magicos/pocoes/bola_de_fogo_maior.json +13 -0
  78. data/src/json/itens_magicos/pocoes/camuflagem_ilusoria.json +13 -0
  79. data/src/json/itens_magicos/pocoes/compreensao.json +13 -0
  80. data/src/json/itens_magicos/pocoes/concentracao_de_combate.json +13 -0
  81. data/src/json/itens_magicos/pocoes/curar_ferimentos_maior.json +13 -0
  82. data/src/json/itens_magicos/pocoes/curar_ferimentos_maior2.json +13 -0
  83. data/src/json/itens_magicos/pocoes/curar_ferimentos_medio.json +13 -0
  84. data/src/json/itens_magicos/pocoes/curar_ferimentos_menor.json +13 -0
  85. data/src/json/itens_magicos/pocoes/disfarce_ilusorio.json +13 -0
  86. data/src/json/itens_magicos/pocoes/escudo_da_fe.json +13 -0
  87. data/src/json/itens_magicos/pocoes/escuridao.json +13 -0
  88. data/src/json/itens_magicos/pocoes/fisico_divino.json +13 -0
  89. data/src/json/itens_magicos/pocoes/fisico_divino_maior.json +13 -0
  90. data/src/json/itens_magicos/pocoes/invisibilidade.json +13 -0
  91. data/src/json/itens_magicos/pocoes/luz.json +13 -0
  92. data/src/json/itens_magicos/pocoes/mente_divina.json +13 -0
  93. data/src/json/itens_magicos/pocoes/metamorfose.json +13 -0
  94. data/src/json/itens_magicos/pocoes/nevoa.json +13 -0
  95. data/src/json/itens_magicos/pocoes/primor_atletico.json +13 -0
  96. data/src/json/itens_magicos/pocoes/protecao_divina.json +13 -0
  97. data/src/json/itens_magicos/pocoes/purificacao.json +13 -0
  98. data/src/json/itens_magicos/pocoes/resistencia_a_energia.json +13 -0
  99. data/src/json/itens_magicos/pocoes/sono.json +13 -0
  100. data/src/json/itens_magicos/pocoes/suporte_ambiental.json +13 -0
  101. data/src/json/itens_magicos/pocoes/tranca_arcana.json +13 -0
  102. data/src/json/itens_magicos/pocoes/velocidade.json +13 -0
  103. data/src/json/itens_magicos/pocoes/vestimenta_da_fe.json +13 -0
  104. data/src/json/itens_magicos/pocoes/visao_mistica.json +13 -0
  105. data/src/json/itens_magicos/pocoes/vitalidade_fantasma.json +13 -0
  106. data/src/json/itens_magicos/pocoes/voz_divina.json +13 -0
  107. data/src/json/itens_superiores/encantamentos/armaduras_escudos/abascanto.json +10 -0
  108. data/src/json/itens_superiores/encantamentos/armaduras_escudos/abencado.json +10 -0
  109. data/src/json/itens_superiores/encantamentos/armaduras_escudos/acrobatico.json +10 -0
  110. data/src/json/itens_superiores/encantamentos/armaduras_escudos/alado.json +10 -0
  111. data/src/json/itens_superiores/encantamentos/armaduras_escudos/animado.json +11 -0
  112. data/src/json/itens_superiores/encantamentos/armaduras_escudos/assustador.json +10 -0
  113. data/src/json/itens_superiores/encantamentos/armaduras_escudos/caustica.json +10 -0
  114. data/src/json/itens_superiores/encantamentos/armaduras_escudos/defensor.json +11 -0
  115. data/src/json/itens_superiores/encantamentos/armaduras_escudos/escorregadio.json +10 -0
  116. data/src/json/itens_superiores/encantamentos/armaduras_escudos/esmacador.json +11 -0
  117. data/src/json/itens_superiores/encantamentos/armaduras_escudos/fantasmagorico.json +10 -0
  118. data/src/json/itens_superiores/encantamentos/armaduras_escudos/fortificado.json +10 -0
  119. data/src/json/itens_superiores/encantamentos/armaduras_escudos/gelido.json +10 -0
  120. data/src/json/itens_superiores/encantamentos/armaduras_escudos/guardiao.json +13 -0
  121. data/src/json/itens_superiores/encantamentos/armaduras_escudos/hipnotico.json +10 -0
  122. data/src/json/itens_superiores/encantamentos/armaduras_escudos/ilusorio.json +10 -0
  123. data/src/json/itens_superiores/encantamentos/armaduras_escudos/incandescente.json +10 -0
  124. data/src/json/itens_superiores/encantamentos/armaduras_escudos/invulneravel.json +10 -0
  125. data/src/json/itens_superiores/encantamentos/armaduras_escudos/opaco.json +10 -0
  126. data/src/json/itens_superiores/encantamentos/armaduras_escudos/protetor.json +10 -0
  127. data/src/json/itens_superiores/encantamentos/armaduras_escudos/refletor.json +10 -0
  128. data/src/json/itens_superiores/encantamentos/armaduras_escudos/relampejante.json +10 -0
  129. data/src/json/itens_superiores/encantamentos/armaduras_escudos/reluzente.json +10 -0
  130. data/src/json/itens_superiores/encantamentos/armaduras_escudos/sombrio.json +10 -0
  131. data/src/json/itens_superiores/encantamentos/armaduras_escudos/zeloso.json +10 -0
  132. data/src/json/itens_superiores/encantamentos/armas/ameacadora.json +10 -0
  133. data/src/json/itens_superiores/encantamentos/armas/anticriatura.json +10 -0
  134. data/src/json/itens_superiores/encantamentos/armas/arremesso.json +10 -0
  135. data/src/json/itens_superiores/encantamentos/armas/assassina.json +10 -0
  136. data/src/json/itens_superiores/encantamentos/armas/cacadora.json +10 -0
  137. data/src/json/itens_superiores/encantamentos/armas/congelante.json +12 -0
  138. data/src/json/itens_superiores/encantamentos/armas/conjuradora.json +10 -0
  139. data/src/json/itens_superiores/encantamentos/armas/corrosiva.json +12 -0
  140. data/src/json/itens_superiores/encantamentos/armas/dancarina.json +10 -0
  141. data/src/json/itens_superiores/encantamentos/armas/defensora.json +11 -0
  142. data/src/json/itens_superiores/encantamentos/armas/destruidora.json +10 -0
  143. data/src/json/itens_superiores/encantamentos/armas/dilacerante.json +10 -0
  144. data/src/json/itens_superiores/encantamentos/armas/drenante.json +10 -0
  145. data/src/json/itens_superiores/encantamentos/armas/eletrica.json +12 -0
  146. data/src/json/itens_superiores/encantamentos/armas/energetica.json +13 -0
  147. data/src/json/itens_superiores/encantamentos/armas/excruciante.json +10 -0
  148. data/src/json/itens_superiores/encantamentos/armas/flamejante.json +12 -0
  149. data/src/json/itens_superiores/encantamentos/armas/formidavel.json +12 -0
  150. data/src/json/itens_superiores/encantamentos/armas/lancinante.json +12 -0
  151. data/src/json/itens_superiores/encantamentos/armas/magnifica.json +14 -0
  152. data/src/json/itens_superiores/encantamentos/armas/piedosa.json +10 -0
  153. data/src/json/itens_superiores/encantamentos/armas/profana.json +10 -0
  154. data/src/json/itens_superiores/encantamentos/armas/sagrada.json +10 -0
  155. data/src/json/itens_superiores/encantamentos/armas/sanguinaria.json +10 -0
  156. data/src/json/itens_superiores/encantamentos/armas/trovejante.json +10 -0
  157. data/src/json/itens_superiores/encantamentos/armas/tumular.json +12 -0
  158. data/src/json/itens_superiores/encantamentos/armas/veloz.json +10 -0
  159. data/src/json/itens_superiores/encantamentos/armas/venenosa.json +10 -0
  160. data/src/json/pericias/acrobacia.json +46 -0
  161. data/src/json/pericias/adestramento.json +22 -0
  162. data/src/json/pericias/atletismo.json +34 -0
  163. data/src/json/pericias/atuacao.json +22 -0
  164. data/src/json/pericias/cavalgar.json +28 -0
  165. data/src/json/pericias/conhecimento.json +22 -0
  166. data/src/json/pericias/cura.json +34 -0
  167. data/src/json/pericias/diplomacia.json +28 -0
  168. data/src/json/pericias/enganacao.json +46 -0
  169. data/src/json/pericias/fortitude.json +10 -0
  170. data/src/json/pericias/furtividade.json +22 -0
  171. data/src/json/pericias/guerra.json +22 -0
  172. data/src/json/pericias/iniciativa.json +9 -0
  173. data/src/json/pericias/intimidacao.json +22 -0
  174. data/src/json/pericias/intuicao.json +22 -0
  175. data/src/json/pericias/investigacao.json +22 -0
  176. data/src/json/pericias/jogatina.json +17 -0
  177. data/src/json/pericias/ladinagem.json +34 -0
  178. data/src/json/pericias/luta.json +9 -0
  179. data/src/json/pericias/misticismo.json +46 -0
  180. data/src/json/pericias/nobreza.json +22 -0
  181. data/src/json/pericias/oficio.json +34 -0
  182. data/src/json/pericias/percepcao.json +22 -0
  183. data/src/json/pericias/pilotagem.json +9 -0
  184. data/src/json/pericias/pontaria.json +9 -0
  185. data/src/json/pericias/reflexos.json +10 -0
  186. data/src/json/pericias/religiao.json +34 -0
  187. data/src/json/pericias/sobrevivencia.json +34 -0
  188. data/src/json/pericias/vontade.json +10 -0
  189. data/src/json/poderes/habilidades_de_classe/guerreiro/golpe_pessoal.json +23 -3
  190. data/src/json/regras/pericias_de_resistencia.json +6 -0
  191. data/src/json/tabelas/jogatina_resultados.json +14 -0
  192. data/src/ruby/tormenta20/models/acessorio_magico.rb +25 -0
  193. data/src/ruby/tormenta20/models/encantamento.rb +44 -0
  194. data/src/ruby/tormenta20/models/pericia.rb +43 -0
  195. data/src/ruby/tormenta20/models/pocao.rb +19 -0
  196. data/src/ruby/tormenta20/models/tabela.rb +26 -0
  197. data/src/ruby/tormenta20/seeder.rb +18 -0
  198. data/src/ruby/tormenta20.rb +50 -0
  199. metadata +194 -2
@@ -0,0 +1,14 @@
1
+ {
2
+ "id": "jogatina_resultados",
3
+ "name": "Resultados de Jogatina",
4
+ "description": "Resultados de um teste de Jogatina para o uso Apostar.",
5
+ "headers": ["Teste", "Ganho"],
6
+ "rows": [
7
+ { "Teste": "9 ou menos", "Ganho": "Nenhum" },
8
+ { "Teste": "10 a 14", "Ganho": "Metade da aposta" },
9
+ { "Teste": "15 a 19", "Ganho": "Valor da aposta (empate)" },
10
+ { "Teste": "20 a 29", "Ganho": "Dobro da aposta" },
11
+ { "Teste": "30 a 39", "Ganho": "Triplo da aposta" },
12
+ { "Teste": "40 ou mais", "Ganho": "Quíntuplo da aposta" }
13
+ ]
14
+ }
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_record"
4
+
5
+ module Tormenta20
6
+ module Models
7
+ # Magic accessory items (rings, amulets, cloaks, etc.) with passive and active effects.
8
+ class AcessorioMagico < Base
9
+ self.table_name = "acessorios_magicos"
10
+
11
+ scope :menores, -> { where(categoria: "menor") }
12
+ scope :medios, -> { where(categoria: "medio") }
13
+ scope :maiores, -> { where(categoria: "maior") }
14
+
15
+ def efeito
16
+ raw = read_attribute(:efeito)
17
+ return {} if raw.blank?
18
+
19
+ raw.is_a?(Hash) ? raw : JSON.parse(raw)
20
+ rescue JSON::ParserError
21
+ {}
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_record"
4
+ require "json"
5
+
6
+ module Tormenta20
7
+ module Models
8
+ # Model representing an Encantamento (Enchantment) in Tormenta20.
9
+ #
10
+ # Enchantments are magical properties applied to permanent magic items
11
+ # (weapons, armor, shields). They are distinct from Melhorias (enhancements),
12
+ # which apply to superior items.
13
+ #
14
+ # @example Find all weapon enchantments
15
+ # Tormenta20.encantamentos.where(categoria: "arma")
16
+ #
17
+ # @example Find all armor/shield enchantments
18
+ # Tormenta20.encantamentos.where(categoria: "armadura_escudo")
19
+ class Encantamento < Base
20
+ self.table_name = "encantamentos"
21
+
22
+ validates :id, presence: true, uniqueness: true
23
+ validates :name, presence: true
24
+ validates :categoria, presence: true, inclusion: { in: %w[arma armadura_escudo] }
25
+
26
+ scope :armas, -> { where(categoria: "arma") }
27
+ scope :armaduras_escudos, -> { where(categoria: "armadura_escudo") }
28
+ scope :escudo_only, -> { where(escudo_only: true) }
29
+
30
+ def to_h
31
+ {
32
+ id: id,
33
+ name: name,
34
+ description: description,
35
+ categoria: categoria,
36
+ escudo_only: escudo_only == 1,
37
+ conta_como_dois: conta_como_dois == 1,
38
+ prerequisitos: prerequisitos,
39
+ efeito: efeito
40
+ }.compact
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_record"
4
+ require "json"
5
+
6
+ module Tormenta20
7
+ module Models
8
+ # Model representing a Perícia (Skill) in Tormenta20.
9
+ class Pericia < Base
10
+ self.table_name = "pericias"
11
+
12
+ ATRIBUTOS = %w[FOR DES CON INT SAB CAR].freeze
13
+
14
+ validates :id, presence: true, uniqueness: true
15
+ validates :name, presence: true
16
+ validates :atributo, inclusion: { in: ATRIBUTOS }
17
+
18
+ scope :by_atributo, ->(attr) { where(atributo: attr) }
19
+ scope :trained_only, -> { where(trained_only: true) }
20
+ scope :with_armor_penalty, -> { where(armor_penalty: true) }
21
+ scope :resistance_skills, -> { where(resistance_skill: true) }
22
+
23
+ def to_h
24
+ {
25
+ id: id,
26
+ name: name,
27
+ atributo: atributo,
28
+ trained_only: trained_only?,
29
+ armor_penalty: armor_penalty?,
30
+ resistance_skill: resistance_skill?,
31
+ description: description,
32
+ uses: uses || []
33
+ }.compact
34
+ end
35
+
36
+ private
37
+
38
+ def trained_only? = [true, 1].include?(trained_only)
39
+ def armor_penalty? = [true, 1].include?(armor_penalty)
40
+ def resistance_skill? = [true, 1].include?(resistance_skill)
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_record"
4
+
5
+ module Tormenta20
6
+ module Models
7
+ # Consumable magic items: potions, oils, and grenades.
8
+ class Pocao < Base
9
+ self.table_name = "pocoes"
10
+
11
+ scope :menores, -> { where(categoria: "menor") }
12
+ scope :medias, -> { where(categoria: "medio") }
13
+ scope :maiores, -> { where(categoria: "maior") }
14
+ scope :pocoes, -> { where(subtipo: "pocao") }
15
+ scope :oleos, -> { where(subtipo: "oleo") }
16
+ scope :granadas, -> { where(subtipo: "granada") }
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_record"
4
+ require "json"
5
+
6
+ module Tormenta20
7
+ module Models
8
+ # Model representing a Tabela (Reference Table) in Tormenta20.
9
+ class Tabela < Base
10
+ self.table_name = "tabelas"
11
+
12
+ validates :id, presence: true, uniqueness: true
13
+ validates :name, presence: true
14
+
15
+ def to_h
16
+ {
17
+ id: id,
18
+ name: name,
19
+ description: description,
20
+ headers: headers || [],
21
+ rows: rows || []
22
+ }.compact
23
+ end
24
+ end
25
+ end
26
+ end
@@ -27,6 +27,8 @@ module Tormenta20
27
27
  seed_itens_superiores
28
28
  seed_regras
29
29
  seed_condicoes
30
+ seed_pericias
31
+ seed_tabelas
30
32
 
31
33
  log "Database seeded successfully!"
32
34
  end
@@ -361,6 +363,22 @@ module Tormenta20
361
363
  )
362
364
  end
363
365
 
366
+ def seed_pericias
367
+ import_json_files(
368
+ "pericias",
369
+ Models::Pericia,
370
+ %i[id name atributo trained_only armor_penalty resistance_skill description uses]
371
+ )
372
+ end
373
+
374
+ def seed_tabelas
375
+ import_json_files(
376
+ "tabelas",
377
+ Models::Tabela,
378
+ %i[id name description headers rows]
379
+ )
380
+ end
381
+
364
382
  def import_json_files(subdir, model, attrs, extra_attrs: {}, transform: nil)
365
383
  json_dir = File.join(JSON_BASE_PATH, subdir)
366
384
  return unless Dir.exist?(json_dir)
@@ -147,6 +147,16 @@ module Tormenta20
147
147
  Models::MaterialEspecial
148
148
  end
149
149
 
150
+ # Access the Encantamento (Enchantment) model for querying magic enchantments.
151
+ #
152
+ # @return [Class<Models::Encantamento>] The Encantamento model class
153
+ # @example
154
+ # Tormenta20.encantamentos.armas
155
+ # Tormenta20.encantamentos.armaduras_escudos
156
+ def encantamentos
157
+ Models::Encantamento
158
+ end
159
+
150
160
  # Access the Melhoria (Enhancement) model for querying magic enhancements.
151
161
  #
152
162
  # @return [Class<Models::Melhoria>] The Melhoria model class
@@ -192,6 +202,26 @@ module Tormenta20
192
202
  Models::Livro
193
203
  end
194
204
 
205
+ # Access the Pericia (Skill) model for querying skill rules.
206
+ #
207
+ # @return [Class<Models::Pericia>] The Pericia model class
208
+ # @example
209
+ # Tormenta20.pericias.all
210
+ # Tormenta20.pericias.trained_only
211
+ # Tormenta20.pericias.by_attribute("DES")
212
+ def pericias
213
+ Models::Pericia
214
+ end
215
+
216
+ # Access the Tabela (Reference Table) model for querying game tables.
217
+ #
218
+ # @return [Class<Models::Tabela>] The Tabela model class
219
+ # @example
220
+ # Tormenta20.tabelas.find("jogatina_resultados")
221
+ def tabelas
222
+ Models::Tabela
223
+ end
224
+
195
225
  # Acesso ao índice remissivo.
196
226
  #
197
227
  # @return [Class] Tormenta20::Models::IndiceRemissivo
@@ -199,6 +229,26 @@ module Tormenta20
199
229
  Models::IndiceRemissivo
200
230
  end
201
231
 
232
+ # Access the Pocao (Potion) model for querying magic potions, oils and grenades.
233
+ #
234
+ # @return [Class<Models::Pocao>] The Pocao model class
235
+ # @example
236
+ # Tormenta20.pocoes.menores
237
+ # Tormenta20.pocoes.granadas
238
+ def pocoes
239
+ Models::Pocao
240
+ end
241
+
242
+ # Access the AcessorioMagico (Magic Accessory) model for querying magic accessories.
243
+ #
244
+ # @return [Class<Models::AcessorioMagico>] The AcessorioMagico model class
245
+ # @example
246
+ # Tormenta20.acessorios.maiores
247
+ # Tormenta20.acessorios.find("anel_da_protecao")
248
+ def acessorios
249
+ Models::AcessorioMagico
250
+ end
251
+
202
252
  # @!endgroup
203
253
  end
204
254
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tormenta20
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.17
4
+ version: 0.2.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - LuanGB
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-05-05 00:00:00.000000000 Z
11
+ date: 2026-05-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -336,6 +336,162 @@ files:
336
336
  - src/json/equipamentos/municoes/pedras.json
337
337
  - src/json/equipamentos/municoes/virotes.json
338
338
  - src/json/indice_remissivo/t20_eja.json
339
+ - src/json/itens_magicos/acessorios/amuleto_da_robustez.json
340
+ - src/json/itens_magicos/acessorios/anel_da_energia.json
341
+ - src/json/itens_magicos/acessorios/anel_da_liberdade.json
342
+ - src/json/itens_magicos/acessorios/anel_da_protecao.json
343
+ - src/json/itens_magicos/acessorios/anel_da_regeneracao.json
344
+ - src/json/itens_magicos/acessorios/anel_da_vitalidade.json
345
+ - src/json/itens_magicos/acessorios/anel_de_invisibilidade.json
346
+ - src/json/itens_magicos/acessorios/anel_de_telecinesia.json
347
+ - src/json/itens_magicos/acessorios/anel_do_escudo_mental.json
348
+ - src/json/itens_magicos/acessorios/anel_do_sustento.json
349
+ - src/json/itens_magicos/acessorios/anel_refletor.json
350
+ - src/json/itens_magicos/acessorios/bainha_magica.json
351
+ - src/json/itens_magicos/acessorios/bola_de_cristal.json
352
+ - src/json/itens_magicos/acessorios/botas_aladas.json
353
+ - src/json/itens_magicos/acessorios/botas_velozes.json
354
+ - src/json/itens_magicos/acessorios/bracadeiras_do_arqueiro.json
355
+ - src/json/itens_magicos/acessorios/braceletes_de_bronze.json
356
+ - src/json/itens_magicos/acessorios/braceletes_de_ouro.json
357
+ - src/json/itens_magicos/acessorios/brincos_da_sagacidade.json
358
+ - src/json/itens_magicos/acessorios/brincos_de_marah.json
359
+ - src/json/itens_magicos/acessorios/caveira_maldita.json
360
+ - src/json/itens_magicos/acessorios/chapeu_do_disfarce.json
361
+ - src/json/itens_magicos/acessorios/cinto_da_forca_do_gigante.json
362
+ - src/json/itens_magicos/acessorios/cinto_do_campeao.json
363
+ - src/json/itens_magicos/acessorios/colar_guardiao.json
364
+ - src/json/itens_magicos/acessorios/corda_da_escalada.json
365
+ - src/json/itens_magicos/acessorios/coroa_majestosa.json
366
+ - src/json/itens_magicos/acessorios/elmo_do_teletransporte.json
367
+ - src/json/itens_magicos/acessorios/espelho_da_oposicao.json
368
+ - src/json/itens_magicos/acessorios/espelho_do_aprisionamento.json
369
+ - src/json/itens_magicos/acessorios/estatueta_animista.json
370
+ - src/json/itens_magicos/acessorios/estola_da_serenidade.json
371
+ - src/json/itens_magicos/acessorios/faixas_do_pugilista.json
372
+ - src/json/itens_magicos/acessorios/ferraduras_da_velocidade.json
373
+ - src/json/itens_magicos/acessorios/flauta_fantasma.json
374
+ - src/json/itens_magicos/acessorios/garrafa_da_fumaca_eterna.json
375
+ - src/json/itens_magicos/acessorios/gema_da_luminosidade.json
376
+ - src/json/itens_magicos/acessorios/gema_da_telepatia.json
377
+ - src/json/itens_magicos/acessorios/gema_elemental.json
378
+ - src/json/itens_magicos/acessorios/lanterna_da_revelacao.json
379
+ - src/json/itens_magicos/acessorios/luvas_da_delicadeza.json
380
+ - src/json/itens_magicos/acessorios/manoplas_da_forca_do_ogro.json
381
+ - src/json/itens_magicos/acessorios/manto_da_aranha.json
382
+ - src/json/itens_magicos/acessorios/manto_da_resistencia.json
383
+ - src/json/itens_magicos/acessorios/manto_do_fascinio.json
384
+ - src/json/itens_magicos/acessorios/manto_do_morcego.json
385
+ - src/json/itens_magicos/acessorios/manto_elfico.json
386
+ - src/json/itens_magicos/acessorios/manual_da_saude_corporal.json
387
+ - src/json/itens_magicos/acessorios/manual_do_bom_exercicio.json
388
+ - src/json/itens_magicos/acessorios/manual_dos_movimentos_precisos.json
389
+ - src/json/itens_magicos/acessorios/medalhao_de_lena.json
390
+ - src/json/itens_magicos/acessorios/mochila_de_carga.json
391
+ - src/json/itens_magicos/acessorios/orbe_das_tempestades.json
392
+ - src/json/itens_magicos/acessorios/pingente_da_saude.json
393
+ - src/json/itens_magicos/acessorios/pingente_da_sensatez.json
394
+ - src/json/itens_magicos/acessorios/pulseiras_da_celeridade.json
395
+ - src/json/itens_magicos/acessorios/robe_do_arquimago.json
396
+ - src/json/itens_magicos/acessorios/simbolo_abençoado.json
397
+ - src/json/itens_magicos/acessorios/tapete_voador.json
398
+ - src/json/itens_magicos/acessorios/tiara_da_sapiencia.json
399
+ - src/json/itens_magicos/acessorios/tomo_da_compreensao.json
400
+ - src/json/itens_magicos/acessorios/tomo_da_lideranca_e_influencia.json
401
+ - src/json/itens_magicos/acessorios/tomo_dos_grandes_pensamentos.json
402
+ - src/json/itens_magicos/acessorios/torque_do_vigor.json
403
+ - src/json/itens_magicos/acessorios/vassoura_voadora.json
404
+ - src/json/itens_magicos/pocoes/abençoar_alimentos.json
405
+ - src/json/itens_magicos/pocoes/alterar_tamanho.json
406
+ - src/json/itens_magicos/pocoes/aparencia_perfeita.json
407
+ - src/json/itens_magicos/pocoes/area_escorregadia.json
408
+ - src/json/itens_magicos/pocoes/arma_magica.json
409
+ - src/json/itens_magicos/pocoes/arma_magica_maior.json
410
+ - src/json/itens_magicos/pocoes/armamento_da_natureza.json
411
+ - src/json/itens_magicos/pocoes/bola_de_fogo.json
412
+ - src/json/itens_magicos/pocoes/bola_de_fogo_maior.json
413
+ - src/json/itens_magicos/pocoes/camuflagem_ilusoria.json
414
+ - src/json/itens_magicos/pocoes/compreensao.json
415
+ - src/json/itens_magicos/pocoes/concentracao_de_combate.json
416
+ - src/json/itens_magicos/pocoes/curar_ferimentos_maior.json
417
+ - src/json/itens_magicos/pocoes/curar_ferimentos_maior2.json
418
+ - src/json/itens_magicos/pocoes/curar_ferimentos_medio.json
419
+ - src/json/itens_magicos/pocoes/curar_ferimentos_menor.json
420
+ - src/json/itens_magicos/pocoes/disfarce_ilusorio.json
421
+ - src/json/itens_magicos/pocoes/escudo_da_fe.json
422
+ - src/json/itens_magicos/pocoes/escuridao.json
423
+ - src/json/itens_magicos/pocoes/fisico_divino.json
424
+ - src/json/itens_magicos/pocoes/fisico_divino_maior.json
425
+ - src/json/itens_magicos/pocoes/invisibilidade.json
426
+ - src/json/itens_magicos/pocoes/luz.json
427
+ - src/json/itens_magicos/pocoes/mente_divina.json
428
+ - src/json/itens_magicos/pocoes/metamorfose.json
429
+ - src/json/itens_magicos/pocoes/nevoa.json
430
+ - src/json/itens_magicos/pocoes/primor_atletico.json
431
+ - src/json/itens_magicos/pocoes/protecao_divina.json
432
+ - src/json/itens_magicos/pocoes/purificacao.json
433
+ - src/json/itens_magicos/pocoes/resistencia_a_energia.json
434
+ - src/json/itens_magicos/pocoes/sono.json
435
+ - src/json/itens_magicos/pocoes/suporte_ambiental.json
436
+ - src/json/itens_magicos/pocoes/tranca_arcana.json
437
+ - src/json/itens_magicos/pocoes/velocidade.json
438
+ - src/json/itens_magicos/pocoes/vestimenta_da_fe.json
439
+ - src/json/itens_magicos/pocoes/visao_mistica.json
440
+ - src/json/itens_magicos/pocoes/vitalidade_fantasma.json
441
+ - src/json/itens_magicos/pocoes/voz_divina.json
442
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/abascanto.json
443
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/abencado.json
444
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/acrobatico.json
445
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/alado.json
446
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/animado.json
447
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/assustador.json
448
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/caustica.json
449
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/defensor.json
450
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/escorregadio.json
451
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/esmacador.json
452
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/fantasmagorico.json
453
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/fortificado.json
454
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/gelido.json
455
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/guardiao.json
456
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/hipnotico.json
457
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/ilusorio.json
458
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/incandescente.json
459
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/invulneravel.json
460
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/opaco.json
461
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/protetor.json
462
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/refletor.json
463
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/relampejante.json
464
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/reluzente.json
465
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/sombrio.json
466
+ - src/json/itens_superiores/encantamentos/armaduras_escudos/zeloso.json
467
+ - src/json/itens_superiores/encantamentos/armas/ameacadora.json
468
+ - src/json/itens_superiores/encantamentos/armas/anticriatura.json
469
+ - src/json/itens_superiores/encantamentos/armas/arremesso.json
470
+ - src/json/itens_superiores/encantamentos/armas/assassina.json
471
+ - src/json/itens_superiores/encantamentos/armas/cacadora.json
472
+ - src/json/itens_superiores/encantamentos/armas/congelante.json
473
+ - src/json/itens_superiores/encantamentos/armas/conjuradora.json
474
+ - src/json/itens_superiores/encantamentos/armas/corrosiva.json
475
+ - src/json/itens_superiores/encantamentos/armas/dancarina.json
476
+ - src/json/itens_superiores/encantamentos/armas/defensora.json
477
+ - src/json/itens_superiores/encantamentos/armas/destruidora.json
478
+ - src/json/itens_superiores/encantamentos/armas/dilacerante.json
479
+ - src/json/itens_superiores/encantamentos/armas/drenante.json
480
+ - src/json/itens_superiores/encantamentos/armas/eletrica.json
481
+ - src/json/itens_superiores/encantamentos/armas/energetica.json
482
+ - src/json/itens_superiores/encantamentos/armas/excruciante.json
483
+ - src/json/itens_superiores/encantamentos/armas/flamejante.json
484
+ - src/json/itens_superiores/encantamentos/armas/formidavel.json
485
+ - src/json/itens_superiores/encantamentos/armas/lancinante.json
486
+ - src/json/itens_superiores/encantamentos/armas/magnifica.json
487
+ - src/json/itens_superiores/encantamentos/armas/piedosa.json
488
+ - src/json/itens_superiores/encantamentos/armas/profana.json
489
+ - src/json/itens_superiores/encantamentos/armas/sagrada.json
490
+ - src/json/itens_superiores/encantamentos/armas/sanguinaria.json
491
+ - src/json/itens_superiores/encantamentos/armas/trovejante.json
492
+ - src/json/itens_superiores/encantamentos/armas/tumular.json
493
+ - src/json/itens_superiores/encantamentos/armas/veloz.json
494
+ - src/json/itens_superiores/encantamentos/armas/venenosa.json
339
495
  - src/json/itens_superiores/materiais_especiais/aco_rubi.json
340
496
  - src/json/itens_superiores/materiais_especiais/adamante.json
341
497
  - src/json/itens_superiores/materiais_especiais/gelo_eterno.json
@@ -605,6 +761,35 @@ files:
605
761
  - src/json/origens/soldado.json
606
762
  - src/json/origens/taverneiro.json
607
763
  - src/json/origens/trabalhador.json
764
+ - src/json/pericias/acrobacia.json
765
+ - src/json/pericias/adestramento.json
766
+ - src/json/pericias/atletismo.json
767
+ - src/json/pericias/atuacao.json
768
+ - src/json/pericias/cavalgar.json
769
+ - src/json/pericias/conhecimento.json
770
+ - src/json/pericias/cura.json
771
+ - src/json/pericias/diplomacia.json
772
+ - src/json/pericias/enganacao.json
773
+ - src/json/pericias/fortitude.json
774
+ - src/json/pericias/furtividade.json
775
+ - src/json/pericias/guerra.json
776
+ - src/json/pericias/iniciativa.json
777
+ - src/json/pericias/intimidacao.json
778
+ - src/json/pericias/intuicao.json
779
+ - src/json/pericias/investigacao.json
780
+ - src/json/pericias/jogatina.json
781
+ - src/json/pericias/ladinagem.json
782
+ - src/json/pericias/luta.json
783
+ - src/json/pericias/misticismo.json
784
+ - src/json/pericias/nobreza.json
785
+ - src/json/pericias/oficio.json
786
+ - src/json/pericias/percepcao.json
787
+ - src/json/pericias/pilotagem.json
788
+ - src/json/pericias/pontaria.json
789
+ - src/json/pericias/reflexos.json
790
+ - src/json/pericias/religiao.json
791
+ - src/json/pericias/sobrevivencia.json
792
+ - src/json/pericias/vontade.json
608
793
  - src/json/poderes/habilidades_de_classe/arcanista/alta_arcana.json
609
794
  - src/json/poderes/habilidades_de_classe/arcanista/arcano_de_batalha.json
610
795
  - src/json/poderes/habilidades_de_classe/arcanista/aumento_de_atributo.json
@@ -1252,20 +1437,24 @@ files:
1252
1437
  - src/json/regras/limites_uso.json
1253
1438
  - src/json/regras/moedas.json
1254
1439
  - src/json/regras/passos_dano.json
1440
+ - src/json/regras/pericias_de_resistencia.json
1255
1441
  - src/json/regras/proficiencias.json
1256
1442
  - src/json/regras/propositos_armas.json
1257
1443
  - src/json/regras/tipos_dano.json
1258
1444
  - src/json/regras/venenos.json
1445
+ - src/json/tabelas/jogatina_resultados.json
1259
1446
  - src/python/__init__.py
1260
1447
  - src/ruby/tormenta20.rb
1261
1448
  - src/ruby/tormenta20/concerns/book_referenceable.rb
1262
1449
  - src/ruby/tormenta20/database.rb
1450
+ - src/ruby/tormenta20/models/acessorio_magico.rb
1263
1451
  - src/ruby/tormenta20/models/arma.rb
1264
1452
  - src/ruby/tormenta20/models/armadura.rb
1265
1453
  - src/ruby/tormenta20/models/base.rb
1266
1454
  - src/ruby/tormenta20/models/classe.rb
1267
1455
  - src/ruby/tormenta20/models/condicao.rb
1268
1456
  - src/ruby/tormenta20/models/divindade.rb
1457
+ - src/ruby/tormenta20/models/encantamento.rb
1269
1458
  - src/ruby/tormenta20/models/escudo.rb
1270
1459
  - src/ruby/tormenta20/models/indice_remissivo.rb
1271
1460
  - src/ruby/tormenta20/models/item.rb
@@ -1274,9 +1463,12 @@ files:
1274
1463
  - src/ruby/tormenta20/models/material_especial.rb
1275
1464
  - src/ruby/tormenta20/models/melhoria.rb
1276
1465
  - src/ruby/tormenta20/models/origem.rb
1466
+ - src/ruby/tormenta20/models/pericia.rb
1467
+ - src/ruby/tormenta20/models/pocao.rb
1277
1468
  - src/ruby/tormenta20/models/poder.rb
1278
1469
  - src/ruby/tormenta20/models/raca.rb
1279
1470
  - src/ruby/tormenta20/models/regra.rb
1471
+ - src/ruby/tormenta20/models/tabela.rb
1280
1472
  - src/ruby/tormenta20/rules.rb
1281
1473
  - src/ruby/tormenta20/rules/pm_cap.rb
1282
1474
  - src/ruby/tormenta20/seeder.rb